brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.6 KiB · 0648123 Raw
489 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -x86-speculative-load-hardening | FileCheck %s --check-prefix=X64-NOPIC3; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -x86-speculative-load-hardening -code-model medium | FileCheck %s --check-prefix=X64-NOPIC-MCM4; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu -x86-speculative-load-hardening -relocation-model pic | FileCheck %s --check-prefix=X64-PIC5;6; FIXME: Add support for 32-bit.7 8declare void @f()9 10define i32 @test_calls_and_rets(ptr%ptr) nounwind {11; X64-NOPIC-LABEL: test_calls_and_rets:12; X64-NOPIC:       # %bb.0: # %entry13; X64-NOPIC-NEXT:    pushq %rbp14; X64-NOPIC-NEXT:    pushq %r1415; X64-NOPIC-NEXT:    pushq %rbx16; X64-NOPIC-NEXT:    movq %rsp, %rax17; X64-NOPIC-NEXT:    movq %rdi, %rbx18; X64-NOPIC-NEXT:    movq $-1, %r1419; X64-NOPIC-NEXT:    sarq $63, %rax20; X64-NOPIC-NEXT:    shlq $47, %rax21; X64-NOPIC-NEXT:    orq %rax, %rsp22; X64-NOPIC-NEXT:    callq f@PLT23; X64-NOPIC-NEXT:  .Lslh_ret_addr0:24; X64-NOPIC-NEXT:    movq %rsp, %rax25; X64-NOPIC-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx26; X64-NOPIC-NEXT:    sarq $63, %rax27; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr0, %rcx28; X64-NOPIC-NEXT:    cmovneq %r14, %rax29; X64-NOPIC-NEXT:    movl (%rbx), %ebp30; X64-NOPIC-NEXT:    shlq $47, %rax31; X64-NOPIC-NEXT:    orq %rax, %rsp32; X64-NOPIC-NEXT:    callq f@PLT33; X64-NOPIC-NEXT:  .Lslh_ret_addr1:34; X64-NOPIC-NEXT:    movq %rsp, %rcx35; X64-NOPIC-NEXT:    movq -{{[0-9]+}}(%rsp), %rax36; X64-NOPIC-NEXT:    sarq $63, %rcx37; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr1, %rax38; X64-NOPIC-NEXT:    cmovneq %r14, %rcx39; X64-NOPIC-NEXT:    addl (%rbx), %ebp40; X64-NOPIC-NEXT:    orl %ecx, %ebp41; X64-NOPIC-NEXT:    shlq $47, %rcx42; X64-NOPIC-NEXT:    movl %ebp, %eax43; X64-NOPIC-NEXT:    orq %rcx, %rsp44; X64-NOPIC-NEXT:    popq %rbx45; X64-NOPIC-NEXT:    popq %r1446; X64-NOPIC-NEXT:    popq %rbp47; X64-NOPIC-NEXT:    retq48;49; X64-NOPIC-MCM-LABEL: test_calls_and_rets:50; X64-NOPIC-MCM:       # %bb.0: # %entry51; X64-NOPIC-MCM-NEXT:    pushq %rbp52; X64-NOPIC-MCM-NEXT:    pushq %r1453; X64-NOPIC-MCM-NEXT:    pushq %rbx54; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax55; X64-NOPIC-MCM-NEXT:    movq %rdi, %rbx56; X64-NOPIC-MCM-NEXT:    movq $-1, %r1457; X64-NOPIC-MCM-NEXT:    sarq $63, %rax58; X64-NOPIC-MCM-NEXT:    shlq $47, %rax59; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp60; X64-NOPIC-MCM-NEXT:    callq f@PLT61; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr0:62; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax63; X64-NOPIC-MCM-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx64; X64-NOPIC-MCM-NEXT:    sarq $63, %rax65; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr0(%rip), %rdx66; X64-NOPIC-MCM-NEXT:    cmpq %rdx, %rcx67; X64-NOPIC-MCM-NEXT:    cmovneq %r14, %rax68; X64-NOPIC-MCM-NEXT:    movl (%rbx), %ebp69; X64-NOPIC-MCM-NEXT:    shlq $47, %rax70; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp71; X64-NOPIC-MCM-NEXT:    callq f@PLT72; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr1:73; X64-NOPIC-MCM-NEXT:    movq %rsp, %rcx74; X64-NOPIC-MCM-NEXT:    movq -{{[0-9]+}}(%rsp), %rax75; X64-NOPIC-MCM-NEXT:    sarq $63, %rcx76; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr1(%rip), %rdx77; X64-NOPIC-MCM-NEXT:    cmpq %rdx, %rax78; X64-NOPIC-MCM-NEXT:    cmovneq %r14, %rcx79; X64-NOPIC-MCM-NEXT:    addl (%rbx), %ebp80; X64-NOPIC-MCM-NEXT:    orl %ecx, %ebp81; X64-NOPIC-MCM-NEXT:    shlq $47, %rcx82; X64-NOPIC-MCM-NEXT:    movl %ebp, %eax83; X64-NOPIC-MCM-NEXT:    orq %rcx, %rsp84; X64-NOPIC-MCM-NEXT:    popq %rbx85; X64-NOPIC-MCM-NEXT:    popq %r1486; X64-NOPIC-MCM-NEXT:    popq %rbp87; X64-NOPIC-MCM-NEXT:    retq88;89; X64-PIC-LABEL: test_calls_and_rets:90; X64-PIC:       # %bb.0: # %entry91; X64-PIC-NEXT:    pushq %rbp92; X64-PIC-NEXT:    pushq %r1493; X64-PIC-NEXT:    pushq %rbx94; X64-PIC-NEXT:    movq %rsp, %rax95; X64-PIC-NEXT:    movq %rdi, %rbx96; X64-PIC-NEXT:    movq $-1, %r1497; X64-PIC-NEXT:    sarq $63, %rax98; X64-PIC-NEXT:    shlq $47, %rax99; X64-PIC-NEXT:    orq %rax, %rsp100; X64-PIC-NEXT:    callq f@PLT101; X64-PIC-NEXT:  .Lslh_ret_addr0:102; X64-PIC-NEXT:    movq %rsp, %rax103; X64-PIC-NEXT:    movq -{{[0-9]+}}(%rsp), %rcx104; X64-PIC-NEXT:    sarq $63, %rax105; X64-PIC-NEXT:    leaq .Lslh_ret_addr0(%rip), %rdx106; X64-PIC-NEXT:    cmpq %rdx, %rcx107; X64-PIC-NEXT:    cmovneq %r14, %rax108; X64-PIC-NEXT:    movl (%rbx), %ebp109; X64-PIC-NEXT:    shlq $47, %rax110; X64-PIC-NEXT:    orq %rax, %rsp111; X64-PIC-NEXT:    callq f@PLT112; X64-PIC-NEXT:  .Lslh_ret_addr1:113; X64-PIC-NEXT:    movq %rsp, %rcx114; X64-PIC-NEXT:    movq -{{[0-9]+}}(%rsp), %rax115; X64-PIC-NEXT:    sarq $63, %rcx116; X64-PIC-NEXT:    leaq .Lslh_ret_addr1(%rip), %rdx117; X64-PIC-NEXT:    cmpq %rdx, %rax118; X64-PIC-NEXT:    cmovneq %r14, %rcx119; X64-PIC-NEXT:    addl (%rbx), %ebp120; X64-PIC-NEXT:    orl %ecx, %ebp121; X64-PIC-NEXT:    shlq $47, %rcx122; X64-PIC-NEXT:    movl %ebp, %eax123; X64-PIC-NEXT:    orq %rcx, %rsp124; X64-PIC-NEXT:    popq %rbx125; X64-PIC-NEXT:    popq %r14126; X64-PIC-NEXT:    popq %rbp127; X64-PIC-NEXT:    retq128entry:129  call void @f()130  %x = load i32, ptr %ptr131  call void @f()132  %y = load i32, ptr %ptr133  %z = add i32 %x, %y134  ret i32 %z135}136 137define i32 @test_calls_and_rets_noredzone(ptr%ptr) nounwind noredzone {138; X64-NOPIC-LABEL: test_calls_and_rets_noredzone:139; X64-NOPIC:       # %bb.0: # %entry140; X64-NOPIC-NEXT:    pushq %rbp141; X64-NOPIC-NEXT:    pushq %r15142; X64-NOPIC-NEXT:    pushq %r14143; X64-NOPIC-NEXT:    pushq %rbx144; X64-NOPIC-NEXT:    pushq %rax145; X64-NOPIC-NEXT:    movq %rsp, %rax146; X64-NOPIC-NEXT:    movq %rdi, %rbx147; X64-NOPIC-NEXT:    movq $-1, %r14148; X64-NOPIC-NEXT:    sarq $63, %rax149; X64-NOPIC-NEXT:    shlq $47, %rax150; X64-NOPIC-NEXT:    orq %rax, %rsp151; X64-NOPIC-NEXT:    movq $.Lslh_ret_addr2, %r15152; X64-NOPIC-NEXT:    callq f@PLT153; X64-NOPIC-NEXT:  .Lslh_ret_addr2:154; X64-NOPIC-NEXT:    movq %rsp, %rax155; X64-NOPIC-NEXT:    sarq $63, %rax156; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr2, %r15157; X64-NOPIC-NEXT:    cmovneq %r14, %rax158; X64-NOPIC-NEXT:    movl (%rbx), %ebp159; X64-NOPIC-NEXT:    shlq $47, %rax160; X64-NOPIC-NEXT:    orq %rax, %rsp161; X64-NOPIC-NEXT:    movq $.Lslh_ret_addr3, %r15162; X64-NOPIC-NEXT:    callq f@PLT163; X64-NOPIC-NEXT:  .Lslh_ret_addr3:164; X64-NOPIC-NEXT:    movq %rsp, %rcx165; X64-NOPIC-NEXT:    sarq $63, %rcx166; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr3, %r15167; X64-NOPIC-NEXT:    cmovneq %r14, %rcx168; X64-NOPIC-NEXT:    addl (%rbx), %ebp169; X64-NOPIC-NEXT:    orl %ecx, %ebp170; X64-NOPIC-NEXT:    shlq $47, %rcx171; X64-NOPIC-NEXT:    movl %ebp, %eax172; X64-NOPIC-NEXT:    orq %rcx, %rsp173; X64-NOPIC-NEXT:    addq $8, %rsp174; X64-NOPIC-NEXT:    popq %rbx175; X64-NOPIC-NEXT:    popq %r14176; X64-NOPIC-NEXT:    popq %r15177; X64-NOPIC-NEXT:    popq %rbp178; X64-NOPIC-NEXT:    retq179;180; X64-NOPIC-MCM-LABEL: test_calls_and_rets_noredzone:181; X64-NOPIC-MCM:       # %bb.0: # %entry182; X64-NOPIC-MCM-NEXT:    pushq %rbp183; X64-NOPIC-MCM-NEXT:    pushq %r15184; X64-NOPIC-MCM-NEXT:    pushq %r14185; X64-NOPIC-MCM-NEXT:    pushq %rbx186; X64-NOPIC-MCM-NEXT:    pushq %rax187; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax188; X64-NOPIC-MCM-NEXT:    movq %rdi, %rbx189; X64-NOPIC-MCM-NEXT:    movq $-1, %r14190; X64-NOPIC-MCM-NEXT:    sarq $63, %rax191; X64-NOPIC-MCM-NEXT:    shlq $47, %rax192; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp193; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr2(%rip), %r15194; X64-NOPIC-MCM-NEXT:    callq f@PLT195; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr2:196; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax197; X64-NOPIC-MCM-NEXT:    sarq $63, %rax198; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr2(%rip), %rcx199; X64-NOPIC-MCM-NEXT:    cmpq %rcx, %r15200; X64-NOPIC-MCM-NEXT:    cmovneq %r14, %rax201; X64-NOPIC-MCM-NEXT:    movl (%rbx), %ebp202; X64-NOPIC-MCM-NEXT:    shlq $47, %rax203; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp204; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr3(%rip), %r15205; X64-NOPIC-MCM-NEXT:    callq f@PLT206; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr3:207; X64-NOPIC-MCM-NEXT:    movq %rsp, %rcx208; X64-NOPIC-MCM-NEXT:    sarq $63, %rcx209; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr3(%rip), %rax210; X64-NOPIC-MCM-NEXT:    cmpq %rax, %r15211; X64-NOPIC-MCM-NEXT:    cmovneq %r14, %rcx212; X64-NOPIC-MCM-NEXT:    addl (%rbx), %ebp213; X64-NOPIC-MCM-NEXT:    orl %ecx, %ebp214; X64-NOPIC-MCM-NEXT:    shlq $47, %rcx215; X64-NOPIC-MCM-NEXT:    movl %ebp, %eax216; X64-NOPIC-MCM-NEXT:    orq %rcx, %rsp217; X64-NOPIC-MCM-NEXT:    addq $8, %rsp218; X64-NOPIC-MCM-NEXT:    popq %rbx219; X64-NOPIC-MCM-NEXT:    popq %r14220; X64-NOPIC-MCM-NEXT:    popq %r15221; X64-NOPIC-MCM-NEXT:    popq %rbp222; X64-NOPIC-MCM-NEXT:    retq223;224; X64-PIC-LABEL: test_calls_and_rets_noredzone:225; X64-PIC:       # %bb.0: # %entry226; X64-PIC-NEXT:    pushq %rbp227; X64-PIC-NEXT:    pushq %r15228; X64-PIC-NEXT:    pushq %r14229; X64-PIC-NEXT:    pushq %rbx230; X64-PIC-NEXT:    pushq %rax231; X64-PIC-NEXT:    movq %rsp, %rax232; X64-PIC-NEXT:    movq %rdi, %rbx233; X64-PIC-NEXT:    movq $-1, %r14234; X64-PIC-NEXT:    sarq $63, %rax235; X64-PIC-NEXT:    shlq $47, %rax236; X64-PIC-NEXT:    orq %rax, %rsp237; X64-PIC-NEXT:    leaq .Lslh_ret_addr2(%rip), %r15238; X64-PIC-NEXT:    callq f@PLT239; X64-PIC-NEXT:  .Lslh_ret_addr2:240; X64-PIC-NEXT:    movq %rsp, %rax241; X64-PIC-NEXT:    sarq $63, %rax242; X64-PIC-NEXT:    leaq .Lslh_ret_addr2(%rip), %rcx243; X64-PIC-NEXT:    cmpq %rcx, %r15244; X64-PIC-NEXT:    cmovneq %r14, %rax245; X64-PIC-NEXT:    movl (%rbx), %ebp246; X64-PIC-NEXT:    shlq $47, %rax247; X64-PIC-NEXT:    orq %rax, %rsp248; X64-PIC-NEXT:    leaq .Lslh_ret_addr3(%rip), %r15249; X64-PIC-NEXT:    callq f@PLT250; X64-PIC-NEXT:  .Lslh_ret_addr3:251; X64-PIC-NEXT:    movq %rsp, %rcx252; X64-PIC-NEXT:    sarq $63, %rcx253; X64-PIC-NEXT:    leaq .Lslh_ret_addr3(%rip), %rax254; X64-PIC-NEXT:    cmpq %rax, %r15255; X64-PIC-NEXT:    cmovneq %r14, %rcx256; X64-PIC-NEXT:    addl (%rbx), %ebp257; X64-PIC-NEXT:    orl %ecx, %ebp258; X64-PIC-NEXT:    shlq $47, %rcx259; X64-PIC-NEXT:    movl %ebp, %eax260; X64-PIC-NEXT:    orq %rcx, %rsp261; X64-PIC-NEXT:    addq $8, %rsp262; X64-PIC-NEXT:    popq %rbx263; X64-PIC-NEXT:    popq %r14264; X64-PIC-NEXT:    popq %r15265; X64-PIC-NEXT:    popq %rbp266; X64-PIC-NEXT:    retq267entry:268  call void @f()269  %x = load i32, ptr %ptr270  call void @f()271  %y = load i32, ptr %ptr272  %z = add i32 %x, %y273  ret i32 %z274}275 276declare i32 @setjmp(ptr %env) returns_twice277declare i32 @sigsetjmp(ptr %env, i32 %savemask) returns_twice278declare i32 @__sigsetjmp(ptr %foo, ptr %bar, i32 %baz) returns_twice279 280define i32 @test_call_setjmp(ptr%ptr) nounwind {281; X64-NOPIC-LABEL: test_call_setjmp:282; X64-NOPIC:       # %bb.0: # %entry283; X64-NOPIC-NEXT:    pushq %rbp284; X64-NOPIC-NEXT:    pushq %r15285; X64-NOPIC-NEXT:    pushq %r14286; X64-NOPIC-NEXT:    pushq %r12287; X64-NOPIC-NEXT:    pushq %rbx288; X64-NOPIC-NEXT:    subq $16, %rsp289; X64-NOPIC-NEXT:    movq %rsp, %rax290; X64-NOPIC-NEXT:    movq %rdi, %rbx291; X64-NOPIC-NEXT:    movq $-1, %r15292; X64-NOPIC-NEXT:    sarq $63, %rax293; X64-NOPIC-NEXT:    movq %rsp, %r14294; X64-NOPIC-NEXT:    shlq $47, %rax295; X64-NOPIC-NEXT:    movq %r14, %rdi296; X64-NOPIC-NEXT:    orq %rax, %rsp297; X64-NOPIC-NEXT:    movq $.Lslh_ret_addr4, %r12298; X64-NOPIC-NEXT:    callq setjmp@PLT299; X64-NOPIC-NEXT:  .Lslh_ret_addr4:300; X64-NOPIC-NEXT:    movq %rsp, %rax301; X64-NOPIC-NEXT:    sarq $63, %rax302; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr4, %r12303; X64-NOPIC-NEXT:    cmovneq %r15, %rax304; X64-NOPIC-NEXT:    movl (%rbx), %ebp305; X64-NOPIC-NEXT:    shlq $47, %rax306; X64-NOPIC-NEXT:    movq %r14, %rdi307; X64-NOPIC-NEXT:    movl $42, %esi308; X64-NOPIC-NEXT:    orq %rax, %rsp309; X64-NOPIC-NEXT:    movq $.Lslh_ret_addr5, %r12310; X64-NOPIC-NEXT:    callq sigsetjmp@PLT311; X64-NOPIC-NEXT:  .Lslh_ret_addr5:312; X64-NOPIC-NEXT:    movq %rsp, %rax313; X64-NOPIC-NEXT:    sarq $63, %rax314; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr5, %r12315; X64-NOPIC-NEXT:    cmovneq %r15, %rax316; X64-NOPIC-NEXT:    addl (%rbx), %ebp317; X64-NOPIC-NEXT:    shlq $47, %rax318; X64-NOPIC-NEXT:    movq %r14, %rdi319; X64-NOPIC-NEXT:    movq %r14, %rsi320; X64-NOPIC-NEXT:    movl $42, %edx321; X64-NOPIC-NEXT:    orq %rax, %rsp322; X64-NOPIC-NEXT:    movq $.Lslh_ret_addr6, %r14323; X64-NOPIC-NEXT:    callq __sigsetjmp@PLT324; X64-NOPIC-NEXT:  .Lslh_ret_addr6:325; X64-NOPIC-NEXT:    movq %rsp, %rax326; X64-NOPIC-NEXT:    sarq $63, %rax327; X64-NOPIC-NEXT:    cmpq $.Lslh_ret_addr6, %r14328; X64-NOPIC-NEXT:    movq %rax, %rcx329; X64-NOPIC-NEXT:    cmovneq %r15, %rcx330; X64-NOPIC-NEXT:    addl (%rbx), %ebp331; X64-NOPIC-NEXT:    movl %ebp, %eax332; X64-NOPIC-NEXT:    orl %ecx, %eax333; X64-NOPIC-NEXT:    shlq $47, %rcx334; X64-NOPIC-NEXT:    orq %rcx, %rsp335; X64-NOPIC-NEXT:    addq $16, %rsp336; X64-NOPIC-NEXT:    popq %rbx337; X64-NOPIC-NEXT:    popq %r12338; X64-NOPIC-NEXT:    popq %r14339; X64-NOPIC-NEXT:    popq %r15340; X64-NOPIC-NEXT:    popq %rbp341; X64-NOPIC-NEXT:    retq342;343; X64-NOPIC-MCM-LABEL: test_call_setjmp:344; X64-NOPIC-MCM:       # %bb.0: # %entry345; X64-NOPIC-MCM-NEXT:    pushq %rbp346; X64-NOPIC-MCM-NEXT:    pushq %r15347; X64-NOPIC-MCM-NEXT:    pushq %r14348; X64-NOPIC-MCM-NEXT:    pushq %r12349; X64-NOPIC-MCM-NEXT:    pushq %rbx350; X64-NOPIC-MCM-NEXT:    subq $16, %rsp351; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax352; X64-NOPIC-MCM-NEXT:    movq %rdi, %rbx353; X64-NOPIC-MCM-NEXT:    movq $-1, %r15354; X64-NOPIC-MCM-NEXT:    sarq $63, %rax355; X64-NOPIC-MCM-NEXT:    movq %rsp, %r14356; X64-NOPIC-MCM-NEXT:    shlq $47, %rax357; X64-NOPIC-MCM-NEXT:    movq %r14, %rdi358; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp359; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr4(%rip), %r12360; X64-NOPIC-MCM-NEXT:    callq setjmp@PLT361; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr4:362; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax363; X64-NOPIC-MCM-NEXT:    sarq $63, %rax364; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr4(%rip), %rcx365; X64-NOPIC-MCM-NEXT:    cmpq %rcx, %r12366; X64-NOPIC-MCM-NEXT:    cmovneq %r15, %rax367; X64-NOPIC-MCM-NEXT:    movl (%rbx), %ebp368; X64-NOPIC-MCM-NEXT:    shlq $47, %rax369; X64-NOPIC-MCM-NEXT:    movq %r14, %rdi370; X64-NOPIC-MCM-NEXT:    movl $42, %esi371; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp372; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr5(%rip), %r12373; X64-NOPIC-MCM-NEXT:    callq sigsetjmp@PLT374; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr5:375; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax376; X64-NOPIC-MCM-NEXT:    sarq $63, %rax377; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr5(%rip), %rcx378; X64-NOPIC-MCM-NEXT:    cmpq %rcx, %r12379; X64-NOPIC-MCM-NEXT:    cmovneq %r15, %rax380; X64-NOPIC-MCM-NEXT:    addl (%rbx), %ebp381; X64-NOPIC-MCM-NEXT:    shlq $47, %rax382; X64-NOPIC-MCM-NEXT:    movq %r14, %rdi383; X64-NOPIC-MCM-NEXT:    movq %r14, %rsi384; X64-NOPIC-MCM-NEXT:    movl $42, %edx385; X64-NOPIC-MCM-NEXT:    orq %rax, %rsp386; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr6(%rip), %r14387; X64-NOPIC-MCM-NEXT:    callq __sigsetjmp@PLT388; X64-NOPIC-MCM-NEXT:  .Lslh_ret_addr6:389; X64-NOPIC-MCM-NEXT:    movq %rsp, %rax390; X64-NOPIC-MCM-NEXT:    sarq $63, %rax391; X64-NOPIC-MCM-NEXT:    leaq .Lslh_ret_addr6(%rip), %rcx392; X64-NOPIC-MCM-NEXT:    cmpq %rcx, %r14393; X64-NOPIC-MCM-NEXT:    movq %rax, %rcx394; X64-NOPIC-MCM-NEXT:    cmovneq %r15, %rcx395; X64-NOPIC-MCM-NEXT:    addl (%rbx), %ebp396; X64-NOPIC-MCM-NEXT:    movl %ebp, %eax397; X64-NOPIC-MCM-NEXT:    orl %ecx, %eax398; X64-NOPIC-MCM-NEXT:    shlq $47, %rcx399; X64-NOPIC-MCM-NEXT:    orq %rcx, %rsp400; X64-NOPIC-MCM-NEXT:    addq $16, %rsp401; X64-NOPIC-MCM-NEXT:    popq %rbx402; X64-NOPIC-MCM-NEXT:    popq %r12403; X64-NOPIC-MCM-NEXT:    popq %r14404; X64-NOPIC-MCM-NEXT:    popq %r15405; X64-NOPIC-MCM-NEXT:    popq %rbp406; X64-NOPIC-MCM-NEXT:    retq407;408; X64-PIC-LABEL: test_call_setjmp:409; X64-PIC:       # %bb.0: # %entry410; X64-PIC-NEXT:    pushq %rbp411; X64-PIC-NEXT:    pushq %r15412; X64-PIC-NEXT:    pushq %r14413; X64-PIC-NEXT:    pushq %r12414; X64-PIC-NEXT:    pushq %rbx415; X64-PIC-NEXT:    subq $16, %rsp416; X64-PIC-NEXT:    movq %rsp, %rax417; X64-PIC-NEXT:    movq %rdi, %rbx418; X64-PIC-NEXT:    movq $-1, %r15419; X64-PIC-NEXT:    sarq $63, %rax420; X64-PIC-NEXT:    movq %rsp, %r14421; X64-PIC-NEXT:    shlq $47, %rax422; X64-PIC-NEXT:    movq %r14, %rdi423; X64-PIC-NEXT:    orq %rax, %rsp424; X64-PIC-NEXT:    leaq .Lslh_ret_addr4(%rip), %r12425; X64-PIC-NEXT:    callq setjmp@PLT426; X64-PIC-NEXT:  .Lslh_ret_addr4:427; X64-PIC-NEXT:    movq %rsp, %rax428; X64-PIC-NEXT:    sarq $63, %rax429; X64-PIC-NEXT:    leaq .Lslh_ret_addr4(%rip), %rcx430; X64-PIC-NEXT:    cmpq %rcx, %r12431; X64-PIC-NEXT:    cmovneq %r15, %rax432; X64-PIC-NEXT:    movl (%rbx), %ebp433; X64-PIC-NEXT:    shlq $47, %rax434; X64-PIC-NEXT:    movq %r14, %rdi435; X64-PIC-NEXT:    movl $42, %esi436; X64-PIC-NEXT:    orq %rax, %rsp437; X64-PIC-NEXT:    leaq .Lslh_ret_addr5(%rip), %r12438; X64-PIC-NEXT:    callq sigsetjmp@PLT439; X64-PIC-NEXT:  .Lslh_ret_addr5:440; X64-PIC-NEXT:    movq %rsp, %rax441; X64-PIC-NEXT:    sarq $63, %rax442; X64-PIC-NEXT:    leaq .Lslh_ret_addr5(%rip), %rcx443; X64-PIC-NEXT:    cmpq %rcx, %r12444; X64-PIC-NEXT:    cmovneq %r15, %rax445; X64-PIC-NEXT:    addl (%rbx), %ebp446; X64-PIC-NEXT:    shlq $47, %rax447; X64-PIC-NEXT:    movq %r14, %rdi448; X64-PIC-NEXT:    movq %r14, %rsi449; X64-PIC-NEXT:    movl $42, %edx450; X64-PIC-NEXT:    orq %rax, %rsp451; X64-PIC-NEXT:    leaq .Lslh_ret_addr6(%rip), %r14452; X64-PIC-NEXT:    callq __sigsetjmp@PLT453; X64-PIC-NEXT:  .Lslh_ret_addr6:454; X64-PIC-NEXT:    movq %rsp, %rax455; X64-PIC-NEXT:    sarq $63, %rax456; X64-PIC-NEXT:    leaq .Lslh_ret_addr6(%rip), %rcx457; X64-PIC-NEXT:    cmpq %rcx, %r14458; X64-PIC-NEXT:    movq %rax, %rcx459; X64-PIC-NEXT:    cmovneq %r15, %rcx460; X64-PIC-NEXT:    addl (%rbx), %ebp461; X64-PIC-NEXT:    movl %ebp, %eax462; X64-PIC-NEXT:    orl %ecx, %eax463; X64-PIC-NEXT:    shlq $47, %rcx464; X64-PIC-NEXT:    orq %rcx, %rsp465; X64-PIC-NEXT:    addq $16, %rsp466; X64-PIC-NEXT:    popq %rbx467; X64-PIC-NEXT:    popq %r12468; X64-PIC-NEXT:    popq %r14469; X64-PIC-NEXT:    popq %r15470; X64-PIC-NEXT:    popq %rbp471; X64-PIC-NEXT:    retq472entry:473  %env = alloca i8, i32 16474  ; Call a normal setjmp function.475  call i32 @setjmp(ptr %env)476  %x = load i32, ptr %ptr477  ; Call something like sigsetjmp.478  call i32 @sigsetjmp(ptr %env, i32 42)479  %y = load i32, ptr %ptr480  ; Call something that might be an implementation detail expanded out of a481  ; macro that has a weird signature but still gets annotated as returning482  ; twice.483  call i32 @__sigsetjmp(ptr %env, ptr %env, i32 42)484  %z = load i32, ptr %ptr485  %s1 = add i32 %x, %y486  %s2 = add i32 %s1, %z487  ret i32 %s2488}489