brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.9 KiB · 0b03441 Raw
248 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-unknown -O0 < %s | FileCheck --check-prefixes=CHECK,CHECK-O0 %s3; RUN: llc -mtriple=x86_64-unknown-unknown -O3 < %s | FileCheck --check-prefixes=CHECK,CHECK-O3 %s4 5declare void @external()6declare void @no_csr() "no_callee_saved_registers"7 8define void @normal() {9; CHECK-LABEL: normal:10; CHECK:       # %bb.0:11; CHECK-NEXT:    pushq %rax12; CHECK-NEXT:    .cfi_def_cfa_offset 1613; CHECK-NEXT:    callq external@PLT14; CHECK-NEXT:    popq %rax15; CHECK-NEXT:    .cfi_def_cfa_offset 816; CHECK-NEXT:    retq17  call void @external()18  ret void19}20 21; Calling a routine with no CSRs means the caller has to spill a bunch22define void @test1() {23; CHECK-LABEL: test1:24; CHECK:       # %bb.0:25; CHECK-NEXT:    pushq %rbp26; CHECK-NEXT:    .cfi_def_cfa_offset 1627; CHECK-NEXT:    pushq %r1528; CHECK-NEXT:    .cfi_def_cfa_offset 2429; CHECK-NEXT:    pushq %r1430; CHECK-NEXT:    .cfi_def_cfa_offset 3231; CHECK-NEXT:    pushq %r1332; CHECK-NEXT:    .cfi_def_cfa_offset 4033; CHECK-NEXT:    pushq %r1234; CHECK-NEXT:    .cfi_def_cfa_offset 4835; CHECK-NEXT:    pushq %rbx36; CHECK-NEXT:    .cfi_def_cfa_offset 5637; CHECK-NEXT:    pushq %rax38; CHECK-NEXT:    .cfi_def_cfa_offset 6439; CHECK-NEXT:    .cfi_offset %rbx, -5640; CHECK-NEXT:    .cfi_offset %r12, -4841; CHECK-NEXT:    .cfi_offset %r13, -4042; CHECK-NEXT:    .cfi_offset %r14, -3243; CHECK-NEXT:    .cfi_offset %r15, -2444; CHECK-NEXT:    .cfi_offset %rbp, -1645; CHECK-NEXT:    callq external@PLT46; CHECK-NEXT:    addq $8, %rsp47; CHECK-NEXT:    .cfi_def_cfa_offset 5648; CHECK-NEXT:    popq %rbx49; CHECK-NEXT:    .cfi_def_cfa_offset 4850; CHECK-NEXT:    popq %r1251; CHECK-NEXT:    .cfi_def_cfa_offset 4052; CHECK-NEXT:    popq %r1353; CHECK-NEXT:    .cfi_def_cfa_offset 3254; CHECK-NEXT:    popq %r1455; CHECK-NEXT:    .cfi_def_cfa_offset 2456; CHECK-NEXT:    popq %r1557; CHECK-NEXT:    .cfi_def_cfa_offset 1658; CHECK-NEXT:    popq %rbp59; CHECK-NEXT:    .cfi_def_cfa_offset 860; CHECK-NEXT:    retq61  call void @external() "no_callee_saved_registers"62  ret void63}64 65; Same as test1, but on callee, not callsite66define void @test2() {67; CHECK-LABEL: test2:68; CHECK:       # %bb.0:69; CHECK-NEXT:    pushq %rbp70; CHECK-NEXT:    .cfi_def_cfa_offset 1671; CHECK-NEXT:    pushq %r1572; CHECK-NEXT:    .cfi_def_cfa_offset 2473; CHECK-NEXT:    pushq %r1474; CHECK-NEXT:    .cfi_def_cfa_offset 3275; CHECK-NEXT:    pushq %r1376; CHECK-NEXT:    .cfi_def_cfa_offset 4077; CHECK-NEXT:    pushq %r1278; CHECK-NEXT:    .cfi_def_cfa_offset 4879; CHECK-NEXT:    pushq %rbx80; CHECK-NEXT:    .cfi_def_cfa_offset 5681; CHECK-NEXT:    pushq %rax82; CHECK-NEXT:    .cfi_def_cfa_offset 6483; CHECK-NEXT:    .cfi_offset %rbx, -5684; CHECK-NEXT:    .cfi_offset %r12, -4885; CHECK-NEXT:    .cfi_offset %r13, -4086; CHECK-NEXT:    .cfi_offset %r14, -3287; CHECK-NEXT:    .cfi_offset %r15, -2488; CHECK-NEXT:    .cfi_offset %rbp, -1689; CHECK-NEXT:    callq no_csr@PLT90; CHECK-NEXT:    addq $8, %rsp91; CHECK-NEXT:    .cfi_def_cfa_offset 5692; CHECK-NEXT:    popq %rbx93; CHECK-NEXT:    .cfi_def_cfa_offset 4894; CHECK-NEXT:    popq %r1295; CHECK-NEXT:    .cfi_def_cfa_offset 4096; CHECK-NEXT:    popq %r1397; CHECK-NEXT:    .cfi_def_cfa_offset 3298; CHECK-NEXT:    popq %r1499; CHECK-NEXT:    .cfi_def_cfa_offset 24100; CHECK-NEXT:    popq %r15101; CHECK-NEXT:    .cfi_def_cfa_offset 16102; CHECK-NEXT:    popq %rbp103; CHECK-NEXT:    .cfi_def_cfa_offset 8104; CHECK-NEXT:    retq105  call void @no_csr()106  ret void107}108 109; on an invoke instead110define i32 @test3() personality ptr undef {111; CHECK-O0-LABEL: test3:112; CHECK-O0:       # %bb.0: # %entry113; CHECK-O0-NEXT:    pushq %rbp114; CHECK-O0-NEXT:    .cfi_def_cfa_offset 16115; CHECK-O0-NEXT:    pushq %r15116; CHECK-O0-NEXT:    .cfi_def_cfa_offset 24117; CHECK-O0-NEXT:    pushq %r14118; CHECK-O0-NEXT:    .cfi_def_cfa_offset 32119; CHECK-O0-NEXT:    pushq %r13120; CHECK-O0-NEXT:    .cfi_def_cfa_offset 40121; CHECK-O0-NEXT:    pushq %r12122; CHECK-O0-NEXT:    .cfi_def_cfa_offset 48123; CHECK-O0-NEXT:    pushq %rbx124; CHECK-O0-NEXT:    .cfi_def_cfa_offset 56125; CHECK-O0-NEXT:    pushq %rax126; CHECK-O0-NEXT:    .cfi_def_cfa_offset 64127; CHECK-O0-NEXT:    .cfi_offset %rbx, -56128; CHECK-O0-NEXT:    .cfi_offset %r12, -48129; CHECK-O0-NEXT:    .cfi_offset %r13, -40130; CHECK-O0-NEXT:    .cfi_offset %r14, -32131; CHECK-O0-NEXT:    .cfi_offset %r15, -24132; CHECK-O0-NEXT:    .cfi_offset %rbp, -16133; CHECK-O0-NEXT:  .Ltmp0:134; CHECK-O0-NEXT:    callq no_csr@PLT135; CHECK-O0-NEXT:  .Ltmp1:136; CHECK-O0-NEXT:    jmp .LBB3_1137; CHECK-O0-NEXT:  .LBB3_1: # %invoke.cont138; CHECK-O0-NEXT:    movl $1, %eax139; CHECK-O0-NEXT:    addq $8, %rsp140; CHECK-O0-NEXT:    .cfi_def_cfa_offset 56141; CHECK-O0-NEXT:    popq %rbx142; CHECK-O0-NEXT:    .cfi_def_cfa_offset 48143; CHECK-O0-NEXT:    popq %r12144; CHECK-O0-NEXT:    .cfi_def_cfa_offset 40145; CHECK-O0-NEXT:    popq %r13146; CHECK-O0-NEXT:    .cfi_def_cfa_offset 32147; CHECK-O0-NEXT:    popq %r14148; CHECK-O0-NEXT:    .cfi_def_cfa_offset 24149; CHECK-O0-NEXT:    popq %r15150; CHECK-O0-NEXT:    .cfi_def_cfa_offset 16151; CHECK-O0-NEXT:    popq %rbp152; CHECK-O0-NEXT:    .cfi_def_cfa_offset 8153; CHECK-O0-NEXT:    retq154; CHECK-O0-NEXT:  .LBB3_2: # %lpad155; CHECK-O0-NEXT:    .cfi_def_cfa_offset 64156; CHECK-O0-NEXT:  .Ltmp2:157; CHECK-O0-NEXT:    xorl %eax, %eax158; CHECK-O0-NEXT:    addq $8, %rsp159; CHECK-O0-NEXT:    .cfi_def_cfa_offset 56160; CHECK-O0-NEXT:    popq %rbx161; CHECK-O0-NEXT:    .cfi_def_cfa_offset 48162; CHECK-O0-NEXT:    popq %r12163; CHECK-O0-NEXT:    .cfi_def_cfa_offset 40164; CHECK-O0-NEXT:    popq %r13165; CHECK-O0-NEXT:    .cfi_def_cfa_offset 32166; CHECK-O0-NEXT:    popq %r14167; CHECK-O0-NEXT:    .cfi_def_cfa_offset 24168; CHECK-O0-NEXT:    popq %r15169; CHECK-O0-NEXT:    .cfi_def_cfa_offset 16170; CHECK-O0-NEXT:    popq %rbp171; CHECK-O0-NEXT:    .cfi_def_cfa_offset 8172; CHECK-O0-NEXT:    retq173;174; CHECK-O3-LABEL: test3:175; CHECK-O3:       # %bb.0: # %entry176; CHECK-O3-NEXT:    pushq %rbp177; CHECK-O3-NEXT:    .cfi_def_cfa_offset 16178; CHECK-O3-NEXT:    pushq %r15179; CHECK-O3-NEXT:    .cfi_def_cfa_offset 24180; CHECK-O3-NEXT:    pushq %r14181; CHECK-O3-NEXT:    .cfi_def_cfa_offset 32182; CHECK-O3-NEXT:    pushq %r13183; CHECK-O3-NEXT:    .cfi_def_cfa_offset 40184; CHECK-O3-NEXT:    pushq %r12185; CHECK-O3-NEXT:    .cfi_def_cfa_offset 48186; CHECK-O3-NEXT:    pushq %rbx187; CHECK-O3-NEXT:    .cfi_def_cfa_offset 56188; CHECK-O3-NEXT:    pushq %rax189; CHECK-O3-NEXT:    .cfi_def_cfa_offset 64190; CHECK-O3-NEXT:    .cfi_offset %rbx, -56191; CHECK-O3-NEXT:    .cfi_offset %r12, -48192; CHECK-O3-NEXT:    .cfi_offset %r13, -40193; CHECK-O3-NEXT:    .cfi_offset %r14, -32194; CHECK-O3-NEXT:    .cfi_offset %r15, -24195; CHECK-O3-NEXT:    .cfi_offset %rbp, -16196; CHECK-O3-NEXT:  .Ltmp0:197; CHECK-O3-NEXT:    callq no_csr@PLT198; CHECK-O3-NEXT:  .Ltmp1:199; CHECK-O3-NEXT:  # %bb.1: # %invoke.cont200; CHECK-O3-NEXT:    movl $1, %eax201; CHECK-O3-NEXT:  .LBB3_2: # %invoke.cont202; CHECK-O3-NEXT:    addq $8, %rsp203; CHECK-O3-NEXT:    .cfi_def_cfa_offset 56204; CHECK-O3-NEXT:    popq %rbx205; CHECK-O3-NEXT:    .cfi_def_cfa_offset 48206; CHECK-O3-NEXT:    popq %r12207; CHECK-O3-NEXT:    .cfi_def_cfa_offset 40208; CHECK-O3-NEXT:    popq %r13209; CHECK-O3-NEXT:    .cfi_def_cfa_offset 32210; CHECK-O3-NEXT:    popq %r14211; CHECK-O3-NEXT:    .cfi_def_cfa_offset 24212; CHECK-O3-NEXT:    popq %r15213; CHECK-O3-NEXT:    .cfi_def_cfa_offset 16214; CHECK-O3-NEXT:    popq %rbp215; CHECK-O3-NEXT:    .cfi_def_cfa_offset 8216; CHECK-O3-NEXT:    retq217; CHECK-O3-NEXT:  .LBB3_3: # %lpad218; CHECK-O3-NEXT:    .cfi_def_cfa_offset 64219; CHECK-O3-NEXT:  .Ltmp2:220; CHECK-O3-NEXT:    xorl %eax, %eax221; CHECK-O3-NEXT:    jmp .LBB3_2222entry:223  invoke void @no_csr()224     to label %invoke.cont unwind label %lpad225 226invoke.cont:227  ret i32 1228 229lpad:230  %0 = landingpad { ptr, i32 }231          cleanup232  ret i32 0233}234 235define void @no_csr_func() "no_callee_saved_registers" {236; CHECK-LABEL: no_csr_func:237; CHECK:       # %bb.0:238; CHECK-NEXT:    pushq %rax239; CHECK-NEXT:    .cfi_def_cfa_offset 16240; CHECK-NEXT:    callq external@PLT241; CHECK-NEXT:    popq %rax242; CHECK-NEXT:    .cfi_def_cfa_offset 8243; CHECK-NEXT:    retq244  call void @external()245  ret void246}247 248