brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.3 KiB · a2b13a2 Raw
290 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 5define dso_local void @test1(ptr%buf) nounwind {6; CHECK-LABEL: test1:7; CHECK:       # %bb.0: # %entry8; CHECK-NEXT:    pushq %rbp9; CHECK-NEXT:    pushq %r1510; CHECK-NEXT:    pushq %r1411; CHECK-NEXT:    pushq %rbx12; CHECK-NEXT:    subq $4056, %rsp # imm = 0xFD813; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm014; CHECK-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)15; CHECK-NEXT:    movb $1, {{[0-9]+}}(%rsp)16; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)17; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)18; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)19; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)20; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)21; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)22; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)23; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)24; CHECK-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)25; CHECK-NEXT:    movl $64, %eax26; CHECK-NEXT:    movw $8, %bp27; CHECK-NEXT:    tileloadd (%rdi,%rax), %tmm328; CHECK-NEXT:    xorl %eax, %eax29; CHECK-NEXT:    testb %al, %al30; CHECK-NEXT:    jne .LBB0_331; CHECK-NEXT:  # %bb.1: # %loop.header.preheader32; CHECK-NEXT:    movq %rdi, %rbx33; CHECK-NEXT:    xorl %r14d, %r14d34; CHECK-NEXT:    movl $32, %r15d35; CHECK-NEXT:    .p2align 436; CHECK-NEXT:  .LBB0_2: # %loop.header37; CHECK-NEXT:    # =>This Inner Loop Header: Depth=138; CHECK-NEXT:    movabsq $64, %rax39; CHECK-NEXT:    tilestored %tmm3, 3024(%rsp,%rax) # 1024-byte Folded Spill40; CHECK-NEXT:    vzeroupper41; CHECK-NEXT:    callq foo42; CHECK-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)43; CHECK-NEXT:    movabsq $64, %rax44; CHECK-NEXT:    tileloadd 3024(%rsp,%rax), %tmm3 # 1024-byte Folded Reload45; CHECK-NEXT:    tileloadd (%rbx,%r15), %tmm046; CHECK-NEXT:    tileloadd (%rbx,%r15), %tmm147; CHECK-NEXT:    tilestored %tmm3, 1024(%rsp,%rax) # 1024-byte Folded Spill48; CHECK-NEXT:    tileloadd 1024(%rsp,%rax), %tmm2 # 1024-byte Folded Reload49; CHECK-NEXT:    tdpbssd %tmm1, %tmm0, %tmm250; CHECK-NEXT:    tilestored %tmm2, (%rbx,%r15)51; CHECK-NEXT:    incl %r14d52; CHECK-NEXT:    cmpw $100, %r14w53; CHECK-NEXT:    jl .LBB0_254; CHECK-NEXT:  .LBB0_3: # %exit55; CHECK-NEXT:    addq $4056, %rsp # imm = 0xFD856; CHECK-NEXT:    popq %rbx57; CHECK-NEXT:    popq %r1458; CHECK-NEXT:    popq %r1559; CHECK-NEXT:    popq %rbp60; CHECK-NEXT:    tilerelease61; CHECK-NEXT:    vzeroupper62; CHECK-NEXT:    retq63;64; EGPR-LABEL: test1:65; EGPR:       # %bb.0: # %entry66; EGPR-NEXT:    pushq %rbp # encoding: [0x55]67; EGPR-NEXT:    pushq %r15 # encoding: [0x41,0x57]68; EGPR-NEXT:    pushq %r14 # encoding: [0x41,0x56]69; EGPR-NEXT:    pushq %rbx # encoding: [0x53]70; EGPR-NEXT:    subq $4056, %rsp # encoding: [0x48,0x81,0xec,0xd8,0x0f,0x00,0x00]71; EGPR-NEXT:    # imm = 0xFD872; EGPR-NEXT:    vxorps %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x57,0xc0]73; EGPR-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp) # encoding: [0x62,0xf1,0x7c,0x48,0x11,0x44,0x24,0x0f]74; EGPR-NEXT:    movb $1, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x84,0x24,0xc0,0x03,0x00,0x00,0x01]75; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x84,0x24,0xf0,0x03,0x00,0x00,0x08]76; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x84,0x24,0xd0,0x03,0x00,0x00,0x08,0x00]77; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x84,0x24,0xf1,0x03,0x00,0x00,0x08]78; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x84,0x24,0xd2,0x03,0x00,0x00,0x08,0x00]79; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x84,0x24,0xf2,0x03,0x00,0x00,0x08]80; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x84,0x24,0xd4,0x03,0x00,0x00,0x08,0x00]81; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x84,0x24,0xf3,0x03,0x00,0x00,0x08]82; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x84,0x24,0xd6,0x03,0x00,0x00,0x08,0x00]83; EGPR-NEXT:    ldtilecfg {{[0-9]+}}(%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x84,0x24,0xc0,0x03,0x00,0x00]84; EGPR-NEXT:    movl $64, %eax # encoding: [0xb8,0x40,0x00,0x00,0x00]85; EGPR-NEXT:    movw $8, %bp # encoding: [0x66,0xbd,0x08,0x00]86; EGPR-NEXT:    tileloadd (%rdi,%rax), %tmm3 # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0x1c,0x07]87; EGPR-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]88; EGPR-NEXT:    testb %al, %al # encoding: [0x84,0xc0]89; EGPR-NEXT:    jne .LBB0_3 # encoding: [0x75,A]90; EGPR-NEXT:    # fixup A - offset: 1, value: .LBB0_3, kind: FK_PCRel_191; EGPR-NEXT:  # %bb.1: # %loop.header.preheader92; EGPR-NEXT:    movq %rdi, %rbx # encoding: [0x48,0x89,0xfb]93; EGPR-NEXT:    xorl %r14d, %r14d # encoding: [0x45,0x31,0xf6]94; EGPR-NEXT:    movl $32, %r15d # encoding: [0x41,0xbf,0x20,0x00,0x00,0x00]95; EGPR-NEXT:    .p2align 496; EGPR-NEXT:  .LBB0_2: # %loop.header97; EGPR-NEXT:    # =>This Inner Loop Header: Depth=198; EGPR-NEXT:    movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]99; EGPR-NEXT:    tilestored %tmm3, 3024(%rsp,%rax) # 1024-byte Folded Spill100; EGPR-NEXT:    # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0x9c,0x04,0xd0,0x0b,0x00,0x00]101; EGPR-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]102; EGPR-NEXT:    callq foo # encoding: [0xe8,A,A,A,A]103; EGPR-NEXT:    # fixup A - offset: 1, value: foo, kind: reloc_branch_4byte_pcrel104; EGPR-NEXT:    ldtilecfg {{[0-9]+}}(%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x84,0x24,0xc0,0x03,0x00,0x00]105; EGPR-NEXT:    movabsq $64, %rax # encoding: [0x48,0xb8,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00]106; EGPR-NEXT:    tileloadd 3024(%rsp,%rax), %tmm3 # 1024-byte Folded Reload107; EGPR-NEXT:    # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0x9c,0x04,0xd0,0x0b,0x00,0x00]108; EGPR-NEXT:    tileloadd (%rbx,%r15), %tmm0 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x04,0x3b]109; EGPR-NEXT:    tileloadd (%rbx,%r15), %tmm1 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x0c,0x3b]110; EGPR-NEXT:    tilestored %tmm3, 1024(%rsp,%rax) # 1024-byte Folded Spill111; EGPR-NEXT:    # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7a,0x4b,0x9c,0x04,0x00,0x04,0x00,0x00]112; EGPR-NEXT:    tileloadd 1024(%rsp,%rax), %tmm2 # 1024-byte Folded Reload113; EGPR-NEXT:    # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x7b,0x4b,0x94,0x04,0x00,0x04,0x00,0x00]114; EGPR-NEXT:    tdpbssd %tmm1, %tmm0, %tmm2 # encoding: [0xc4,0xe2,0x73,0x5e,0xd0]115; EGPR-NEXT:    tilestored %tmm2, (%rbx,%r15) # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7a,0x4b,0x14,0x3b]116; EGPR-NEXT:    incl %r14d # encoding: [0x41,0xff,0xc6]117; EGPR-NEXT:    cmpw $100, %r14w # encoding: [0x66,0x41,0x83,0xfe,0x64]118; EGPR-NEXT:    jl .LBB0_2 # encoding: [0x7c,A]119; EGPR-NEXT:    # fixup A - offset: 1, value: .LBB0_2, kind: FK_PCRel_1120; EGPR-NEXT:  .LBB0_3: # %exit121; EGPR-NEXT:    addq $4056, %rsp # encoding: [0x48,0x81,0xc4,0xd8,0x0f,0x00,0x00]122; EGPR-NEXT:    # imm = 0xFD8123; EGPR-NEXT:    popq %rbx # encoding: [0x5b]124; EGPR-NEXT:    popq %r14 # encoding: [0x41,0x5e]125; EGPR-NEXT:    popq %r15 # encoding: [0x41,0x5f]126; EGPR-NEXT:    popq %rbp # encoding: [0x5d]127; EGPR-NEXT:    tilerelease # encoding: [0xc4,0xe2,0x78,0x49,0xc0]128; EGPR-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]129; EGPR-NEXT:    retq # encoding: [0xc3]130entry:131  %t1 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 64)132  br i1 undef, label %loop.header, label %exit133 134loop.header:135  %ivphi = phi i16 [0, %entry], [%iv, %loop.latch]136  call void @foo()137  br label %loop.body138 139loop.body:140  %t2 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 32)141  %t3 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 32)142  %t4 = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 8, i16 8, i16 8, x86_amx %t1, x86_amx %t2, x86_amx %t3)143  tail call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr %buf, i64 32, x86_amx %t4)144  br label %loop.latch145 146loop.latch:147  %iv = add i16 %ivphi, 1148  %c = icmp slt i16 %iv, 100149  br i1 %c, label %loop.header, label %exit150 151exit:152  ret void153}154 155define dso_local void @test2(ptr%buf) nounwind {156; CHECK-LABEL: test2:157; CHECK:       # %bb.0: # %entry158; CHECK-NEXT:    pushq %rbp159; CHECK-NEXT:    pushq %r15160; CHECK-NEXT:    pushq %r14161; CHECK-NEXT:    pushq %rbx162; CHECK-NEXT:    subq $72, %rsp163; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0164; CHECK-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)165; CHECK-NEXT:    movb $1, {{[0-9]+}}(%rsp)166; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)167; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)168; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)169; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)170; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)171; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)172; CHECK-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)173; CHECK-NEXT:    movw $8, %bp174; CHECK-NEXT:    tilezero %tmm0175; CHECK-NEXT:    xorl %eax, %eax176; CHECK-NEXT:    testb %al, %al177; CHECK-NEXT:    jne .LBB1_3178; CHECK-NEXT:  # %bb.1: # %loop.header.preheader179; CHECK-NEXT:    movq %rdi, %rbx180; CHECK-NEXT:    xorl %r14d, %r14d181; CHECK-NEXT:    movl $32, %r15d182; CHECK-NEXT:    .p2align 4183; CHECK-NEXT:  .LBB1_2: # %loop.header184; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1185; CHECK-NEXT:    tilezero %tmm0186; CHECK-NEXT:    vzeroupper187; CHECK-NEXT:    callq foo188; CHECK-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)189; CHECK-NEXT:    tilezero %tmm2190; CHECK-NEXT:    tileloadd (%rbx,%r15), %tmm0191; CHECK-NEXT:    tileloadd (%rbx,%r15), %tmm1192; CHECK-NEXT:    tdpbssd %tmm1, %tmm0, %tmm2193; CHECK-NEXT:    tilestored %tmm2, (%rbx,%r15)194; CHECK-NEXT:    incl %r14d195; CHECK-NEXT:    cmpw $100, %r14w196; CHECK-NEXT:    jl .LBB1_2197; CHECK-NEXT:  .LBB1_3: # %exit198; CHECK-NEXT:    addq $72, %rsp199; CHECK-NEXT:    popq %rbx200; CHECK-NEXT:    popq %r14201; CHECK-NEXT:    popq %r15202; CHECK-NEXT:    popq %rbp203; CHECK-NEXT:    tilerelease204; CHECK-NEXT:    vzeroupper205; CHECK-NEXT:    retq206;207; EGPR-LABEL: test2:208; EGPR:       # %bb.0: # %entry209; EGPR-NEXT:    pushq %rbp # encoding: [0x55]210; EGPR-NEXT:    pushq %r15 # encoding: [0x41,0x57]211; EGPR-NEXT:    pushq %r14 # encoding: [0x41,0x56]212; EGPR-NEXT:    pushq %rbx # encoding: [0x53]213; EGPR-NEXT:    subq $72, %rsp # encoding: [0x48,0x83,0xec,0x48]214; EGPR-NEXT:    vxorps %xmm0, %xmm0, %xmm0 # encoding: [0xc5,0xf8,0x57,0xc0]215; EGPR-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp) # encoding: [0x62,0xf1,0x7c,0x48,0x11,0x84,0x24,0x08,0x00,0x00,0x00]216; EGPR-NEXT:    movb $1, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x08,0x01]217; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x38,0x08]218; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x18,0x08,0x00]219; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x39,0x08]220; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x1a,0x08,0x00]221; EGPR-NEXT:    movb $8, {{[0-9]+}}(%rsp) # encoding: [0xc6,0x44,0x24,0x3a,0x08]222; EGPR-NEXT:    movw $8, {{[0-9]+}}(%rsp) # encoding: [0x66,0xc7,0x44,0x24,0x1c,0x08,0x00]223; EGPR-NEXT:    ldtilecfg {{[0-9]+}}(%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x44,0x24,0x08]224; EGPR-NEXT:    movw $8, %bp # encoding: [0x66,0xbd,0x08,0x00]225; EGPR-NEXT:    tilezero %tmm0 # encoding: [0xc4,0xe2,0x7b,0x49,0xc0]226; EGPR-NEXT:    xorl %eax, %eax # encoding: [0x31,0xc0]227; EGPR-NEXT:    testb %al, %al # encoding: [0x84,0xc0]228; EGPR-NEXT:    jne .LBB1_3 # encoding: [0x75,A]229; EGPR-NEXT:    # fixup A - offset: 1, value: .LBB1_3, kind: FK_PCRel_1230; EGPR-NEXT:  # %bb.1: # %loop.header.preheader231; EGPR-NEXT:    movq %rdi, %rbx # encoding: [0x48,0x89,0xfb]232; EGPR-NEXT:    xorl %r14d, %r14d # encoding: [0x45,0x31,0xf6]233; EGPR-NEXT:    movl $32, %r15d # encoding: [0x41,0xbf,0x20,0x00,0x00,0x00]234; EGPR-NEXT:    .p2align 4235; EGPR-NEXT:  .LBB1_2: # %loop.header236; EGPR-NEXT:    # =>This Inner Loop Header: Depth=1237; EGPR-NEXT:    tilezero %tmm0 # encoding: [0xc4,0xe2,0x7b,0x49,0xc0]238; EGPR-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]239; EGPR-NEXT:    callq foo # encoding: [0xe8,A,A,A,A]240; EGPR-NEXT:    # fixup A - offset: 1, value: foo, kind: reloc_branch_4byte_pcrel241; EGPR-NEXT:    ldtilecfg {{[0-9]+}}(%rsp) # EVEX TO VEX Compression encoding: [0xc4,0xe2,0x78,0x49,0x44,0x24,0x08]242; EGPR-NEXT:    tilezero %tmm2 # encoding: [0xc4,0xe2,0x7b,0x49,0xd0]243; EGPR-NEXT:    tileloadd (%rbx,%r15), %tmm0 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x04,0x3b]244; EGPR-NEXT:    tileloadd (%rbx,%r15), %tmm1 # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7b,0x4b,0x0c,0x3b]245; EGPR-NEXT:    tdpbssd %tmm1, %tmm0, %tmm2 # encoding: [0xc4,0xe2,0x73,0x5e,0xd0]246; EGPR-NEXT:    tilestored %tmm2, (%rbx,%r15) # EVEX TO VEX Compression encoding: [0xc4,0xa2,0x7a,0x4b,0x14,0x3b]247; EGPR-NEXT:    incl %r14d # encoding: [0x41,0xff,0xc6]248; EGPR-NEXT:    cmpw $100, %r14w # encoding: [0x66,0x41,0x83,0xfe,0x64]249; EGPR-NEXT:    jl .LBB1_2 # encoding: [0x7c,A]250; EGPR-NEXT:    # fixup A - offset: 1, value: .LBB1_2, kind: FK_PCRel_1251; EGPR-NEXT:  .LBB1_3: # %exit252; EGPR-NEXT:    addq $72, %rsp # encoding: [0x48,0x83,0xc4,0x48]253; EGPR-NEXT:    popq %rbx # encoding: [0x5b]254; EGPR-NEXT:    popq %r14 # encoding: [0x41,0x5e]255; EGPR-NEXT:    popq %r15 # encoding: [0x41,0x5f]256; EGPR-NEXT:    popq %rbp # encoding: [0x5d]257; EGPR-NEXT:    tilerelease # encoding: [0xc4,0xe2,0x78,0x49,0xc0]258; EGPR-NEXT:    vzeroupper # encoding: [0xc5,0xf8,0x77]259; EGPR-NEXT:    retq # encoding: [0xc3]260entry:261  %t1 = tail call x86_amx @llvm.x86.tilezero.internal(i16 8, i16 8)262  br i1 undef, label %loop.header, label %exit263 264loop.header:265  %ivphi = phi i16 [0, %entry], [%iv, %loop.latch]266  call void @foo()267  br label %loop.body268 269loop.body:270  %t2 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 32)271  %t3 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr %buf, i64 32)272  %t4 = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 8, i16 8, i16 8, x86_amx %t1, x86_amx %t2, x86_amx %t3)273  tail call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr %buf, i64 32, x86_amx %t4)274  br label %loop.latch275 276loop.latch:277  %iv = add i16 %ivphi, 1278  %c = icmp slt i16 %iv, 100279  br i1 %c, label %loop.header, label %exit280 281exit:282  ret void283}284 285declare dso_local void @foo()286declare x86_amx @llvm.x86.tilezero.internal(i16, i16)287declare x86_amx @llvm.x86.tileloadd64.internal(i16, i16, ptr, i64)288declare x86_amx @llvm.x86.tdpbssd.internal(i16, i16, i16, x86_amx, x86_amx, x86_amx)289declare void @llvm.x86.tilestored64.internal(i16, i16, ptr, i64, x86_amx)290