brintos

brintos / llvm-project-archived public Read only

0
0
Text · 22.2 KiB · 2bda8db Raw
631 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 -verify-machineinstrs -enable-ipra | FileCheck -check-prefix=IPRA %s4; RUN: llc < %s -O0 -mtriple=x86_64-unknown-unknown -mattr=+amx-int8 -mattr=+avx512f -verify-machineinstrs | FileCheck -check-prefix=O0 %s5 6@buf = dso_local global [3072 x i8] zeroinitializer, align 647 8define internal void @foo() {9; CHECK-LABEL: foo:10; CHECK:       # %bb.0: # %entry11; CHECK-NEXT:    retq12;13; IPRA-LABEL: foo:14; IPRA:       # %bb.0: # %entry15; IPRA-NEXT:    retq16;17; O0-LABEL: foo:18; O0:       # %bb.0: # %entry19; O0-NEXT:    retq20entry:21  ret void22}23 24define dso_local void @test_api(i16 signext %0, i16 signext %1) nounwind {25; CHECK-LABEL: test_api:26; CHECK:       # %bb.0:27; CHECK-NEXT:    pushq %rbp28; CHECK-NEXT:    pushq %r1529; CHECK-NEXT:    pushq %r1430; CHECK-NEXT:    pushq %rbx31; CHECK-NEXT:    subq $2120, %rsp # imm = 0x84832; CHECK-NEXT:    movl %esi, %ebx33; CHECK-NEXT:    movl %edi, %ebp34; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm035; CHECK-NEXT:    vmovups %zmm0, (%rsp)36; CHECK-NEXT:    movb $1, (%rsp)37; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)38; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)39; CHECK-NEXT:    movw %bx, {{[0-9]+}}(%rsp)40; CHECK-NEXT:    movb %bpl, {{[0-9]+}}(%rsp)41; CHECK-NEXT:    movw %bx, {{[0-9]+}}(%rsp)42; CHECK-NEXT:    movb %bpl, {{[0-9]+}}(%rsp)43; CHECK-NEXT:    ldtilecfg (%rsp)44; CHECK-NEXT:    movl $buf, %eax45; CHECK-NEXT:    movl $32, %r14d46; CHECK-NEXT:    movw $8, %r15w47; CHECK-NEXT:    tileloadd (%rax,%r14), %tmm148; CHECK-NEXT:    movabsq $64, %rax49; CHECK-NEXT:    tilestored %tmm1, 1088(%rsp,%rax) # 1024-byte Folded Spill50; CHECK-NEXT:    movl $buf+1024, %eax51; CHECK-NEXT:    tileloadd (%rax,%r14), %tmm252; CHECK-NEXT:    movabsq $64, %rax53; CHECK-NEXT:    tilestored %tmm2, 64(%rsp,%rax) # 1024-byte Folded Spill54; CHECK-NEXT:    vzeroupper55; CHECK-NEXT:    callq foo56; CHECK-NEXT:    ldtilecfg (%rsp)57; CHECK-NEXT:    movl $buf+2048, %eax58; CHECK-NEXT:    tileloadd (%rax,%r14), %tmm059; CHECK-NEXT:    movabsq $64, %rcx60; CHECK-NEXT:    tileloadd 1088(%rsp,%rcx), %tmm1 # 1024-byte Folded Reload61; CHECK-NEXT:    tileloadd 64(%rsp,%rcx), %tmm2 # 1024-byte Folded Reload62; CHECK-NEXT:    tdpbssd %tmm2, %tmm1, %tmm063; CHECK-NEXT:    tilestored %tmm0, (%rax,%r14)64; CHECK-NEXT:    addq $2120, %rsp # imm = 0x84865; CHECK-NEXT:    popq %rbx66; CHECK-NEXT:    popq %r1467; CHECK-NEXT:    popq %r1568; CHECK-NEXT:    popq %rbp69; CHECK-NEXT:    tilerelease70; CHECK-NEXT:    retq71;72; IPRA-LABEL: test_api:73; IPRA:       # %bb.0:74; IPRA-NEXT:    subq $72, %rsp75; IPRA-NEXT:    vxorps %xmm0, %xmm0, %xmm076; IPRA-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)77; IPRA-NEXT:    movb $1, {{[0-9]+}}(%rsp)78; IPRA-NEXT:    movw $8, {{[0-9]+}}(%rsp)79; IPRA-NEXT:    movb $8, {{[0-9]+}}(%rsp)80; IPRA-NEXT:    movw %si, {{[0-9]+}}(%rsp)81; IPRA-NEXT:    movb %dil, {{[0-9]+}}(%rsp)82; IPRA-NEXT:    movw %si, {{[0-9]+}}(%rsp)83; IPRA-NEXT:    movb %dil, {{[0-9]+}}(%rsp)84; IPRA-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)85; IPRA-NEXT:    movl $buf, %eax86; IPRA-NEXT:    movl $32, %ecx87; IPRA-NEXT:    movw $8, %dx88; IPRA-NEXT:    tileloadd (%rax,%rcx), %tmm089; IPRA-NEXT:    movl $buf+1024, %eax90; IPRA-NEXT:    tileloadd (%rax,%rcx), %tmm191; IPRA-NEXT:    callq foo92; IPRA-NEXT:    movl $buf+2048, %eax93; IPRA-NEXT:    tileloadd (%rax,%rcx), %tmm294; IPRA-NEXT:    tdpbssd %tmm1, %tmm0, %tmm295; IPRA-NEXT:    tilestored %tmm2, (%rax,%rcx)96; IPRA-NEXT:    addq $72, %rsp97; IPRA-NEXT:    tilerelease98; IPRA-NEXT:    vzeroupper99; IPRA-NEXT:    retq100;101; O0-LABEL: test_api:102; O0:       # %bb.0:103; O0-NEXT:    pushq %rbp104; O0-NEXT:    movq %rsp, %rbp105; O0-NEXT:    andq $-1024, %rsp # imm = 0xFC00106; O0-NEXT:    subq $8192, %rsp # imm = 0x2000107; O0-NEXT:    vxorps %xmm0, %xmm0, %xmm0108; O0-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)109; O0-NEXT:    movb $1, {{[0-9]+}}(%rsp)110; O0-NEXT:    movw %si, %cx111; O0-NEXT:    movw %cx, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill112; O0-NEXT:    movw %di, %ax113; O0-NEXT:    movw %ax, {{[-0-9]+}}(%r{{[sb]}}p) # 2-byte Spill114; O0-NEXT:    movl $buf, %esi115; O0-NEXT:    movl $32, %edi116; O0-NEXT:    movw $8, %dx117; O0-NEXT:    # implicit-def: $al118; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)119; O0-NEXT:    movw %dx, {{[0-9]+}}(%rsp)120; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)121; O0-NEXT:    tileloadd (%rsi,%rdi), %tmm0122; O0-NEXT:    movl $64, %edi123; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rsi124; O0-NEXT:    movw $8, %dx125; O0-NEXT:    tilestored %tmm0, (%rsi,%rdi)126; O0-NEXT:    movl $32, %esi127; O0-NEXT:    movl $buf+1024, %edx128; O0-NEXT:    movw $8, %ax129; O0-NEXT:    # implicit-def: $al130; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)131; O0-NEXT:    movw %cx, {{[0-9]+}}(%rsp)132; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)133; O0-NEXT:    tileloadd (%rdx,%rsi), %tmm0134; O0-NEXT:    movl $64, %esi135; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx136; O0-NEXT:    movw $8, %ax137; O0-NEXT:    tilestored %tmm0, (%rdx,%rsi)138; O0-NEXT:    vzeroupper139; O0-NEXT:    callq foo140; O0-NEXT:    movw {{[-0-9]+}}(%r{{[sb]}}p), %cx # 2-byte Reload141; O0-NEXT:    movw {{[-0-9]+}}(%r{{[sb]}}p), %ax # 2-byte Reload142; O0-NEXT:    movl $32, %esi143; O0-NEXT:    movl $buf+2048, %edx144; O0-NEXT:    # implicit-def: $al145; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)146; O0-NEXT:    movw %cx, {{[0-9]+}}(%rsp)147; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)148; O0-NEXT:    tileloadd (%rdx,%rsi), %tmm0149; O0-NEXT:    movl $64, %esi150; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx151; O0-NEXT:    tilestored %tmm0, (%rdx,%rsi)152; O0-NEXT:    movl $64, %edi153; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx154; O0-NEXT:    movw $8, %si155; O0-NEXT:    # implicit-def: $al156; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)157; O0-NEXT:    movw %si, {{[0-9]+}}(%rsp)158; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)159; O0-NEXT:    tileloadd (%rdx,%rdi), %tmm0160; O0-NEXT:    movabsq $64, %rdx161; O0-NEXT:    tilestored %tmm0, 1024(%rsp,%rdx) # 1024-byte Folded Spill162; O0-NEXT:    movl $64, %r8d163; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdi164; O0-NEXT:    movw $8, %dx165; O0-NEXT:    # implicit-def: $al166; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)167; O0-NEXT:    movw %cx, {{[0-9]+}}(%rsp)168; O0-NEXT:    # implicit-def: $al169; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)170; O0-NEXT:    movw %cx, {{[0-9]+}}(%rsp)171; O0-NEXT:    # implicit-def: $al172; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)173; O0-NEXT:    movw %si, {{[0-9]+}}(%rsp)174; O0-NEXT:    # implicit-def: $al175; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)176; O0-NEXT:    movw %cx, {{[0-9]+}}(%rsp)177; O0-NEXT:    # implicit-def: $dl178; O0-NEXT:    movb %dl, {{[0-9]+}}(%rsp)179; O0-NEXT:    movw %cx, {{[0-9]+}}(%rsp)180; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)181; O0-NEXT:    tileloadd (%rdi,%r8), %tmm2182; O0-NEXT:    movl $64, %edi183; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx184; O0-NEXT:    tileloadd (%rdx,%rdi), %tmm0185; O0-NEXT:    movw $8, %dx186; O0-NEXT:    movabsq $64, %rdi187; O0-NEXT:    tileloadd 1024(%rsp,%rdi), %tmm1 # 1024-byte Folded Reload188; O0-NEXT:    tdpbssd %tmm2, %tmm1, %tmm0189; O0-NEXT:    movl $64, %esi190; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx191; O0-NEXT:    tilestored %tmm0, (%rdx,%rsi)192; O0-NEXT:    movl $64, %esi193; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rdx194; O0-NEXT:    tileloadd (%rdx,%rsi), %tmm0195; O0-NEXT:    movl $32, %esi196; O0-NEXT:    movl $buf+2048, %edx197; O0-NEXT:    tilestored %tmm0, (%rdx,%rsi)198; O0-NEXT:    movq %rbp, %rsp199; O0-NEXT:    popq %rbp200; O0-NEXT:    tilerelease201; O0-NEXT:    retq202  %3 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 %0, i16 8, ptr @buf, i64 32)203  %4 = 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)204  call void @foo()205  %5 = 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)206  %6 = tail call x86_amx @llvm.x86.tdpbssd.internal(i16 %0, i16 %1, i16 8, x86_amx %5, x86_amx %3, x86_amx %4)207  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 %6)208  ret void209}210 211define dso_local i32 @test_loop(i32 %0) nounwind {212; CHECK-LABEL: test_loop:213; CHECK:       # %bb.0:214; CHECK-NEXT:    pushq %rbp215; CHECK-NEXT:    pushq %r15216; CHECK-NEXT:    pushq %r14217; CHECK-NEXT:    pushq %r13218; CHECK-NEXT:    pushq %r12219; CHECK-NEXT:    pushq %rbx220; CHECK-NEXT:    subq $1096, %rsp # imm = 0x448221; CHECK-NEXT:    movl %edi, %ebx222; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0223; CHECK-NEXT:    vmovups %zmm0, (%rsp)224; CHECK-NEXT:    movb $1, (%rsp)225; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)226; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)227; CHECK-NEXT:    vzeroupper228; CHECK-NEXT:    callq foo229; CHECK-NEXT:    ldtilecfg (%rsp)230; CHECK-NEXT:    testl %ebx, %ebx231; CHECK-NEXT:    jg .LBB2_4232; CHECK-NEXT:  # %bb.1: # %.preheader233; CHECK-NEXT:    movl $7, %ebp234; CHECK-NEXT:    movl $buf, %r14d235; CHECK-NEXT:    movl $32, %r15d236; CHECK-NEXT:    movw $8, %r12w237; CHECK-NEXT:    movl $buf+2048, %r13d238; CHECK-NEXT:    .p2align 4239; CHECK-NEXT:  .LBB2_2: # =>This Inner Loop Header: Depth=1240; CHECK-NEXT:    tileloadd (%r14,%r15), %tmm0241; CHECK-NEXT:    movabsq $64, %rax242; CHECK-NEXT:    tilestored %tmm0, 64(%rsp,%rax) # 1024-byte Folded Spill243; CHECK-NEXT:    callq foo244; CHECK-NEXT:    ldtilecfg (%rsp)245; CHECK-NEXT:    movabsq $64, %rax246; CHECK-NEXT:    tileloadd 64(%rsp,%rax), %tmm0 # 1024-byte Folded Reload247; CHECK-NEXT:    tilestored %tmm0, (%r13,%r15)248; CHECK-NEXT:    callq foo249; CHECK-NEXT:    ldtilecfg (%rsp)250; CHECK-NEXT:    decl %ebp251; CHECK-NEXT:    cmpl $7, %ebp252; CHECK-NEXT:    jne .LBB2_2253; CHECK-NEXT:  # %bb.3:254; CHECK-NEXT:    cmpl $3, %ebx255; CHECK-NEXT:    jne .LBB2_4256; CHECK-NEXT:  # %bb.6:257; CHECK-NEXT:    testl %ebp, %ebp258; CHECK-NEXT:    jne .LBB2_5259; CHECK-NEXT:  # %bb.7:260; CHECK-NEXT:    incl %ebx261; CHECK-NEXT:    jmp .LBB2_8262; CHECK-NEXT:  .LBB2_4:263; CHECK-NEXT:    callq foo264; CHECK-NEXT:    ldtilecfg (%rsp)265; CHECK-NEXT:    movl $32, %eax266; CHECK-NEXT:    movl $buf+1024, %ecx267; CHECK-NEXT:    movw $8, %dx268; CHECK-NEXT:    tileloadd (%rcx,%rax), %tmm0269; CHECK-NEXT:    tilestored %tmm0, (%rcx,%rax)270; CHECK-NEXT:  .LBB2_5:271; CHECK-NEXT:    decl %ebx272; CHECK-NEXT:  .LBB2_8:273; CHECK-NEXT:    movl %ebx, %eax274; CHECK-NEXT:    addq $1096, %rsp # imm = 0x448275; CHECK-NEXT:    popq %rbx276; CHECK-NEXT:    popq %r12277; CHECK-NEXT:    popq %r13278; CHECK-NEXT:    popq %r14279; CHECK-NEXT:    popq %r15280; CHECK-NEXT:    popq %rbp281; CHECK-NEXT:    tilerelease282; CHECK-NEXT:    retq283;284; IPRA-LABEL: test_loop:285; IPRA:       # %bb.0:286; IPRA-NEXT:    subq $72, %rsp287; IPRA-NEXT:    movl %edi, %eax288; IPRA-NEXT:    vxorps %xmm0, %xmm0, %xmm0289; IPRA-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)290; IPRA-NEXT:    movb $1, {{[0-9]+}}(%rsp)291; IPRA-NEXT:    movb $8, {{[0-9]+}}(%rsp)292; IPRA-NEXT:    movw $8, {{[0-9]+}}(%rsp)293; IPRA-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)294; IPRA-NEXT:    callq foo295; IPRA-NEXT:    testl %edi, %edi296; IPRA-NEXT:    jg .LBB2_4297; IPRA-NEXT:  # %bb.1: # %.preheader298; IPRA-NEXT:    movl $7, %ecx299; IPRA-NEXT:    movl $buf, %edx300; IPRA-NEXT:    movl $32, %esi301; IPRA-NEXT:    movw $8, %di302; IPRA-NEXT:    movl $buf+2048, %r8d303; IPRA-NEXT:    .p2align 4304; IPRA-NEXT:  .LBB2_2: # =>This Inner Loop Header: Depth=1305; IPRA-NEXT:    tileloadd (%rdx,%rsi), %tmm0306; IPRA-NEXT:    callq foo307; IPRA-NEXT:    tilestored %tmm0, (%r8,%rsi)308; IPRA-NEXT:    callq foo309; IPRA-NEXT:    decl %ecx310; IPRA-NEXT:    cmpl $7, %ecx311; IPRA-NEXT:    jne .LBB2_2312; IPRA-NEXT:  # %bb.3:313; IPRA-NEXT:    cmpl $3, %eax314; IPRA-NEXT:    jne .LBB2_4315; IPRA-NEXT:  # %bb.6:316; IPRA-NEXT:    testl %ecx, %ecx317; IPRA-NEXT:    jne .LBB2_5318; IPRA-NEXT:  # %bb.7:319; IPRA-NEXT:    incl %eax320; IPRA-NEXT:    jmp .LBB2_8321; IPRA-NEXT:  .LBB2_4:322; IPRA-NEXT:    callq foo323; IPRA-NEXT:    movl $32, %ecx324; IPRA-NEXT:    movl $buf+1024, %edx325; IPRA-NEXT:    movw $8, %si326; IPRA-NEXT:    tileloadd (%rdx,%rcx), %tmm0327; IPRA-NEXT:    tilestored %tmm0, (%rdx,%rcx)328; IPRA-NEXT:  .LBB2_5:329; IPRA-NEXT:    decl %eax330; IPRA-NEXT:  .LBB2_8:331; IPRA-NEXT:    addq $72, %rsp332; IPRA-NEXT:    tilerelease333; IPRA-NEXT:    vzeroupper334; IPRA-NEXT:    retq335;336; O0-LABEL: test_loop:337; O0:       # %bb.0:338; O0-NEXT:    pushq %rbp339; O0-NEXT:    movq %rsp, %rbp340; O0-NEXT:    andq $-1024, %rsp # imm = 0xFC00341; O0-NEXT:    subq $4096, %rsp # imm = 0x1000342; O0-NEXT:    vxorps %xmm0, %xmm0, %xmm0343; O0-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)344; O0-NEXT:    movb $1, {{[0-9]+}}(%rsp)345; O0-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill346; O0-NEXT:    vzeroupper347; O0-NEXT:    callq foo348; O0-NEXT:  # %bb.1:349; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %ecx # 4-byte Reload350; O0-NEXT:    xorl %eax, %eax351; O0-NEXT:    cmpl $0, %ecx352; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill353; O0-NEXT:    jg .LBB2_4354; O0-NEXT:    jmp .LBB2_3355; O0-NEXT:  .LBB2_2:356; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload357; O0-NEXT:    cmpl $3, %eax358; O0-NEXT:    je .LBB2_5359; O0-NEXT:    jmp .LBB2_4360; O0-NEXT:  .LBB2_3: # =>This Inner Loop Header: Depth=1361; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload362; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill363; O0-NEXT:    movl $buf, %ecx364; O0-NEXT:    movl $32, %edx365; O0-NEXT:    movw $8, %ax366; O0-NEXT:    # implicit-def: $al367; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)368; O0-NEXT:    movw %ax, {{[0-9]+}}(%rsp)369; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)370; O0-NEXT:    tileloadd (%rcx,%rdx), %tmm0371; O0-NEXT:    movl $64, %edx372; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx373; O0-NEXT:    movw $8, %ax374; O0-NEXT:    tilestored %tmm0, (%rcx,%rdx)375; O0-NEXT:    callq foo376; O0-NEXT:    movl $64, %edx377; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx378; O0-NEXT:    movw $8, %ax379; O0-NEXT:    # implicit-def: $al380; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)381; O0-NEXT:    movw %ax, {{[0-9]+}}(%rsp)382; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)383; O0-NEXT:    tileloadd (%rcx,%rdx), %tmm0384; O0-NEXT:    movl $32, %edx385; O0-NEXT:    movl $buf+2048, %ecx386; O0-NEXT:    movw $8, %ax387; O0-NEXT:    tilestored %tmm0, (%rcx,%rdx)388; O0-NEXT:    callq foo389; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload390; O0-NEXT:    addl $1, %eax391; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill392; O0-NEXT:    cmpl $0, %eax393; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill394; O0-NEXT:    je .LBB2_2395; O0-NEXT:    jmp .LBB2_3396; O0-NEXT:  .LBB2_4:397; O0-NEXT:    callq foo398; O0-NEXT:    movl $32, %edx399; O0-NEXT:    movl $buf+1024, %ecx400; O0-NEXT:    movw $8, %ax401; O0-NEXT:    # implicit-def: $al402; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)403; O0-NEXT:    movw %ax, {{[0-9]+}}(%rsp)404; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)405; O0-NEXT:    tileloadd (%rcx,%rdx), %tmm0406; O0-NEXT:    movl $64, %edx407; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx408; O0-NEXT:    movw $8, %ax409; O0-NEXT:    tilestored %tmm0, (%rcx,%rdx)410; O0-NEXT:    movl $64, %edx411; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx412; O0-NEXT:    movw $8, %ax413; O0-NEXT:    # implicit-def: $al414; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)415; O0-NEXT:    movw %ax, {{[0-9]+}}(%rsp)416; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)417; O0-NEXT:    tileloadd (%rcx,%rdx), %tmm0418; O0-NEXT:    movl $32, %edx419; O0-NEXT:    movl $buf+1024, %ecx420; O0-NEXT:    movw $8, %ax421; O0-NEXT:    tilestored %tmm0, (%rcx,%rdx)422; O0-NEXT:    jmp .LBB2_7423; O0-NEXT:  .LBB2_5:424; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload425; O0-NEXT:    cmpl $7, %eax426; O0-NEXT:    jne .LBB2_7427; O0-NEXT:  # %bb.6:428; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload429; O0-NEXT:    addl $1, %eax430; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill431; O0-NEXT:    jmp .LBB2_8432; O0-NEXT:  .LBB2_7:433; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload434; O0-NEXT:    subl $1, %eax435; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill436; O0-NEXT:  .LBB2_8:437; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload438; O0-NEXT:    movq %rbp, %rsp439; O0-NEXT:    popq %rbp440; O0-NEXT:    tilerelease441; O0-NEXT:    retq442  call void @foo()443  br label %24442:445  %3 = icmp sgt i32 %0, 0446  br i1 %3, label %11, label %64474:448  %5 = icmp eq i32 %0, 3449  br i1 %5, label %13, label %114506:451  %7 = phi i32 [ %9, %6 ], [ 0, %2 ]452  %8 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr @buf, i64 32)453  call void @foo()454  tail call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 2048), i64 32, x86_amx %8)455  call void @foo()456  %9 = add i32 %7, 1457  %10 = icmp eq i32 %9, 0458  br i1 %10, label %4, label %645911:460  call void @foo()461  %12 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 1024), i64 32)462  tail call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 1024), i64 32, x86_amx %12)463  br label %1746413:465  %14 = icmp eq i32 %9, 7466  br i1 %14, label %15, label %1746715:468  %16 = add i32 %0, 1469  br label %1947017:471  %18 = sub i32 %0, 1472  br label %1947319:474  %20 = phi i32 [ %16, %15 ], [ %18, %17 ]475  ret i32 %20476}477 478define dso_local void @test_loop2(i32 %0) nounwind {479; CHECK-LABEL: test_loop2:480; CHECK:       # %bb.0:481; CHECK-NEXT:    pushq %rbp482; CHECK-NEXT:    pushq %r15483; CHECK-NEXT:    pushq %r14484; CHECK-NEXT:    pushq %r12485; CHECK-NEXT:    pushq %rbx486; CHECK-NEXT:    subq $1088, %rsp # imm = 0x440487; CHECK-NEXT:    movl %edi, %ebx488; CHECK-NEXT:    vxorps %xmm0, %xmm0, %xmm0489; CHECK-NEXT:    vmovups %zmm0, (%rsp)490; CHECK-NEXT:    movb $1, (%rsp)491; CHECK-NEXT:    movb $8, {{[0-9]+}}(%rsp)492; CHECK-NEXT:    movw $8, {{[0-9]+}}(%rsp)493; CHECK-NEXT:    movl $buf, %r14d494; CHECK-NEXT:    movl $32, %r15d495; CHECK-NEXT:    movw $8, %bp496; CHECK-NEXT:    movl $buf+2048, %r12d497; CHECK-NEXT:    .p2align 4498; CHECK-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1499; CHECK-NEXT:    vzeroupper500; CHECK-NEXT:    callq foo501; CHECK-NEXT:    ldtilecfg (%rsp)502; CHECK-NEXT:    testl %ebx, %ebx503; CHECK-NEXT:    jle .LBB3_3504; CHECK-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1505; CHECK-NEXT:    tileloadd (%r14,%r15), %tmm0506; CHECK-NEXT:    movabsq $64, %rax507; CHECK-NEXT:    tilestored %tmm0, 64(%rsp,%rax) # 1024-byte Folded Spill508; CHECK-NEXT:    callq foo509; CHECK-NEXT:    ldtilecfg (%rsp)510; CHECK-NEXT:    movabsq $64, %rax511; CHECK-NEXT:    tileloadd 64(%rsp,%rax), %tmm0 # 1024-byte Folded Reload512; CHECK-NEXT:    tilestored %tmm0, (%r12,%r15)513; CHECK-NEXT:    callq foo514; CHECK-NEXT:    jmp .LBB3_1515; CHECK-NEXT:  .LBB3_3:516; CHECK-NEXT:    addq $1088, %rsp # imm = 0x440517; CHECK-NEXT:    popq %rbx518; CHECK-NEXT:    popq %r12519; CHECK-NEXT:    popq %r14520; CHECK-NEXT:    popq %r15521; CHECK-NEXT:    popq %rbp522; CHECK-NEXT:    tilerelease523; CHECK-NEXT:    retq524;525; IPRA-LABEL: test_loop2:526; IPRA:       # %bb.0:527; IPRA-NEXT:    subq $72, %rsp528; IPRA-NEXT:    vxorps %xmm0, %xmm0, %xmm0529; IPRA-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)530; IPRA-NEXT:    movb $1, {{[0-9]+}}(%rsp)531; IPRA-NEXT:    movb $8, {{[0-9]+}}(%rsp)532; IPRA-NEXT:    movw $8, {{[0-9]+}}(%rsp)533; IPRA-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)534; IPRA-NEXT:    movl $buf, %eax535; IPRA-NEXT:    movl $32, %ecx536; IPRA-NEXT:    movw $8, %dx537; IPRA-NEXT:    movl $buf+2048, %esi538; IPRA-NEXT:    .p2align 4539; IPRA-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1540; IPRA-NEXT:    callq foo541; IPRA-NEXT:    testl %edi, %edi542; IPRA-NEXT:    jle .LBB3_3543; IPRA-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1544; IPRA-NEXT:    tileloadd (%rax,%rcx), %tmm0545; IPRA-NEXT:    callq foo546; IPRA-NEXT:    tilestored %tmm0, (%rsi,%rcx)547; IPRA-NEXT:    callq foo548; IPRA-NEXT:    jmp .LBB3_1549; IPRA-NEXT:  .LBB3_3:550; IPRA-NEXT:    addq $72, %rsp551; IPRA-NEXT:    tilerelease552; IPRA-NEXT:    vzeroupper553; IPRA-NEXT:    retq554;555; O0-LABEL: test_loop2:556; O0:       # %bb.0:557; O0-NEXT:    pushq %rbp558; O0-NEXT:    movq %rsp, %rbp559; O0-NEXT:    andq $-1024, %rsp # imm = 0xFC00560; O0-NEXT:    subq $3072, %rsp # imm = 0xC00561; O0-NEXT:    vxorps %xmm0, %xmm0, %xmm0562; O0-NEXT:    vmovups %zmm0, {{[0-9]+}}(%rsp)563; O0-NEXT:    movb $1, {{[0-9]+}}(%rsp)564; O0-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill565; O0-NEXT:    xorl %eax, %eax566; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill567; O0-NEXT:  .LBB3_1: # =>This Inner Loop Header: Depth=1568; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload569; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill570; O0-NEXT:    vzeroupper571; O0-NEXT:    callq foo572; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload573; O0-NEXT:    cmpl $0, %eax574; O0-NEXT:    jle .LBB3_3575; O0-NEXT:  # %bb.2: # in Loop: Header=BB3_1 Depth=1576; O0-NEXT:    movl $buf, %ecx577; O0-NEXT:    movl $32, %edx578; O0-NEXT:    movw $8, %ax579; O0-NEXT:    # implicit-def: $al580; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)581; O0-NEXT:    movw %ax, {{[0-9]+}}(%rsp)582; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)583; O0-NEXT:    tileloadd (%rcx,%rdx), %tmm0584; O0-NEXT:    movl $64, %edx585; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx586; O0-NEXT:    movw $8, %ax587; O0-NEXT:    tilestored %tmm0, (%rcx,%rdx)588; O0-NEXT:    callq foo589; O0-NEXT:    movl $64, %edx590; O0-NEXT:    leaq {{[0-9]+}}(%rsp), %rcx591; O0-NEXT:    movw $8, %ax592; O0-NEXT:    # implicit-def: $al593; O0-NEXT:    movb %al, {{[0-9]+}}(%rsp)594; O0-NEXT:    movw %ax, {{[0-9]+}}(%rsp)595; O0-NEXT:    ldtilecfg {{[0-9]+}}(%rsp)596; O0-NEXT:    tileloadd (%rcx,%rdx), %tmm0597; O0-NEXT:    movl $32, %edx598; O0-NEXT:    movl $buf+2048, %ecx599; O0-NEXT:    movw $8, %ax600; O0-NEXT:    tilestored %tmm0, (%rcx,%rdx)601; O0-NEXT:    callq foo602; O0-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %eax # 4-byte Reload603; O0-NEXT:    addl $1, %eax604; O0-NEXT:    movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill605; O0-NEXT:    jmp .LBB3_1606; O0-NEXT:  .LBB3_3:607; O0-NEXT:    movq %rbp, %rsp608; O0-NEXT:    popq %rbp609; O0-NEXT:    tilerelease610; O0-NEXT:    retq611  br label %26122:613  %3 = phi i32 [ 0, %1 ], [ %7, %5 ]614  call void @foo()615  %4 = icmp sgt i32 %0, 0616  br i1 %4, label %5, label %86175:618  %6 = tail call x86_amx @llvm.x86.tileloadd64.internal(i16 8, i16 8, ptr @buf, i64 32)619  call void @foo()620  tail call void @llvm.x86.tilestored64.internal(i16 8, i16 8, ptr getelementptr inbounds ([3072 x i8], ptr @buf, i64 0, i64 2048), i64 32, x86_amx %6)621  call void @foo()622  %7 = add i32 %3, 1623  br label %26248:625  ret void626}627 628declare x86_amx @llvm.x86.tileloadd64.internal(i16, i16, ptr, i64)629declare x86_amx @llvm.x86.tdpbssd.internal(i16, i16, i16, x86_amx, x86_amx, x86_amx)630declare void @llvm.x86.tilestored64.internal(i16, i16, ptr, i64, x86_amx)631