364 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+amx-int8 -mattr=+avx512f -verify-machineinstrs | FileCheck %s3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+amx-int8 -mattr=+avx512f,+egpr --show-mc-encoding -verify-machineinstrs | FileCheck %s --check-prefix=EGPR4 5@buf = dso_local global [3072 x i8] zeroinitializer, align 646 7define dso_local void @test_api(i16 signext %0, i16 signext %1) nounwind {8; CHECK-LABEL: test_api:9; CHECK: # %bb.0:10; CHECK-NEXT: pushq %rbp11; CHECK-NEXT: pushq %r1512; CHECK-NEXT: pushq %r1413; CHECK-NEXT: pushq %rbx14; CHECK-NEXT: subq $2120, %rsp # imm = 0x84815; CHECK-NEXT: movl %esi, %ebx16; CHECK-NEXT: movl %edi, %ebp17; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm018; CHECK-NEXT: vmovups %zmm0, (%rsp)19; CHECK-NEXT: movb $1, (%rsp)20; CHECK-NEXT: movw $8, {{[0-9]+}}(%rsp)21; CHECK-NEXT: movb $8, {{[0-9]+}}(%rsp)22; CHECK-NEXT: movw $8, {{[0-9]+}}(%rsp)23; CHECK-NEXT: movb $8, {{[0-9]+}}(%rsp)24; CHECK-NEXT: movw $8, {{[0-9]+}}(%rsp)25; CHECK-NEXT: movw %bx, {{[0-9]+}}(%rsp)26; CHECK-NEXT: movb %bpl, {{[0-9]+}}(%rsp)27; CHECK-NEXT: movw %bx, {{[0-9]+}}(%rsp)28; CHECK-NEXT: movb %bpl, {{[0-9]+}}(%rsp)29; CHECK-NEXT: movb %bpl, {{[0-9]+}}(%rsp)30; CHECK-NEXT: movw %bx, {{[0-9]+}}(%rsp)31; CHECK-NEXT: movb %bpl, {{[0-9]+}}(%rsp)32; CHECK-NEXT: movw %bx, {{[0-9]+}}(%rsp)33; CHECK-NEXT: movb %bpl, {{[0-9]+}}(%rsp)34; CHECK-NEXT: ldtilecfg (%rsp)35; CHECK-NEXT: movl $32, %r14d36; CHECK-NEXT: movl $buf+2048, %r15d37; CHECK-NEXT: tileloadd (%r15,%r14), %tmm538; CHECK-NEXT: xorl %eax, %eax39; CHECK-NEXT: testb %al, %al40; CHECK-NEXT: jne .LBB0_241; CHECK-NEXT: # %bb.1: # %if.true42; CHECK-NEXT: movl $buf, %eax43; CHECK-NEXT: movw $8, %cx44; CHECK-NEXT: tileloadd (%rax,%r14), %tmm045; CHECK-NEXT: movl $buf+1024, %eax46; CHECK-NEXT: tileloadd (%rax,%r14), %tmm147; CHECK-NEXT: movabsq $64, %rax48; CHECK-NEXT: tilestored %tmm5, 1088(%rsp,%rax) # 1024-byte Folded Spill49; CHECK-NEXT: tdpbssd %tmm1, %tmm0, %tmm550; CHECK-NEXT: tilestored %tmm5, 64(%rsp,%rax) # 1024-byte Folded Spill51; CHECK-NEXT: xorl %eax, %eax52; CHECK-NEXT: vzeroupper53; CHECK-NEXT: callq foo54; CHECK-NEXT: ldtilecfg (%rsp)55; CHECK-NEXT: movabsq $64, %rax56; CHECK-NEXT: tileloadd 64(%rsp,%rax), %tmm6 # 1024-byte Folded Reload57; CHECK-NEXT: jmp .LBB0_358; CHECK-NEXT: .LBB0_2: # %if.false59; CHECK-NEXT: movl $buf, %eax60; CHECK-NEXT: movw $8, %cx61; CHECK-NEXT: tileloadd (%rax,%r14), %tmm262; CHECK-NEXT: movl $buf+1024, %eax63; CHECK-NEXT: tileloadd (%rax,%r14), %tmm364; CHECK-NEXT: movabsq $64, %rax65; CHECK-NEXT: tilestored %tmm5, 1088(%rsp,%rax) # 1024-byte Folded Spill66; CHECK-NEXT: tdpbssd %tmm3, %tmm2, %tmm567; CHECK-NEXT: tilestored %tmm5, 64(%rsp,%rax) # 1024-byte Folded Spill68; CHECK-NEXT: xorl %eax, %eax69; CHECK-NEXT: vzeroupper70; CHECK-NEXT: callq foo71; CHECK-NEXT: ldtilecfg (%rsp)72; CHECK-NEXT: movabsq $64, %rax73; CHECK-NEXT: tileloadd 64(%rsp,%rax), %tmm6 # 1024-byte Folded Reload74; CHECK-NEXT: tilestored %tmm6, (%r15,%r14)75; CHECK-NEXT: .LBB0_3: # %exit76; CHECK-NEXT: movl $buf, %eax77; CHECK-NEXT: movl $32, %ecx78; CHECK-NEXT: movw $8, %dx79; CHECK-NEXT: tileloadd (%rax,%rcx), %tmm480; CHECK-NEXT: movabsq $64, %rax81; CHECK-NEXT: tileloadd 1088(%rsp,%rax), %tmm5 # 1024-byte Folded Reload82; CHECK-NEXT: tdpbssd %tmm4, %tmm6, %tmm583; CHECK-NEXT: movl $buf+2048, %eax84; CHECK-NEXT: tilestored %tmm5, (%rax,%rcx)85; CHECK-NEXT: addq $2120, %rsp # imm = 0x84886; CHECK-NEXT: popq %rbx87; CHECK-NEXT: popq %r1488; CHECK-NEXT: popq %r1589; CHECK-NEXT: popq %rbp90; CHECK-NEXT: tilerelease91; CHECK-NEXT: retq92;93; EGPR-LABEL: test_api:94; EGPR: # %bb.0:95; EGPR-NEXT: pushq %rbp # encoding: [0x55]96; EGPR-NEXT: pushq %r15 # encoding: [0x41,0x57]97; EGPR-NEXT: pushq %r14 # encoding: [0x41,0x56]98; EGPR-NEXT: pushq %rbx # encoding: [0x53]99; EGPR-NEXT: subq $2120, %rsp # encoding: [0x48,0x81,0xec,0x48,0x08,0x00,0x00]100; EGPR-NEXT: # imm = 0x848101; EGPR-NEXT: movl %esi, %ebx # encoding: [0x89,0xf3]102; EGPR-NEXT: movl %edi, %ebp # encoding: [0x89,0xfd]103; EGPR-NEXT: vxorps %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x57,0xc0]104; EGPR-NEXT: vmovups %zmm0, (%rsp) # encoding: [0x62,0xf1,0x7c,0x48,0x11,0x04,0x24]105; EGPR-NEXT: movb $1, (%rsp) # encoding: [0xc6,0x04,0x24,0x01]106; EGPR-NEXT: movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x10,0x08,0x00]107; EGPR-NEXT: movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x31,0x08]108; EGPR-NEXT: movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x14,0x08,0x00]109; EGPR-NEXT: movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x33,0x08]110; EGPR-NEXT: movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x18,0x08,0x00]111; EGPR-NEXT: movw %bx, {{[0-9]+}}(%rsp) # encoding: [0x66,0x89,0x5c,0x24,0x1c]112; EGPR-NEXT: movb %bpl, {{[0-9]+}}(%rsp) # encoding: [0x40,0x88,0x6c,0x24,0x36]113; EGPR-NEXT: movw %bx, {{[0-9]+}}(%rsp) # encoding: [0x66,0x89,0x5c,0x24,0x1a]114; EGPR-NEXT: movb %bpl, {{[0-9]+}}(%rsp) # encoding: [0x40,0x88,0x6c,0x24,0x35]115; EGPR-NEXT: movb %bpl, {{[0-9]+}}(%rsp) # encoding: [0x40,0x88,0x6c,0x24,0x34]116; EGPR-NEXT: movw %bx, {{[0-9]+}}(%rsp) # encoding: [0x66,0x89,0x5c,0x24,0x16]117; EGPR-NEXT: movb %bpl, {{[0-9]+}}(%rsp) # encoding: [0x40,0x88,0x6c,0x24,0x32]118; EGPR-NEXT: movw %bx, {{[0-9]+}}(%rsp) # encoding: [0x66,0x89,0x5c,0x24,0x12]119; EGPR-NEXT: movb %bpl, {{[0-9]+}}(%rsp) # encoding: [0x40,0x88,0x6c,0x24,0x30]120; EGPR-NEXT: ldtilecfg (%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x04,0x24]121; EGPR-NEXT: movl $32, %r14d # encoding: [0x41,0xbe,0x20,0x00,0x00,0x00]122; EGPR-NEXT: movl $buf+2048, %r15d # encoding: [0x41,0xbf,A,A,A,A]123; EGPR-NEXT: # fixup A - offset: 2, value: buf+2048, kind: FK_Data_4124; EGPR-NEXT: tileloadd (%r15,%r14), %tmm5 # EVEX TO VEX Compression encoding: [0xc4,0x82,0x7b,0x4b,0x2c,0x37]125; EGPR-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]126; EGPR-NEXT: testb %al, %al # encoding: [0x84,0xc0]127; EGPR-NEXT: jne .LBB0_2 # encoding: [0x75,A]128; EGPR-NEXT: # fixup A - offset: 1, value: .LBB0_2, kind: FK_PCRel_1129; EGPR-NEXT: # %bb.1: # %if.true130; EGPR-NEXT: movl $buf, %eax # encoding: [0xb8,A,A,A,A]131; EGPR-NEXT: # fixup A - offset: 1, value: buf, kind: FK_Data_4132; EGPR-NEXT: movw $8, %cx # encoding: [0x66,0xb9,0x08,0x00]133; EGPR-NEXT: tileloadd (%rax,%r14), %tmm0 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x04,0x30]134; EGPR-NEXT: movl $buf+1024, %eax # encoding: [0xb8,A,A,A,A]135; EGPR-NEXT: # fixup A - offset: 1, value: buf+1024, kind: FK_Data_4136; EGPR-NEXT: tileloadd (%rax,%r14), %tmm1 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x0c,0x30]137; EGPR-NEXT: movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]138; EGPR-NEXT: tilestored %tmm5, 1088(%rsp,%rax) # 1024-byte Folded Spill139; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0xac,0x04,0x40,0x04,0x00,0x00]140; EGPR-NEXT: tdpbssd %tmm1, %tmm0, %tmm5 # encoding: [0xc4,0xe2,0x73,0x5e,0xe8]141; EGPR-NEXT: tilestored %tmm5, 64(%rsp,%rax) # 1024-byte Folded Spill142; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0x6c,0x04,0x40]143; EGPR-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]144; EGPR-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]145; EGPR-NEXT: callq foo # encoding: [0xe8,A,A,A,A]146; EGPR-NEXT: # fixup A - offset: 1, value: foo, kind: reloc_branch_4byte_pcrel147; EGPR-NEXT: ldtilecfg (%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x04,0x24]148; EGPR-NEXT: movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]149; EGPR-NEXT: tileloadd 64(%rsp,%rax), %tmm6 # 1024-byte Folded Reload150; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0x74,0x04,0x40]151; EGPR-NEXT: jmp .LBB0_3 # encoding: [0xeb,A]152; EGPR-NEXT: # fixup A - offset: 1, value: .LBB0_3, kind: FK_PCRel_1153; EGPR-NEXT: .LBB0_2: # %if.false154; EGPR-NEXT: movl $buf, %eax # encoding: [0xb8,A,A,A,A]155; EGPR-NEXT: # fixup A - offset: 1, value: buf, kind: FK_Data_4156; EGPR-NEXT: movw $8, %cx # encoding: [0x66,0xb9,0x08,0x00]157; EGPR-NEXT: tileloadd (%rax,%r14), %tmm2 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x14,0x30]158; EGPR-NEXT: movl $buf+1024, %eax # encoding: [0xb8,A,A,A,A]159; EGPR-NEXT: # fixup A - offset: 1, value: buf+1024, kind: FK_Data_4160; EGPR-NEXT: tileloadd (%rax,%r14), %tmm3 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x1c,0x30]161; EGPR-NEXT: movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]162; EGPR-NEXT: tilestored %tmm5, 1088(%rsp,%rax) # 1024-byte Folded Spill163; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0xac,0x04,0x40,0x04,0x00,0x00]164; EGPR-NEXT: tdpbssd %tmm3, %tmm2, %tmm5 # encoding: [0xc4,0xe2,0x63,0x5e,0xea]165; EGPR-NEXT: tilestored %tmm5, 64(%rsp,%rax) # 1024-byte Folded Spill166; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0x6c,0x04,0x40]167; EGPR-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]168; EGPR-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]169; EGPR-NEXT: callq foo # encoding: [0xe8,A,A,A,A]170; EGPR-NEXT: # fixup A - offset: 1, value: foo, kind: reloc_branch_4byte_pcrel171; EGPR-NEXT: ldtilecfg (%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x04,0x24]172; EGPR-NEXT: movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]173; EGPR-NEXT: tileloadd 64(%rsp,%rax), %tmm6 # 1024-byte Folded Reload174; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0x74,0x04,0x40]175; EGPR-NEXT: tilestored %tmm6, (%r15,%r14) # EVEX TO VEX Compression encoding: [0xc4,0x82,0x7a,0x4b,0x34,0x37]176; EGPR-NEXT: .LBB0_3: # %exit177; EGPR-NEXT: movl $buf, %eax # encoding: [0xb8,A,A,A,A]178; EGPR-NEXT: # fixup A - offset: 1, value: buf, kind: FK_Data_4179; EGPR-NEXT: movl $32, %ecx # encoding: [0xb9,0x20,0x00,0x00,0x00]180; EGPR-NEXT: movw $8, %dx # encoding: [0x66,0xba,0x08,0x00]181; EGPR-NEXT: tileloadd (%rax,%rcx), %tmm4 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0x24,0x08]182; EGPR-NEXT: movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]183; EGPR-NEXT: tileloadd 1088(%rsp,%rax), %tmm5 # 1024-byte Folded Reload184; EGPR-NEXT: # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0xac,0x04,0x40,0x04,0x00,0x00]185; EGPR-NEXT: tdpbssd %tmm4, %tmm6, %tmm5 # encoding: [0xc4,0xe2,0x5b,0x5e,0xee]186; EGPR-NEXT: movl $buf+2048, %eax # encoding: [0xb8,A,A,A,A]187; EGPR-NEXT: # fixup A - offset: 1, value: buf+2048, kind: FK_Data_4188; EGPR-NEXT: tilestored %tmm5, (%rax,%rcx) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0x2c,0x08]189; EGPR-NEXT: addq $2120, %rsp # encoding: [0x48,0x81,0xc4,0x48,0x08,0x00,0x00]190; EGPR-NEXT: # imm = 0x848191; EGPR-NEXT: popq %rbx # encoding: [0x5b]192; EGPR-NEXT: popq %r14 # encoding: [0x41,0x5e]193; EGPR-NEXT: popq %r15 # encoding: [0x41,0x5f]194; EGPR-NEXT: popq %rbp # encoding: [0x5d]195; EGPR-NEXT: tilerelease # encoding: [0xc4,0xe2,0x78,0x49,0xc0]196; EGPR-NEXT: retq # encoding: [0xc3]197 %c = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 %0, i16 %1, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 2048), i64 32)198 br i1 undef, label %if.true, label %if.false199if.true:200 %a1 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 %0, i16 8, ptr @buf, i64 32)201 %b1 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 %1, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 1024), i64 32)202 %d1 = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 %0, i16 %1, i16 8, x86_amx %c, x86_amx %a1, x86_amx %b1)203 tail call void (...) @foo()204 br label %exit205if.false:206 %a2 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 %0, i16 8, ptr @buf, i64 32)207 %b2 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 %1, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 1024), i64 32)208 %d2 = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 %0, i16 %1, i16 8, x86_amx %c, x86_amx %a2, x86_amx %b2)209 tail call void (...) @foo()210 tail call void @llvm.x86.tilestored64.internal(i16 %0, i16 %1, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 2048), i64 32, x86_amx %d2)211 br label %exit212exit:213 %d = phi x86_amx [ %d1, %if.true ], [ %d2, %if.false ]214 %a = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 %0, i16 8, ptr @buf, i64 32)215 %res = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 %0, i16 %1, i16 8, x86_amx %c, x86_amx %d, x86_amx %a)216 tail call void @llvm.x86.tilestored64.internal(i16 %0, i16 %1, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 2048), i64 32, x86_amx %res)217 ret void218}219 220define dso_local void @test3(ptr%buf) nounwind {221; CHECK-LABEL: test3:222; CHECK: # %bb.0: # %entry223; CHECK-NEXT: pushq %rbp224; CHECK-NEXT: pushq %r15225; CHECK-NEXT: pushq %r14226; CHECK-NEXT: pushq %rbx227; CHECK-NEXT: subq $72, %rsp228; CHECK-NEXT: vxorps %xmm0, %xmm0, %xmm0229; CHECK-NEXT: vmovups %zmm0, {{[0-9]+}}(%rsp)230; CHECK-NEXT: movb $1, {{[0-9]+}}(%rsp)231; CHECK-NEXT: movb $8, {{[0-9]+}}(%rsp)232; CHECK-NEXT: movw $8, {{[0-9]+}}(%rsp)233; CHECK-NEXT: movb $8, {{[0-9]+}}(%rsp)234; CHECK-NEXT: movw $8, {{[0-9]+}}(%rsp)235; CHECK-NEXT: movb $8, {{[0-9]+}}(%rsp)236; CHECK-NEXT: movw $8, {{[0-9]+}}(%rsp)237; CHECK-NEXT: ldtilecfg {{[0-9]+}}(%rsp)238; CHECK-NEXT: movw $8, %bp239; CHECK-NEXT: tilezero %tmm0240; CHECK-NEXT: xorl %eax, %eax241; CHECK-NEXT: testb %al, %al242; CHECK-NEXT: jne .LBB1_3243; CHECK-NEXT: # %bb.1: # %loop.header.preheader244; CHECK-NEXT: movq %rdi, %rbx245; CHECK-NEXT: movl $32, %r14d246; CHECK-NEXT: xorl %r15d, %r15d247; CHECK-NEXT: .p2align 4248; CHECK-NEXT: .LBB1_2: # %loop.header249; CHECK-NEXT: # =>This Inner Loop Header: Depth=1250; CHECK-NEXT: tilestored %tmm0, (%rbx,%r14)251; CHECK-NEXT: xorl %eax, %eax252; CHECK-NEXT: tilezero %tmm0253; CHECK-NEXT: vzeroupper254; CHECK-NEXT: callq foo255; CHECK-NEXT: ldtilecfg {{[0-9]+}}(%rsp)256; CHECK-NEXT: tilezero %tmm0257; CHECK-NEXT: tileloadd (%rbx,%r14), %tmm1258; CHECK-NEXT: tileloadd (%rbx,%r14), %tmm2259; CHECK-NEXT: tdpbssd %tmm2, %tmm1, %tmm0260; CHECK-NEXT: tilestored %tmm0, (%rbx,%r14)261; CHECK-NEXT: tilezero %tmm0262; CHECK-NEXT: incl %r15d263; CHECK-NEXT: cmpw $100, %r15w264; CHECK-NEXT: jl .LBB1_2265; CHECK-NEXT: .LBB1_3: # %exit266; CHECK-NEXT: addq $72, %rsp267; CHECK-NEXT: popq %rbx268; CHECK-NEXT: popq %r14269; CHECK-NEXT: popq %r15270; CHECK-NEXT: popq %rbp271; CHECK-NEXT: tilerelease272; CHECK-NEXT: vzeroupper273; CHECK-NEXT: retq274;275; EGPR-LABEL: test3:276; EGPR: # %bb.0: # %entry277; EGPR-NEXT: pushq %rbp # encoding: [0x55]278; EGPR-NEXT: pushq %r15 # encoding: [0x41,0x57]279; EGPR-NEXT: pushq %r14 # encoding: [0x41,0x56]280; EGPR-NEXT: pushq %rbx # encoding: [0x53]281; EGPR-NEXT: subq $72, %rsp # encoding: [0x48,0x83,0xec,0x48]282; EGPR-NEXT: vxorps %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x57,0xc0]283; EGPR-NEXT: vmovups %zmm0, {{[0-9]+}}(%rsp) # encoding: [0x62,0xf1,0x7c,0x48,0x11,0x84,0x24,0x08,0x00,0x00,0x00]284; EGPR-NEXT: movb $1, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x08,0x01]285; EGPR-NEXT: movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x38,0x08]286; EGPR-NEXT: movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x18,0x08,0x00]287; EGPR-NEXT: movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x39,0x08]288; EGPR-NEXT: movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x1a,0x08,0x00]289; EGPR-NEXT: movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x3a,0x08]290; EGPR-NEXT: movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x1c,0x08,0x00]291; EGPR-NEXT: ldtilecfg {{[0-9]+}}(%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x44,0x24,0x08]292; EGPR-NEXT: movw $8, %bp # encoding: [0x66,0xbd,0x08,0x00]293; EGPR-NEXT: tilezero %tmm0 # encoding: [0xc4,0xe2,0x7b,0x49,0xc0]294; EGPR-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]295; EGPR-NEXT: testb %al, %al # encoding: [0x84,0xc0]296; EGPR-NEXT: jne .LBB1_3 # encoding: [0x75,A]297; EGPR-NEXT: # fixup A - offset: 1, value: .LBB1_3, kind: FK_PCRel_1298; EGPR-NEXT: # %bb.1: # %loop.header.preheader299; EGPR-NEXT: movq %rdi, %rbx # encoding: [0x48,0x89,0xfb]300; EGPR-NEXT: movl $32, %r14d # encoding: [0x41,0xbe,0x20,0x00,0x00,0x00]301; EGPR-NEXT: xorl %r15d, %r15d # encoding: [0x45,0x31,0xff]302; EGPR-NEXT: .p2align 4303; EGPR-NEXT: .LBB1_2: # %loop.header304; EGPR-NEXT: # =>This Inner Loop Header: Depth=1305; EGPR-NEXT: tilestored %tmm0, (%rbx,%r14) # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7a,0x4b,0x04,0x33]306; EGPR-NEXT: xorl %eax, %eax # encoding: [0x31,0xc0]307; EGPR-NEXT: tilezero %tmm0 # encoding: [0xc4,0xe2,0x7b,0x49,0xc0]308; EGPR-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]309; EGPR-NEXT: callq foo # encoding: [0xe8,A,A,A,A]310; EGPR-NEXT: # fixup A - offset: 1, value: foo, kind: reloc_branch_4byte_pcrel311; EGPR-NEXT: ldtilecfg {{[0-9]+}}(%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x44,0x24,0x08]312; EGPR-NEXT: tilezero %tmm0 # encoding: [0xc4,0xe2,0x7b,0x49,0xc0]313; EGPR-NEXT: tileloadd (%rbx,%r14), %tmm1 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x0c,0x33]314; EGPR-NEXT: tileloadd (%rbx,%r14), %tmm2 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x14,0x33]315; EGPR-NEXT: tdpbssd %tmm2, %tmm1, %tmm0 # encoding: [0xc4,0xe2,0x6b,0x5e,0xc1]316; EGPR-NEXT: tilestored %tmm0, (%rbx,%r14) # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7a,0x4b,0x04,0x33]317; EGPR-NEXT: tilezero %tmm0 # encoding: [0xc4,0xe2,0x7b,0x49,0xc0]318; EGPR-NEXT: incl %r15d # encoding: [0x41,0xff,0xc7]319; EGPR-NEXT: cmpw $100, %r15w # encoding: [0x66,0x41,0x83,0xff,0x64]320; EGPR-NEXT: jl .LBB1_2 # encoding: [0x7c,A]321; EGPR-NEXT: # fixup A - offset: 1, value: .LBB1_2, kind: FK_PCRel_1322; EGPR-NEXT: .LBB1_3: # %exit323; EGPR-NEXT: addq $72, %rsp # encoding: [0x48,0x83,0xc4,0x48]324; EGPR-NEXT: popq %rbx # encoding: [0x5b]325; EGPR-NEXT: popq %r14 # encoding: [0x41,0x5e]326; EGPR-NEXT: popq %r15 # encoding: [0x41,0x5f]327; EGPR-NEXT: popq %rbp # encoding: [0x5d]328; EGPR-NEXT: tilerelease # encoding: [0xc4,0xe2,0x78,0x49,0xc0]329; EGPR-NEXT: vzeroupper # encoding: [0xc5,0xf8,0x77]330; EGPR-NEXT: retq # encoding: [0xc3]331entry:332 %t5 = tail call x86_amx @llvm.x86.tilezero.internal(i16 8, i16 8)333 br i1 undef, label %loop.header, label %exit334 335loop.header:336 %ivphi = phi i16 [0, %entry], [%iv, %loop.latch]337 call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr %buf, i64 32, x86_amx %t5)338 call void (...) @foo()339 br label %loop.body340 341loop.body:342 %t1 = tail call x86_amx @llvm.x86.tilezero.internal(i16 8, i16 8)343 %t2 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 32)344 %t3 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 32)345 %t4 = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 8, i16 8, i16 8, x86_amx %t1, x86_amx %t2, x86_amx %t3)346 tail call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr %buf, i64 32, x86_amx %t4)347 br label %loop.latch348 349loop.latch:350 %iv = add i16 %ivphi, 1351 %c = icmp slt i16 %iv, 100352 br i1 %c, label %loop.header, label %exit353 354exit:355 ret void356}357 358declare dso_local void @foo(...) nounwind359 360declare x86_amx @llvm.x86.tilezero.internal(i16, i16)361declare x86_amx @llvm.x86.tileloadd64.internal(i16, i16, ptr, i64)362declare x86_amx @llvm.x86.tdpbssd.internal(i16, i16, i16, x86_amx, x86_amx, x86_amx)363declare void @llvm.x86.tilestored64.internal(i16, i16, ptr, i64, x86_amx)364