147 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -o - %s -fixup-allow-gcptr-in-csr=false -run-pass fixup-statepoint-caller-saved | FileCheck %s3# RUN: llc -o - %s -fixup-allow-gcptr-in-csr=false -passes='fixup-statepoint-caller-saved' | FileCheck %s4 5--- |6 ; ModuleID = 'test/CodeGen/X86/statepoint-fixup-invoke.mir'7 source_filename = "test/CodeGen/X86/statepoint-fixup-invoke.mir"8 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"9 target triple = "x86_64-pc-linux-gnu"10 11 declare void @some_call(ptr addrspace(1))12 13 declare i32 @personality_function()14 15 define ptr addrspace(1) @test_basic(ptr addrspace(1) %obj, ptr addrspace(1) %obj1) gc "statepoint-example" personality ptr @personality_function {16 entry:17 %0 = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 0, i32 0, ptr elementtype(void (ptr addrspace(1))) @some_call, i32 1, i32 0, ptr addrspace(1) %obj, i32 0, i32 0) [ "gc-live"(ptr addrspace(1) %obj, ptr addrspace(1) %obj1), "deopt"(i32 0, i32 -1, i32 0, i32 0, i32 0) ]18 to label %invoke_safepoint_normal_dest unwind label %exceptional_return19 20 invoke_safepoint_normal_dest: ; preds = %entry21 %obj.relocated = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %0, i32 0, i32 0) ; (%obj, %obj)22 %obj1.relocated = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %0, i32 1, i32 1) ; (%obj1, %obj1)23 br label %normal_return24 25 normal_return: ; preds = %invoke_safepoint_normal_dest26 ret ptr addrspace(1) %obj.relocated27 28 exceptional_return: ; preds = %entry29 %landing_pad = landingpad token30 cleanup31 %obj.relocated1 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %landing_pad, i32 0, i32 0) ; (%obj, %obj)32 %obj1.relocated1 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %landing_pad, i32 1, i32 1) ; (%obj1, %obj1)33 ret ptr addrspace(1) %obj1.relocated134 }35 36 declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...)37 38 ; Function Attrs: nounwind readonly39 declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32 immarg, i32 immarg) #040 41 ; Function Attrs: nounwind42 declare void @llvm.stackprotector(ptr, ptr) #143 44 attributes #0 = { nounwind readonly }45 attributes #1 = { nounwind }46 47...48---49name: test_basic50alignment: 1651exposesReturnsTwice: false52legalized: false53regBankSelected: false54selected: false55failedISel: false56tracksRegLiveness: true57hasWinCFI: false58registers: []59liveins:60 - { reg: '$rdi', virtual-reg: '' }61 - { reg: '$rsi', virtual-reg: '' }62frameInfo:63 isFrameAddressTaken: false64 isReturnAddressTaken: false65 hasStackMap: false66 hasPatchPoint: false67 stackSize: 068 offsetAdjustment: 069 maxAlignment: 170 adjustsStack: false71 hasCalls: true72 stackProtector: ''73 maxCallFrameSize: 429496729574 cvBytesOfCalleeSavedRegisters: 075 hasOpaqueSPAdjustment: false76 hasVAStart: false77 hasMustTailInVarArgFunc: false78 localFrameSize: 079 savePoint: []80 restorePoint: []81fixedStack: []82stack: []83callSites: []84constants: []85machineFunctionInfo: {}86body: |87 ; CHECK-LABEL: name: test_basic88 ; CHECK: bb.0.entry:89 ; CHECK: successors: %bb.1(0x7ffff800), %bb.3(0x00000800)90 ; CHECK: liveins: $rdi, $rsi91 ; CHECK-DAG: MOV64mr %stack.0, 1, $noreg, 0, $noreg, $rsi :: (store (s64) into %stack.0)92 ; CHECK-DAG: MOV64mr %stack.1, 1, $noreg, 0, $noreg, $rdi :: (store (s64) into %stack.1)93 ; CHECK: EH_LABEL <mcsymbol .Ltmp0>94 ; CHECK: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp95 ; CHECK: STATEPOINT 0, 0, 1, @some_call, $rdi, 2, 0, 2, 0, 2, 5, 2, 0, 2, -1, 2, 0, 2, 0, 2, 0, 2, 2, 1, 8, %stack.0, 0, 1, 8, %stack.1, 0, 2, 0, 2, 2, 0, 0, 1, 1, csr_64, implicit-def $rsp, implicit-def $ssp :: (load store (s64) on %stack.0), (load store (s64) on %stack.1)96 ; CHECK-DAG: $r14 = MOV64rm %stack.0, 1, $noreg, 0, $noreg :: (load (s64) from %stack.0)97 ; CHECK-DAG: $rbx = MOV64rm %stack.1, 1, $noreg, 0, $noreg :: (load (s64) from %stack.1)98 ; CHECK: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp99 ; CHECK: EH_LABEL <mcsymbol .Ltmp1>100 ; CHECK: JMP_1 %bb.1101 ; CHECK: bb.1.invoke_safepoint_normal_dest:102 ; CHECK: successors: %bb.2(0x80000000)103 ; CHECK: liveins: $rbx104 ; CHECK: bb.2.normal_return:105 ; CHECK: liveins: $rbx106 ; CHECK: $rax = COPY killed renamable $rbx107 ; CHECK: RET 0, $rax108 ; CHECK: bb.3.exceptional_return (landing-pad):109 ; CHECK: liveins: $rax, $rdx, $r14110 ; CHECK: EH_LABEL <mcsymbol .Ltmp2>111 ; CHECK-DAG: $r14 = MOV64rm %stack.0, 1, $noreg, 0, $noreg :: (load (s64) from %stack.0)112 ; CHECK-DAG: $rbx = MOV64rm %stack.1, 1, $noreg, 0, $noreg :: (load (s64) from %stack.1)113 ; CHECK: $rax = COPY killed renamable $r14114 ; CHECK: RET 0, $rax115 bb.0.entry:116 successors: %bb.1(0x7ffff800), %bb.3(0x00000800)117 liveins: $rdi, $rsi118 119 renamable $r14 = COPY $rsi120 renamable $rbx = COPY $rdi121 EH_LABEL <mcsymbol .Ltmp0>122 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp123 renamable $r14, renamable $rbx = STATEPOINT 0, 0, 1, @some_call, $rdi, 2, 0, 2, 0, 2, 5, 2, 0, 2, -1, 2, 0, 2, 0, 2, 0, 2, 2, killed renamable $r14(tied-def 0), killed renamable $rbx(tied-def 1), 2, 0, 2, 2, 0, 0, 1, 1, csr_64, implicit-def $rsp, implicit-def $ssp124 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp125 EH_LABEL <mcsymbol .Ltmp1>126 JMP_1 %bb.1127 128 bb.1.invoke_safepoint_normal_dest:129 successors: %bb.2(0x80000000)130 liveins: $rbx131 132 133 bb.2.normal_return:134 liveins: $rbx135 136 $rax = COPY killed renamable $rbx137 RET 0, $rax138 139 bb.3.exceptional_return (landing-pad):140 liveins: $rax, $rdx, $r14141 142 EH_LABEL <mcsymbol .Ltmp2>143 $rax = COPY killed renamable $r14144 RET 0, $rax145 146...147