brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.7 KiB · f5be484 Raw
457 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+push2pop2 | FileCheck %s --check-prefix=CHECK3; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+push2pop2,+ppx | FileCheck %s --check-prefix=PPX4; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+push2pop2 -frame-pointer=all | FileCheck %s --check-prefix=FRAME5 6define void @csr1() nounwind {7; CHECK-LABEL: csr1:8; CHECK:       # %bb.0: # %entry9; CHECK-NEXT:    pushq %rbp10; CHECK-NEXT:    #APP11; CHECK-NEXT:    #NO_APP12; CHECK-NEXT:    popq %rbp13; CHECK-NEXT:    retq14;15; PPX-LABEL: csr1:16; PPX:       # %bb.0: # %entry17; PPX-NEXT:    pushp %rbp18; PPX-NEXT:    #APP19; PPX-NEXT:    #NO_APP20; PPX-NEXT:    popp %rbp21; PPX-NEXT:    retq22;23; FRAME-LABEL: csr1:24; FRAME:       # %bb.0: # %entry25; FRAME-NEXT:    pushq %rbp26; FRAME-NEXT:    movq %rsp, %rbp27; FRAME-NEXT:    pushq %rbp28; FRAME-NEXT:    pushq %rax29; FRAME-NEXT:    #APP30; FRAME-NEXT:    #NO_APP31; FRAME-NEXT:    popq %rax32; FRAME-NEXT:    popq %rbp33; FRAME-NEXT:    popq %rbp34; FRAME-NEXT:    retq35entry:36  tail call void asm sideeffect "", "~{rbp},~{dirflag},~{fpsr},~{flags}"()37  ret void38}39 40define void @csr2() nounwind {41; CHECK-LABEL: csr2:42; CHECK:       # %bb.0: # %entry43; CHECK-NEXT:    pushq %rbp44; CHECK-NEXT:    pushq %r1545; CHECK-NEXT:    #APP46; CHECK-NEXT:    #NO_APP47; CHECK-NEXT:    popq %r1548; CHECK-NEXT:    popq %rbp49; CHECK-NEXT:    retq50;51; PPX-LABEL: csr2:52; PPX:       # %bb.0: # %entry53; PPX-NEXT:    pushp %rbp54; PPX-NEXT:    pushp %r1555; PPX-NEXT:    #APP56; PPX-NEXT:    #NO_APP57; PPX-NEXT:    popp %r1558; PPX-NEXT:    popp %rbp59; PPX-NEXT:    retq60;61; FRAME-LABEL: csr2:62; FRAME:       # %bb.0: # %entry63; FRAME-NEXT:    pushq %rbp64; FRAME-NEXT:    movq %rsp, %rbp65; FRAME-NEXT:    pushq %r1566; FRAME-NEXT:    pushq %rbp67; FRAME-NEXT:    pushq %rax68; FRAME-NEXT:    #APP69; FRAME-NEXT:    #NO_APP70; FRAME-NEXT:    popq %rax71; FRAME-NEXT:    popq %rbp72; FRAME-NEXT:    popq %r1573; FRAME-NEXT:    popq %rbp74; FRAME-NEXT:    retq75entry:76  tail call void asm sideeffect "", "~{rbp},~{r15},~{dirflag},~{fpsr},~{flags}"()77  ret void78}79 80define void @csr3() nounwind {81; CHECK-LABEL: csr3:82; CHECK:       # %bb.0: # %entry83; CHECK-NEXT:    pushq %rbp84; CHECK-NEXT:    push2 %r14, %r1585; CHECK-NEXT:    #APP86; CHECK-NEXT:    #NO_APP87; CHECK-NEXT:    pop2 %r15, %r1488; CHECK-NEXT:    popq %rbp89; CHECK-NEXT:    retq90;91; PPX-LABEL: csr3:92; PPX:       # %bb.0: # %entry93; PPX-NEXT:    pushp %rbp94; PPX-NEXT:    push2p %r14, %r1595; PPX-NEXT:    #APP96; PPX-NEXT:    #NO_APP97; PPX-NEXT:    pop2p %r15, %r1498; PPX-NEXT:    popp %rbp99; PPX-NEXT:    retq100;101; FRAME-LABEL: csr3:102; FRAME:       # %bb.0: # %entry103; FRAME-NEXT:    pushq %rbp104; FRAME-NEXT:    movq %rsp, %rbp105; FRAME-NEXT:    push2 %r14, %r15106; FRAME-NEXT:    pushq %rbp107; FRAME-NEXT:    pushq %rax108; FRAME-NEXT:    #APP109; FRAME-NEXT:    #NO_APP110; FRAME-NEXT:    popq %rax111; FRAME-NEXT:    popq %rbp112; FRAME-NEXT:    pop2 %r15, %r14113; FRAME-NEXT:    popq %rbp114; FRAME-NEXT:    retq115entry:116  tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{dirflag},~{fpsr},~{flags}"()117  ret void118}119 120define void @csr4() nounwind {121; CHECK-LABEL: csr4:122; CHECK:       # %bb.0: # %entry123; CHECK-NEXT:    pushq %rax124; CHECK-NEXT:    push2 %r15, %rbp125; CHECK-NEXT:    push2 %r13, %r14126; CHECK-NEXT:    #APP127; CHECK-NEXT:    #NO_APP128; CHECK-NEXT:    pop2 %r14, %r13129; CHECK-NEXT:    pop2 %rbp, %r15130; CHECK-NEXT:    popq %rax131; CHECK-NEXT:    retq132;133; PPX-LABEL: csr4:134; PPX:       # %bb.0: # %entry135; PPX-NEXT:    pushq %rax136; PPX-NEXT:    push2p %r15, %rbp137; PPX-NEXT:    push2p %r13, %r14138; PPX-NEXT:    #APP139; PPX-NEXT:    #NO_APP140; PPX-NEXT:    pop2p %r14, %r13141; PPX-NEXT:    pop2p %rbp, %r15142; PPX-NEXT:    popq %rax143; PPX-NEXT:    retq144;145; FRAME-LABEL: csr4:146; FRAME:       # %bb.0: # %entry147; FRAME-NEXT:    pushq %rbp148; FRAME-NEXT:    movq %rsp, %rbp149; FRAME-NEXT:    push2 %r14, %r15150; FRAME-NEXT:    pushq %r13151; FRAME-NEXT:    pushq %rbp152; FRAME-NEXT:    pushq %rax153; FRAME-NEXT:    #APP154; FRAME-NEXT:    #NO_APP155; FRAME-NEXT:    popq %rax156; FRAME-NEXT:    popq %rbp157; FRAME-NEXT:    popq %r13158; FRAME-NEXT:    pop2 %r15, %r14159; FRAME-NEXT:    popq %rbp160; FRAME-NEXT:    retq161entry:162  tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{r13},~{dirflag},~{fpsr},~{flags}"()163  ret void164}165 166define void @csr5() nounwind {167; CHECK-LABEL: csr5:168; CHECK:       # %bb.0: # %entry169; CHECK-NEXT:    pushq %rbp170; CHECK-NEXT:    push2 %r14, %r15171; CHECK-NEXT:    push2 %r12, %r13172; CHECK-NEXT:    #APP173; CHECK-NEXT:    #NO_APP174; CHECK-NEXT:    pop2 %r13, %r12175; CHECK-NEXT:    pop2 %r15, %r14176; CHECK-NEXT:    popq %rbp177; CHECK-NEXT:    retq178;179; PPX-LABEL: csr5:180; PPX:       # %bb.0: # %entry181; PPX-NEXT:    pushp %rbp182; PPX-NEXT:    push2p %r14, %r15183; PPX-NEXT:    push2p %r12, %r13184; PPX-NEXT:    #APP185; PPX-NEXT:    #NO_APP186; PPX-NEXT:    pop2p %r13, %r12187; PPX-NEXT:    pop2p %r15, %r14188; PPX-NEXT:    popp %rbp189; PPX-NEXT:    retq190;191; FRAME-LABEL: csr5:192; FRAME:       # %bb.0: # %entry193; FRAME-NEXT:    pushq %rbp194; FRAME-NEXT:    movq %rsp, %rbp195; FRAME-NEXT:    push2 %r14, %r15196; FRAME-NEXT:    push2 %r12, %r13197; FRAME-NEXT:    pushq %rbp198; FRAME-NEXT:    pushq %rax199; FRAME-NEXT:    #APP200; FRAME-NEXT:    #NO_APP201; FRAME-NEXT:    popq %rax202; FRAME-NEXT:    popq %rbp203; FRAME-NEXT:    pop2 %r13, %r12204; FRAME-NEXT:    pop2 %r15, %r14205; FRAME-NEXT:    popq %rbp206; FRAME-NEXT:    retq207entry:208  tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{r13},~{r12},~{dirflag},~{fpsr},~{flags}"()209  ret void210}211 212define void @csr6() nounwind {213; CHECK-LABEL: csr6:214; CHECK:       # %bb.0: # %entry215; CHECK-NEXT:    pushq %rax216; CHECK-NEXT:    push2 %r15, %rbp217; CHECK-NEXT:    push2 %r13, %r14218; CHECK-NEXT:    push2 %rbx, %r12219; CHECK-NEXT:    #APP220; CHECK-NEXT:    #NO_APP221; CHECK-NEXT:    pop2 %r12, %rbx222; CHECK-NEXT:    pop2 %r14, %r13223; CHECK-NEXT:    pop2 %rbp, %r15224; CHECK-NEXT:    popq %rax225; CHECK-NEXT:    retq226;227; PPX-LABEL: csr6:228; PPX:       # %bb.0: # %entry229; PPX-NEXT:    pushq %rax230; PPX-NEXT:    push2p %r15, %rbp231; PPX-NEXT:    push2p %r13, %r14232; PPX-NEXT:    push2p %rbx, %r12233; PPX-NEXT:    #APP234; PPX-NEXT:    #NO_APP235; PPX-NEXT:    pop2p %r12, %rbx236; PPX-NEXT:    pop2p %r14, %r13237; PPX-NEXT:    pop2p %rbp, %r15238; PPX-NEXT:    popq %rax239; PPX-NEXT:    retq240;241; FRAME-LABEL: csr6:242; FRAME:       # %bb.0: # %entry243; FRAME-NEXT:    pushq %rbp244; FRAME-NEXT:    movq %rsp, %rbp245; FRAME-NEXT:    push2 %r14, %r15246; FRAME-NEXT:    push2 %r12, %r13247; FRAME-NEXT:    pushq %rbx248; FRAME-NEXT:    pushq %rbp249; FRAME-NEXT:    pushq %rax250; FRAME-NEXT:    #APP251; FRAME-NEXT:    #NO_APP252; FRAME-NEXT:    popq %rax253; FRAME-NEXT:    popq %rbp254; FRAME-NEXT:    popq %rbx255; FRAME-NEXT:    pop2 %r13, %r12256; FRAME-NEXT:    pop2 %r15, %r14257; FRAME-NEXT:    popq %rbp258; FRAME-NEXT:    retq259entry:260  tail call void asm sideeffect "", "~{rbp},~{r15},~{r14},~{r13},~{r12},~{rbx},~{dirflag},~{fpsr},~{flags}"()261  ret void262}263 264declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)265 266define void @lea_in_epilog(i1 %arg, ptr %arg1, ptr %arg2, i64 %arg3, i64 %arg4, i64 %arg5, i64 %arg6, i64 %arg7, i64 %arg8, i64 %arg9, i64 %arg10) nounwind {267; CHECK-LABEL: lea_in_epilog:268; CHECK:       # %bb.0: # %bb269; CHECK-NEXT:    testb $1, %dil270; CHECK-NEXT:    je .LBB6_5271; CHECK-NEXT:  # %bb.1: # %bb13272; CHECK-NEXT:    pushq %rax273; CHECK-NEXT:    push2 %r15, %rbp274; CHECK-NEXT:    push2 %r13, %r14275; CHECK-NEXT:    push2 %rbx, %r12276; CHECK-NEXT:    subq $16, %rsp277; CHECK-NEXT:    movq %r9, %r14278; CHECK-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill279; CHECK-NEXT:    addq {{[0-9]+}}(%rsp), %r14280; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r13281; CHECK-NEXT:    addq %r14, %r13282; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %r15283; CHECK-NEXT:    addq %r14, %r15284; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rbx285; CHECK-NEXT:    addq %r14, %rbx286; CHECK-NEXT:    xorl %ebp, %ebp287; CHECK-NEXT:    xorl %r12d, %r12d288; CHECK-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill289; CHECK-NEXT:    .p2align 4290; CHECK-NEXT:  .LBB6_2: # %bb15291; CHECK-NEXT:    # =>This Inner Loop Header: Depth=1292; CHECK-NEXT:    incq %r12293; CHECK-NEXT:    movl $432, %edx # imm = 0x1B0294; CHECK-NEXT:    xorl %edi, %edi295; CHECK-NEXT:    movq %r15, %rsi296; CHECK-NEXT:    callq memcpy@PLT297; CHECK-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload298; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rax299; CHECK-NEXT:    addq %rax, %r13300; CHECK-NEXT:    addq %rax, %r15301; CHECK-NEXT:    addq %rax, %rbx302; CHECK-NEXT:    addq %rax, %r14303; CHECK-NEXT:    addq $8, %rbp304; CHECK-NEXT:    testb $1, %dil305; CHECK-NEXT:    je .LBB6_2306; CHECK-NEXT:  # %bb.3: # %bb11307; CHECK-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload308; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rsp309; CHECK-NEXT:    pop2 %r12, %rbx310; CHECK-NEXT:    pop2 %r14, %r13311; CHECK-NEXT:    pop2 %rbp, %r15312; CHECK-NEXT:    leaq {{[0-9]+}}(%rsp), %rsp313; CHECK-NEXT:    jne .LBB6_5314; CHECK-NEXT:  # %bb.4: # %bb12315; CHECK-NEXT:    movq $0, (%rax)316; CHECK-NEXT:  .LBB6_5: # %bb14317; CHECK-NEXT:    retq318;319; PPX-LABEL: lea_in_epilog:320; PPX:       # %bb.0: # %bb321; PPX-NEXT:    testb $1, %dil322; PPX-NEXT:    je .LBB6_5323; PPX-NEXT:  # %bb.1: # %bb13324; PPX-NEXT:    pushq %rax325; PPX-NEXT:    push2p %r15, %rbp326; PPX-NEXT:    push2p %r13, %r14327; PPX-NEXT:    push2p %rbx, %r12328; PPX-NEXT:    subq $16, %rsp329; PPX-NEXT:    movq %r9, %r14330; PPX-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill331; PPX-NEXT:    addq {{[0-9]+}}(%rsp), %r14332; PPX-NEXT:    movq {{[0-9]+}}(%rsp), %r13333; PPX-NEXT:    addq %r14, %r13334; PPX-NEXT:    movq {{[0-9]+}}(%rsp), %r15335; PPX-NEXT:    addq %r14, %r15336; PPX-NEXT:    movq {{[0-9]+}}(%rsp), %rbx337; PPX-NEXT:    addq %r14, %rbx338; PPX-NEXT:    xorl %ebp, %ebp339; PPX-NEXT:    xorl %r12d, %r12d340; PPX-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill341; PPX-NEXT:    .p2align 4342; PPX-NEXT:  .LBB6_2: # %bb15343; PPX-NEXT:    # =>This Inner Loop Header: Depth=1344; PPX-NEXT:    incq %r12345; PPX-NEXT:    movl $432, %edx # imm = 0x1B0346; PPX-NEXT:    xorl %edi, %edi347; PPX-NEXT:    movq %r15, %rsi348; PPX-NEXT:    callq memcpy@PLT349; PPX-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload350; PPX-NEXT:    movq {{[0-9]+}}(%rsp), %rax351; PPX-NEXT:    addq %rax, %r13352; PPX-NEXT:    addq %rax, %r15353; PPX-NEXT:    addq %rax, %rbx354; PPX-NEXT:    addq %rax, %r14355; PPX-NEXT:    addq $8, %rbp356; PPX-NEXT:    testb $1, %dil357; PPX-NEXT:    je .LBB6_2358; PPX-NEXT:  # %bb.3: # %bb11359; PPX-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload360; PPX-NEXT:    leaq {{[0-9]+}}(%rsp), %rsp361; PPX-NEXT:    pop2p %r12, %rbx362; PPX-NEXT:    pop2p %r14, %r13363; PPX-NEXT:    pop2p %rbp, %r15364; PPX-NEXT:    leaq {{[0-9]+}}(%rsp), %rsp365; PPX-NEXT:    jne .LBB6_5366; PPX-NEXT:  # %bb.4: # %bb12367; PPX-NEXT:    movq $0, (%rax)368; PPX-NEXT:  .LBB6_5: # %bb14369; PPX-NEXT:    retq370;371; FRAME-LABEL: lea_in_epilog:372; FRAME:       # %bb.0: # %bb373; FRAME-NEXT:    testb $1, %dil374; FRAME-NEXT:    je .LBB6_5375; FRAME-NEXT:  # %bb.1: # %bb13376; FRAME-NEXT:    pushq %rbp377; FRAME-NEXT:    movq %rsp, %rbp378; FRAME-NEXT:    push2 %r14, %r15379; FRAME-NEXT:    push2 %r12, %r13380; FRAME-NEXT:    pushq %rbx381; FRAME-NEXT:    subq $24, %rsp382; FRAME-NEXT:    movq %rsi, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill383; FRAME-NEXT:    addq 16(%rbp), %r9384; FRAME-NEXT:    movq 48(%rbp), %rbx385; FRAME-NEXT:    addq %r9, %rbx386; FRAME-NEXT:    movq 40(%rbp), %r12387; FRAME-NEXT:    addq %r9, %r12388; FRAME-NEXT:    movq 32(%rbp), %r15389; FRAME-NEXT:    addq %r9, %r15390; FRAME-NEXT:    xorl %r13d, %r13d391; FRAME-NEXT:    xorl %r14d, %r14d392; FRAME-NEXT:    movl %edi, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill393; FRAME-NEXT:    .p2align 4394; FRAME-NEXT:  .LBB6_2: # %bb15395; FRAME-NEXT:    # =>This Inner Loop Header: Depth=1396; FRAME-NEXT:    movq %r9, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill397; FRAME-NEXT:    incq %r14398; FRAME-NEXT:    movl $432, %edx # imm = 0x1B0399; FRAME-NEXT:    xorl %edi, %edi400; FRAME-NEXT:    movq %r12, %rsi401; FRAME-NEXT:    callq memcpy@PLT402; FRAME-NEXT:    movl {{[-0-9]+}}(%r{{[sb]}}p), %edi # 4-byte Reload403; FRAME-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %r9 # 8-byte Reload404; FRAME-NEXT:    movq 16(%rbp), %rax405; FRAME-NEXT:    addq %rax, %rbx406; FRAME-NEXT:    addq %rax, %r12407; FRAME-NEXT:    addq %rax, %r15408; FRAME-NEXT:    addq %rax, %r9409; FRAME-NEXT:    addq $8, %r13410; FRAME-NEXT:    testb $1, %dil411; FRAME-NEXT:    je .LBB6_2412; FRAME-NEXT:  # %bb.3: # %bb11413; FRAME-NEXT:    movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload414; FRAME-NEXT:    leaq {{[0-9]+}}(%rsp), %rsp415; FRAME-NEXT:    popq %rbx416; FRAME-NEXT:    pop2 %r13, %r12417; FRAME-NEXT:    pop2 %r15, %r14418; FRAME-NEXT:    popq %rbp419; FRAME-NEXT:    jne .LBB6_5420; FRAME-NEXT:  # %bb.4: # %bb12421; FRAME-NEXT:    movq $0, (%rax)422; FRAME-NEXT:  .LBB6_5: # %bb14423; FRAME-NEXT:    retq424bb:425  br i1 %arg, label %bb13, label %bb14426 427bb11:428  br i1 %arg, label %bb14, label %bb12429 430bb12:431  store double 0.000000e+00, ptr %arg1, align 8432  br label %bb14433 434bb13:435  %getelementptr = getelementptr i8, ptr null, i64 %arg5436  br label %bb15437 438bb14:439  ret void440 441bb15:442  %phi = phi i64 [ 0, %bb13 ], [ %add, %bb15 ]443  %getelementptr16 = getelementptr double, ptr null, i64 %phi444  %add = add i64 %phi, 1445  %mul = mul i64 %arg6, %add446  %getelementptr17 = getelementptr i8, ptr %getelementptr, i64 %mul447  call void @llvm.memcpy.p0.p0.i64(ptr %getelementptr16, ptr %getelementptr17, i64 0, i1 false)448  %getelementptr18 = getelementptr i8, ptr %getelementptr17, i64 %arg7449  %getelementptr19 = getelementptr i8, ptr %getelementptr17, i64 %arg8450  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr %getelementptr19, i64 0, i1 false)451  %getelementptr20 = getelementptr i8, ptr %getelementptr17, i64 %arg9452  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr %getelementptr20, i64 432, i1 false)453  %getelementptr21 = getelementptr i8, ptr %getelementptr17, i64 %arg10454  call void @llvm.memcpy.p0.p0.i64(ptr null, ptr %getelementptr21, i64 0, i1 false)455  br i1 %arg, label %bb11, label %bb15456}457