1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -x mir -run-pass=register-coalescer,greedy -verify-machineinstrs < %s | FileCheck %s 3 4## Check that Inline Spiller cannot insert spill after last insertion point. 5 6--- | 7 ; ModuleID = 'inline-spiller' 8 source_filename = "inline-spiller.ll" 9 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 10 target triple = "x86_64-unknown-linux-gnu" 11 12 define void @hoge() gc "statepoint-example" personality ptr @widget { 13 bb: 14 %tmp = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2, i32 5, ptr nonnull elementtype(void (ptr addrspace(1), ptr addrspace(1))) @quux, i32 2, i32 0, ptr addrspace(1) nonnull null, ptr addrspace(1) undef, i32 0, i32 0) [ "deopt"(i32 0, i32 2, i32 0, i32 43, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 1, i32 6, i32 0, i32 4, i32 1, i32 0, ptr addrspace(1) null, i32 7, ptr null, i32 0, ptr addrspace(1) null, i32 7, ptr null, i32 0, ptr addrspace(1) null, i32 2, i32 4, i32 5, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null), "gc-live"(ptr addrspace(1) null, ptr addrspace(1) undef) ] 15 br label %bb1 16 17 bb1: ; preds = %bb21, %bb 18 %tmp2 = phi ptr addrspace(1) [ undef, %bb ], [ %tmp22, %bb21 ] 19 %tmp3 = phi ptr addrspace(1) [ undef, %bb ], [ %tmp23, %bb21 ] 20 %tmp4 = phi ptr addrspace(1) [ undef, %bb ], [ %tmp24, %bb21 ] 21 %tmp5 = phi ptr addrspace(1) [ undef, %bb ], [ %tmp25, %bb21 ] 22 %tmp6 = phi ptr addrspace(1) [ null, %bb ], [ %tmp26, %bb21 ] 23 %tmp7 = phi i32 [ 0, %bb ], [ %tmp13, %bb21 ] 24 %tmp8 = load atomic i32, ptr addrspace(1) undef unordered, align 8 25 %tmp9 = load atomic i32, ptr addrspace(1) %tmp2 unordered, align 4 26 %tmp10 = sub i32 %tmp8, %tmp9 27 %tmp11 = icmp slt i32 %tmp10, undef 28 %tmp12 = select i1 %tmp11, i32 %tmp10, i32 undef 29 %tmp13 = add i32 %tmp12, %tmp7 30 %tmp14 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2, i32 5, ptr nonnull elementtype(void (ptr addrspace(1), i32, i32, ptr addrspace(1), i32)) @hoge.1, i32 5, i32 0, ptr addrspace(1) %tmp4, i32 %tmp7, i32 %tmp13, ptr addrspace(1) undef, i32 %tmp9, i32 0, i32 0) [ "deopt"(i32 0, i32 2, i32 0, i32 43, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 1, i32 10, i32 0, i32 4, i32 1, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp6, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp6, i32 10, i32 5, i32 12, i32 0, i32 3, i32 1, i32 0, ptr addrspace(1) %tmp6, i32 0, ptr addrspace(1) %tmp6, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp6, i32 2, i32 11, i32 4, i32 0, i32 1, i32 0, i32 7, ptr null, i32 2, i32 15, i32 7, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 21, i32 63, i32 0, i32 9, i32 1, i32 0, ptr addrspace(1) %tmp5, i32 0, ptr addrspace(1) %tmp4, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp3, i32 3, i32 %tmp7, i32 3, i32 undef, i32 3, i32 %tmp12, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp3), "gc-live"(ptr addrspace(1) %tmp6, ptr addrspace(1) %tmp5, ptr addrspace(1) %tmp4, ptr addrspace(1) %tmp3) ] 31 %tmp15 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp14, i32 0, i32 0) ; (%tmp6, %tmp6) 32 %tmp16 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp14, i32 1, i32 1) ; (%tmp5, %tmp5) 33 %tmp17 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp14, i32 2, i32 2) ; (%tmp4, %tmp4) 34 %tmp18 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp14, i32 3, i32 3) ; (%tmp3, %tmp3) 35 %tmp19 = add i32 0, %tmp12 36 %tmp20 = icmp slt i32 %tmp19, undef 37 br i1 %tmp20, label %bb21, label %bb28 38 39 bb21: ; preds = %bb30, %bb1 40 %tmp22 = phi ptr addrspace(1) [ undef, %bb1 ], [ %tmp33, %bb30 ] 41 %tmp23 = phi ptr addrspace(1) [ %tmp18, %bb1 ], [ undef, %bb30 ] 42 %tmp24 = phi ptr addrspace(1) [ %tmp17, %bb1 ], [ undef, %bb30 ] 43 %tmp25 = phi ptr addrspace(1) [ %tmp16, %bb1 ], [ %tmp32, %bb30 ] 44 %tmp26 = phi ptr addrspace(1) [ %tmp15, %bb1 ], [ %tmp31, %bb30 ] 45 br label %bb1 46 47 bb28: ; preds = %bb1 48 %tmp29 = invoke token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 1, i32 16, ptr nonnull elementtype(void (i32, ptr addrspace(1), ptr addrspace(1), i32, i32)) @ham, i32 5, i32 0, i32 undef, ptr addrspace(1) nonnull undef, ptr addrspace(1) undef, i32 0, i32 undef, i32 0, i32 0) [ "deopt"(i32 0, i32 2, i32 0, i32 43, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 1, i32 10, i32 0, i32 4, i32 1, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp15, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp15, i32 10, i32 5, i32 12, i32 0, i32 3, i32 1, i32 0, ptr addrspace(1) %tmp15, i32 0, ptr addrspace(1) %tmp15, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp15, i32 2, i32 11, i32 4, i32 0, i32 1, i32 0, i32 7, ptr null, i32 2, i32 15, i32 7, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 21, i32 96, i32 0, i32 9, i32 1, i32 0, ptr addrspace(1) %tmp16, i32 0, ptr addrspace(1) %tmp17, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp18, i32 3, i32 %tmp13, i32 3, i32 undef, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp18, i32 8, i32 12, i32 34, i32 0, i32 3, i32 1, i32 0, ptr addrspace(1) %tmp16, i32 0, ptr addrspace(1) undef, i32 7, ptr null, i32 0, ptr addrspace(1) undef), "gc-live"(ptr addrspace(1) %tmp15, ptr addrspace(1) %tmp16, ptr addrspace(1) %tmp17, ptr addrspace(1) %tmp18, ptr addrspace(1) undef) ] 49 to label %bb30 unwind label %bb35 50 51 bb30: ; preds = %bb28 52 %tmp31 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp29, i32 0, i32 0) ; (%tmp15, %tmp15) 53 %tmp32 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp29, i32 1, i32 1) ; (%tmp16, %tmp16) 54 %tmp33 = getelementptr inbounds i8, ptr addrspace(1) %tmp32, i64 28 55 call void @barney() #2 56 br label %bb21 57 58 bb35: ; preds = %bb28 59 %tmp36 = landingpad token 60 cleanup 61 %tmp37 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp36, i32 0, i32 0) ; (%tmp15, %tmp15) 62 %tmp38 = call coldcc ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token %tmp36, i32 3, i32 3) ; (%tmp18, %tmp18) 63 %tmp39 = call token (i64, i32, ptr, i32, i32, ...) @llvm.experimental.gc.statepoint.p0(i64 2882400000, i32 0, ptr nonnull elementtype(void (i32)) @wombat, i32 1, i32 2, i32 3, i32 0, i32 0) [ "deopt"(i32 0, i32 2, i32 0, i32 43, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 1, i32 10, i32 0, i32 4, i32 1, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp37, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp37, i32 10, i32 5, i32 12, i32 0, i32 3, i32 1, i32 0, ptr addrspace(1) %tmp37, i32 0, ptr addrspace(1) %tmp37, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp37, i32 2, i32 11, i32 4, i32 0, i32 1, i32 0, i32 7, ptr null, i32 2, i32 15, i32 7, i32 0, i32 2, i32 0, i32 7, ptr null, i32 7, ptr null, i32 10, i32 21, i32 96, i32 0, i32 9, i32 1, i32 0, ptr addrspace(1) undef, i32 0, ptr addrspace(1) undef, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp38, i32 3, i32 %tmp13, i32 3, i32 undef, i32 7, ptr null, i32 7, ptr null, i32 0, ptr addrspace(1) %tmp38, i32 0, i32 12, i32 51, i32 0, i32 3, i32 0, i32 7, ptr null, i32 7, ptr null, i32 7, ptr null), "gc-live"() ] 64 unreachable 65 } 66 67 ; Function Attrs: willreturn 68 declare ptr @widget() #0 69 70 declare void @quux(ptr addrspace(1), ptr addrspace(1)) 71 72 declare void @hoge.1(ptr addrspace(1), i32, i32, ptr addrspace(1), i32) 73 74 ; Function Attrs: willreturn 75 declare void @barney() #0 76 77 declare void @ham(i32, ptr addrspace(1), ptr addrspace(1), i32, i32) 78 79 declare void @wombat(i32) 80 81 declare token @llvm.experimental.gc.statepoint.p0(i64 immarg, i32 immarg, ptr, i32 immarg, i32 immarg, ...) 82 83 ; Function Attrs: nounwind readnone 84 declare ptr addrspace(1) @llvm.experimental.gc.relocate.p1(token, i32 immarg, i32 immarg) #1 85 86 attributes #0 = { willreturn } 87 attributes #1 = { nounwind readnone } 88 attributes #2 = { nounwind } 89 90... 91--- 92name: hoge 93alignment: 16 94exposesReturnsTwice: false 95legalized: false 96regBankSelected: false 97selected: false 98failedISel: false 99tracksRegLiveness: true 100hasWinCFI: false 101registers: 102 - { id: 0, class: gr64, preferred-register: '' } 103 - { id: 1, class: gr64, preferred-register: '' } 104 - { id: 2, class: gr64, preferred-register: '' } 105 - { id: 3, class: gr64, preferred-register: '' } 106 - { id: 4, class: gr64, preferred-register: '' } 107 - { id: 5, class: gr32, preferred-register: '' } 108 - { id: 6, class: gr32, preferred-register: '' } 109 - { id: 7, class: gr64, preferred-register: '' } 110 - { id: 8, class: gr64, preferred-register: '' } 111 - { id: 9, class: gr64, preferred-register: '' } 112 - { id: 10, class: gr64, preferred-register: '' } 113 - { id: 11, class: gr64, preferred-register: '' } 114 - { id: 12, class: gr64, preferred-register: '' } 115 - { id: 13, class: gr64, preferred-register: '' } 116 - { id: 14, class: gr64, preferred-register: '' } 117 - { id: 15, class: gr64, preferred-register: '' } 118 - { id: 16, class: gr64, preferred-register: '' } 119 - { id: 17, class: gr64, preferred-register: '' } 120 - { id: 18, class: gr64, preferred-register: '' } 121 - { id: 19, class: gr64, preferred-register: '' } 122 - { id: 20, class: gr64, preferred-register: '' } 123 - { id: 21, class: gr64, preferred-register: '' } 124 - { id: 22, class: gr32, preferred-register: '' } 125 - { id: 23, class: gr64, preferred-register: '' } 126 - { id: 24, class: gr64, preferred-register: '' } 127 - { id: 25, class: gr64, preferred-register: '' } 128 - { id: 26, class: gr64, preferred-register: '' } 129 - { id: 27, class: gr64, preferred-register: '' } 130 - { id: 28, class: gr64, preferred-register: '' } 131 - { id: 29, class: gr64, preferred-register: '' } 132 - { id: 30, class: gr32, preferred-register: '' } 133 - { id: 31, class: gr64, preferred-register: '' } 134 - { id: 32, class: gr32, preferred-register: '' } 135 - { id: 33, class: gr32, preferred-register: '' } 136 - { id: 34, class: gr64, preferred-register: '' } 137 - { id: 35, class: gr64, preferred-register: '' } 138 - { id: 36, class: gr32, preferred-register: '' } 139 - { id: 37, class: gr32, preferred-register: '' } 140 - { id: 38, class: gr64, preferred-register: '' } 141 - { id: 39, class: gr64, preferred-register: '' } 142 - { id: 40, class: gr64, preferred-register: '' } 143 - { id: 41, class: gr32, preferred-register: '' } 144 - { id: 42, class: gr32, preferred-register: '' } 145 - { id: 43, class: gr64, preferred-register: '' } 146 - { id: 44, class: gr64, preferred-register: '' } 147 - { id: 45, class: gr32, preferred-register: '' } 148 - { id: 46, class: gr64, preferred-register: '' } 149 - { id: 47, class: gr64, preferred-register: '' } 150 - { id: 48, class: gr64, preferred-register: '' } 151 - { id: 49, class: gr64, preferred-register: '' } 152 - { id: 50, class: gr32, preferred-register: '' } 153 - { id: 51, class: gr64, preferred-register: '' } 154 - { id: 52, class: gr64, preferred-register: '' } 155 - { id: 53, class: gr64, preferred-register: '' } 156 - { id: 54, class: gr64, preferred-register: '' } 157 - { id: 55, class: gr64, preferred-register: '' } 158 - { id: 56, class: gr64, preferred-register: '' } 159 - { id: 57, class: gr64, preferred-register: '' } 160 - { id: 58, class: gr64, preferred-register: '' } 161 - { id: 59, class: gr32, preferred-register: '' } 162 - { id: 60, class: gr64, preferred-register: '' } 163 - { id: 61, class: gr64, preferred-register: '' } 164 - { id: 62, class: gr64, preferred-register: '' } 165 - { id: 63, class: gr64, preferred-register: '' } 166 - { id: 64, class: gr64, preferred-register: '' } 167 - { id: 65, class: gr64, preferred-register: '' } 168 - { id: 66, class: gr64_nosp, preferred-register: '' } 169liveins: [] 170frameInfo: 171 isFrameAddressTaken: false 172 isReturnAddressTaken: false 173 hasStackMap: false 174 hasPatchPoint: false 175 stackSize: 0 176 offsetAdjustment: 0 177 maxAlignment: 4 178 adjustsStack: true 179 hasCalls: true 180 stackProtector: '' 181 maxCallFrameSize: 4294967295 182 cvBytesOfCalleeSavedRegisters: 0 183 hasOpaqueSPAdjustment: false 184 hasVAStart: false 185 hasMustTailInVarArgFunc: false 186 hasTailCall: false 187 localFrameSize: 0 188 savePoint: '' 189 restorePoint: '' 190fixedStack: [] 191stack: 192 - { id: 0, name: '', type: default, offset: 0, size: 4, alignment: 4, 193 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 194 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 195 - { id: 1, name: '', type: default, offset: 0, size: 4, alignment: 4, 196 stack-id: default, callee-saved-register: '', callee-saved-restored: true, 197 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } 198callSites: [] 199debugValueSubstitutions: [] 200constants: [] 201machineFunctionInfo: {} 202body: | 203 ; CHECK-LABEL: name: hoge 204 ; CHECK: bb.0.bb: 205 ; CHECK-NEXT: successors: %bb.1(0x80000000) 206 ; CHECK-NEXT: {{ $}} 207 ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 208 ; CHECK-NEXT: undef %39.sub_32bit:gr64_with_sub_8bit = MOV32r0 implicit-def dead $eflags 209 ; CHECK-NEXT: dead $edi = MOV32r0 implicit-def dead $eflags, implicit-def $rdi 210 ; CHECK-NEXT: STATEPOINT 2, 5, 2, undef %24:gr64, $rdi, undef $rsi, 2, 0, 2, 0, 2, 37, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 6, 2, 0, 2, 4, 2, 1, 2, 0, 2, 0, 2, 7, 2, 0, 2, 0, 2, 0, 2, 7, 2, 0, 2, 0, 2, 0, 2, 2, 2, 4, 2, 5, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp 211 ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 212 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gr64 = IMPLICIT_DEF 213 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr64 = IMPLICIT_DEF 214 ; CHECK-NEXT: [[DEF2:%[0-9]+]]:gr64 = IMPLICIT_DEF 215 ; CHECK-NEXT: [[DEF3:%[0-9]+]]:gr64 = IMPLICIT_DEF 216 ; CHECK-NEXT: [[MOV32r0_:%[0-9]+]]:gr32 = MOV32r0 implicit-def dead $eflags 217 ; CHECK-NEXT: {{ $}} 218 ; CHECK-NEXT: bb.1.bb1: 219 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.4(0x40000000) 220 ; CHECK-NEXT: {{ $}} 221 ; CHECK-NEXT: undef %66.sub_32bit:gr64_nosp = COPY [[MOV32r0_]] 222 ; CHECK-NEXT: undef %65.sub_32bit:gr64_with_sub_8bit = MOV32rm undef %31:gr64, 1, $noreg, 0, $noreg :: (load unordered (s32) from `ptr addrspace(1) undef`, align 8, addrspace 1) 223 ; CHECK-NEXT: [[MOV32rm:%[0-9]+]]:gr32 = MOV32rm [[DEF]], 1, $noreg, 0, $noreg :: (load unordered (s32) from %ir.tmp2, addrspace 1) 224 ; CHECK-NEXT: %65.sub_32bit:gr64_with_sub_8bit = SUB32rr %65.sub_32bit, [[MOV32rm]], implicit-def dead $eflags 225 ; CHECK-NEXT: [[LEA64_32r:%[0-9]+]]:gr32 = LEA64_32r %65, 1, %66, 0, $noreg 226 ; CHECK-NEXT: MOV32mr %stack.0, 1, $noreg, 0, $noreg, %66.sub_32bit :: (store (s32) into %stack.0) 227 ; CHECK-NEXT: MOV32mr %stack.1, 1, $noreg, 0, $noreg, %65.sub_32bit :: (store (s32) into %stack.1) 228 ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 229 ; CHECK-NEXT: $rdi = COPY [[DEF2]] 230 ; CHECK-NEXT: $esi = COPY %66.sub_32bit 231 ; CHECK-NEXT: $edx = COPY [[LEA64_32r]] 232 ; CHECK-NEXT: $r8d = COPY [[MOV32rm]] 233 ; CHECK-NEXT: [[STATEPOINT:%[0-9]+]]:gr64, [[STATEPOINT1:%[0-9]+]]:gr64, [[STATEPOINT2:%[0-9]+]]:gr64, [[STATEPOINT3:%[0-9]+]]:gr64_with_sub_8bit = STATEPOINT 2, 5, 5, undef %35:gr64, $rdi, $esi, $edx, undef $rcx, $r8d, 2, 0, 2, 0, 2, 85, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 10, 2, 0, 2, 4, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 10, 2, 5, 2, 12, 2, 0, 2, 3, 2, 1, 2, 0, [[STATEPOINT3]], 2, 0, [[STATEPOINT3]], 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 2, 2, 11, 2, 4, 2, 0, 2, 1, 2, 0, 2, 7, 2, 0, 2, 2, 2, 15, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 21, 2, 63, 2, 0, 2, 9, 2, 1, 2, 0, [[STATEPOINT2]], 2, 0, [[STATEPOINT1]], 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT]], 2, 3, 1, 4, %stack.0, 0, 2, 3, 2, 4278124286, 2, 3, 1, 4, %stack.1, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT]], 2, 4, [[STATEPOINT]](tied-def 0), [[STATEPOINT1]](tied-def 1), [[STATEPOINT2]](tied-def 2), [[STATEPOINT3]](tied-def 3), 2, 0, 2, 4, 0, 0, 1, 1, 2, 2, 3, 3, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s32) on %stack.0), (volatile load store (s32) on %stack.1) 234 ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 235 ; CHECK-NEXT: CMP32rr %65.sub_32bit, undef %37:gr32, implicit-def $eflags 236 ; CHECK-NEXT: JCC_1 %bb.4, 13, implicit killed $eflags 237 ; CHECK-NEXT: {{ $}} 238 ; CHECK-NEXT: bb.2: 239 ; CHECK-NEXT: successors: %bb.3(0x80000000) 240 ; CHECK-NEXT: {{ $}} 241 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr64 = IMPLICIT_DEF 242 ; CHECK-NEXT: [[COPY:%[0-9]+]]:gr32 = COPY [[LEA64_32r]] 243 ; CHECK-NEXT: {{ $}} 244 ; CHECK-NEXT: bb.3.bb21: 245 ; CHECK-NEXT: successors: %bb.1(0x80000000) 246 ; CHECK-NEXT: {{ $}} 247 ; CHECK-NEXT: JMP_1 %bb.1 248 ; CHECK-NEXT: {{ $}} 249 ; CHECK-NEXT: bb.4.bb28: 250 ; CHECK-NEXT: successors: %bb.5(0x80000000), %bb.6(0x00000000) 251 ; CHECK-NEXT: {{ $}} 252 ; CHECK-NEXT: MOV32mr %stack.0, 1, $noreg, 0, $noreg, [[LEA64_32r]] :: (store (s32) into %stack.0) 253 ; CHECK-NEXT: EH_LABEL <mcsymbol .Ltmp0> 254 ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 255 ; CHECK-NEXT: $ecx = MOV32r0 implicit-def dead $eflags 256 ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gr32 = COPY [[LEA64_32r]] 257 ; CHECK-NEXT: [[STATEPOINT2]]:gr64, [[STATEPOINT3]]:gr64_with_sub_8bit, [[STATEPOINT]]:gr64, dead [[STATEPOINT1]]:gr64 = STATEPOINT 1, 16, 5, undef %47:gr64, undef $edi, undef $rsi, undef $rdx, $ecx, undef $r8d, 2, 0, 2, 0, 2, 99, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 10, 2, 0, 2, 4, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 10, 2, 5, 2, 12, 2, 0, 2, 3, 2, 1, 2, 0, [[STATEPOINT3]], 2, 0, [[STATEPOINT3]], 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 2, 2, 11, 2, 4, 2, 0, 2, 1, 2, 0, 2, 7, 2, 0, 2, 2, 2, 15, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 21, 2, 96, 2, 0, 2, 9, 2, 1, 2, 0, [[STATEPOINT2]], 2, 0, [[STATEPOINT1]], 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT]], 2, 3, 1, 4, %stack.0, 0, 2, 3, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT]], 2, 8, 2, 12, 2, 34, 2, 0, 2, 3, 2, 1, 2, 0, [[STATEPOINT2]], 2, 0, 2, 4278124286, 2, 7, 2, 0, 2, 0, 2, 4278124286, 2, 5, [[STATEPOINT2]](tied-def 0), [[STATEPOINT3]](tied-def 1), [[STATEPOINT]](tied-def 2), [[STATEPOINT1]](tied-def 3), 2, 4278124286, 2, 0, 2, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s32) on %stack.0) 258 ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 259 ; CHECK-NEXT: EH_LABEL <mcsymbol .Ltmp1> 260 ; CHECK-NEXT: JMP_1 %bb.5 261 ; CHECK-NEXT: {{ $}} 262 ; CHECK-NEXT: bb.5.bb30: 263 ; CHECK-NEXT: successors: %bb.3(0x80000000) 264 ; CHECK-NEXT: {{ $}} 265 ; CHECK-NEXT: [[COPY2:%[0-9]+]]:gr64 = COPY [[STATEPOINT2]] 266 ; CHECK-NEXT: [[ADD64ri8_:%[0-9]+]]:gr64 = nuw ADD64ri8 [[ADD64ri8_]], 28, implicit-def dead $eflags 267 ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 268 ; CHECK-NEXT: CALL64pcrel32 target-flags(x86-plt) @barney, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp 269 ; CHECK-NEXT: [[COPY3:%[0-9]+]]:gr64 = COPY [[ADD64ri8_]] 270 ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 271 ; CHECK-NEXT: [[DEF:%[0-9]+]]:gr64 = IMPLICIT_DEF 272 ; CHECK-NEXT: [[DEF1:%[0-9]+]]:gr64 = IMPLICIT_DEF 273 ; CHECK-NEXT: JMP_1 %bb.3 274 ; CHECK-NEXT: {{ $}} 275 ; CHECK-NEXT: bb.6.bb35 (landing-pad): 276 ; CHECK-NEXT: liveins: $rax, $rdx 277 ; CHECK-NEXT: {{ $}} 278 ; CHECK-NEXT: EH_LABEL <mcsymbol .Ltmp2> 279 ; CHECK-NEXT: ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 280 ; CHECK-NEXT: $edi = MOV32ri 3 281 ; CHECK-NEXT: dead [[STATEPOINT3]]:gr64_with_sub_8bit, dead [[DEF]]:gr64 = STATEPOINT 2882400000, 0, 1, target-flags(x86-plt) @wombat, $edi, 2, 0, 2, 2, 2, 97, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 10, 2, 0, 2, 4, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 10, 2, 5, 2, 12, 2, 0, 2, 3, 2, 1, 2, 0, [[STATEPOINT3]], 2, 0, [[STATEPOINT3]], 2, 7, 2, 0, 2, 0, [[STATEPOINT3]], 2, 2, 2, 11, 2, 4, 2, 0, 2, 1, 2, 0, 2, 7, 2, 0, 2, 2, 2, 15, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 21, 2, 96, 2, 0, 2, 9, 2, 1, 2, 0, 2, 4278124286, 2, 0, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[DEF]], 2, 3, [[COPY1]], 2, 3, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, [[DEF]], 2, 0, 2, 12, 2, 51, 2, 0, 2, 3, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, [[STATEPOINT3]](tied-def 0), 2, 4278124286, [[DEF]](tied-def 1), 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_64, implicit-def $rsp, implicit-def $ssp 282 ; CHECK-NEXT: ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 283 bb.0.bb: 284 successors: %bb.1(0x80000000) 285 286 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 287 %22:gr32 = MOV32r0 implicit-def dead $eflags 288 %21:gr64 = SUBREG_TO_REG 0, %22, %subreg.sub_32bit 289 $rdi = COPY %21 290 STATEPOINT 2, 5, 2, undef %24:gr64, killed $rdi, undef $rsi, 2, 0, 2, 0, 2, 37, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 6, 2, 0, 2, 4, 2, 1, 2, 0, 2, 0, 2, 7, 2, 0, 2, 0, 2, 0, 2, 7, 2, 0, 2, 0, 2, 0, 2, 2, 2, 4, 2, 5, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 1, 2, 0, 2, 0, 2, 1, 0, 0, csr_64, implicit-def $rsp, implicit-def $ssp 291 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 292 %54:gr64 = IMPLICIT_DEF 293 %55:gr64 = IMPLICIT_DEF 294 %56:gr64 = IMPLICIT_DEF 295 %57:gr64 = IMPLICIT_DEF 296 %58:gr64 = COPY killed %21 297 %59:gr32 = COPY %22 298 299 bb.1.bb1: 300 successors: %bb.6(0x40000000), %bb.3(0x40000000) 301 302 %5:gr32 = COPY killed %59 303 %4:gr64 = COPY killed %58 304 %3:gr64 = COPY killed %57 305 %2:gr64 = COPY killed %56 306 %1:gr64 = COPY killed %55 307 %0:gr64 = COPY killed %54 308 %30:gr32 = MOV32rm undef %31:gr64, 1, $noreg, 0, $noreg :: (load unordered (s32) from `ptr addrspace(1) undef`, align 8, addrspace 1) 309 %32:gr32 = MOV32rm killed %0, 1, $noreg, 0, $noreg :: (load unordered (s32) from %ir.tmp2, addrspace 1) 310 %33:gr32 = COPY killed %30 311 %33:gr32 = SUB32rr %33, %32, implicit-def dead $eflags 312 undef %65.sub_32bit:gr64 = COPY %33 313 undef %66.sub_32bit:gr64_nosp = COPY %5 314 %6:gr32 = LEA64_32r killed %65, 1, killed %66, 0, $noreg 315 MOV32mr %stack.0, 1, $noreg, 0, $noreg, %5 :: (store (s32) into %stack.0) 316 MOV32mr %stack.1, 1, $noreg, 0, $noreg, %33 :: (store (s32) into %stack.1) 317 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 318 $rdi = COPY %2 319 $esi = COPY killed %5 320 $edx = COPY %6 321 $r8d = COPY killed %32 322 %26:gr64 = COPY killed %2 323 %28:gr64 = COPY killed %4 324 %25:gr64 = COPY killed %1 325 %27:gr64 = COPY killed %3 326 %25:gr64, %26:gr64, %27:gr64, %28:gr64 = STATEPOINT 2, 5, 5, undef %35:gr64, killed $rdi, killed $esi, killed $edx, undef $rcx, killed $r8d, 2, 0, 2, 0, 2, 85, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 10, 2, 0, 2, 4, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %28, 2, 7, 2, 0, 2, 0, %28, 2, 10, 2, 5, 2, 12, 2, 0, 2, 3, 2, 1, 2, 0, %28, 2, 0, %28, 2, 7, 2, 0, 2, 0, %28, 2, 2, 2, 11, 2, 4, 2, 0, 2, 1, 2, 0, 2, 7, 2, 0, 2, 2, 2, 15, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 21, 2, 63, 2, 0, 2, 9, 2, 1, 2, 0, %27, 2, 0, %26, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %25, 2, 3, 1, 4, %stack.0, 0, 2, 3, 2, 4278124286, 2, 3, 1, 4, %stack.1, 0, 2, 7, 2, 0, 2, 0, %25, 2, 4, %25(tied-def 0), %26(tied-def 1), %27(tied-def 2), %28(tied-def 3), 2, 0, 2, 4, 0, 0, 1, 1, 2, 2, 3, 3, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s32) on %stack.0), (volatile load store (s32) on %stack.1) 327 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 328 CMP32rr killed %33, undef %37:gr32, implicit-def $eflags 329 JCC_1 %bb.3, 13, implicit killed $eflags 330 331 bb.6: 332 successors: %bb.2(0x80000000) 333 334 %60:gr64 = IMPLICIT_DEF 335 %61:gr64 = COPY killed %25 336 %62:gr64 = COPY killed %26 337 %63:gr64 = COPY killed %27 338 %64:gr64 = COPY killed %28 339 340 bb.2.bb21: 341 successors: %bb.1(0x80000000) 342 343 %15:gr64 = COPY killed %64 344 %14:gr64 = COPY killed %63 345 %13:gr64 = COPY killed %62 346 %12:gr64 = COPY killed %61 347 %11:gr64 = COPY killed %60 348 %54:gr64 = COPY killed %11 349 %55:gr64 = COPY killed %12 350 %56:gr64 = COPY killed %13 351 %57:gr64 = COPY killed %14 352 %58:gr64 = COPY killed %15 353 %59:gr32 = COPY killed %6 354 JMP_1 %bb.1 355 356 bb.3.bb28: 357 successors: %bb.4(0x80000000), %bb.5(0x00000000) 358 359 MOV32mr %stack.0, 1, $noreg, 0, $noreg, %6 :: (store (s32) into %stack.0) 360 EH_LABEL <mcsymbol .Ltmp0> 361 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 362 $ecx = COPY %22 363 %46:gr64 = COPY killed %26 364 %39:gr64 = COPY killed %28 365 %40:gr64 = COPY killed %25 366 %38:gr64 = COPY killed %27 367 %38:gr64, %39:gr64, %40:gr64, dead %46:gr64 = STATEPOINT 1, 16, 5, undef %47:gr64, undef $edi, undef $rsi, undef $rdx, killed $ecx, undef $r8d, 2, 0, 2, 0, 2, 99, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 10, 2, 0, 2, 4, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %39, 2, 7, 2, 0, 2, 0, %39, 2, 10, 2, 5, 2, 12, 2, 0, 2, 3, 2, 1, 2, 0, %39, 2, 0, %39, 2, 7, 2, 0, 2, 0, %39, 2, 2, 2, 11, 2, 4, 2, 0, 2, 1, 2, 0, 2, 7, 2, 0, 2, 2, 2, 15, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 21, 2, 96, 2, 0, 2, 9, 2, 1, 2, 0, %38, 2, 0, %46, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %40, 2, 3, 1, 4, %stack.0, 0, 2, 3, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %40, 2, 8, 2, 12, 2, 34, 2, 0, 2, 3, 2, 1, 2, 0, %38, 2, 0, 2, 4278124286, 2, 7, 2, 0, 2, 0, 2, 4278124286, 2, 5, %38(tied-def 0), %39(tied-def 1), %40(tied-def 2), %46(tied-def 3), 2, 4278124286, 2, 0, 2, 5, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, csr_64, implicit-def $rsp, implicit-def $ssp :: (volatile load store (s32) on %stack.0) 368 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 369 EH_LABEL <mcsymbol .Ltmp1> 370 JMP_1 %bb.4 371 372 bb.4.bb30: 373 successors: %bb.2(0x80000000) 374 375 %16:gr64 = COPY killed %39 376 %17:gr64 = COPY %38 377 %18:gr64 = COPY killed %38 378 %18:gr64 = nuw ADD64ri8 %18, 28, implicit-def dead $eflags 379 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 380 CALL64pcrel32 target-flags(x86-plt) @barney, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp 381 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 382 %60:gr64 = COPY killed %18 383 %61:gr64 = IMPLICIT_DEF 384 %62:gr64 = IMPLICIT_DEF 385 %63:gr64 = COPY killed %17 386 %64:gr64 = COPY killed %16 387 JMP_1 %bb.2 388 389 bb.5.bb35 (landing-pad): 390 liveins: $rax, $rdx 391 392 EH_LABEL <mcsymbol .Ltmp2> 393 ADJCALLSTACKDOWN64 0, 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 394 %50:gr32 = MOV32ri 3 395 $edi = COPY killed %50 396 %52:gr64 = COPY killed %40 397 %51:gr64 = COPY killed %39 398 dead %51:gr64, dead %52:gr64 = STATEPOINT 2882400000, 0, 1, target-flags(x86-plt) @wombat, killed $edi, 2, 0, 2, 2, 2, 97, 2, 0, 2, 2, 2, 0, 2, 43, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 1, 2, 10, 2, 0, 2, 4, 2, 1, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %51, 2, 7, 2, 0, 2, 0, %51, 2, 10, 2, 5, 2, 12, 2, 0, 2, 3, 2, 1, 2, 0, %51, 2, 0, %51, 2, 7, 2, 0, 2, 0, %51, 2, 2, 2, 11, 2, 4, 2, 0, 2, 1, 2, 0, 2, 7, 2, 0, 2, 2, 2, 15, 2, 7, 2, 0, 2, 2, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 10, 2, 21, 2, 96, 2, 0, 2, 9, 2, 1, 2, 0, 2, 4278124286, 2, 0, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %52, 2, 3, killed %6, 2, 3, 2, 4278124286, 2, 7, 2, 0, 2, 7, 2, 0, 2, 0, %52, 2, 0, 2, 12, 2, 51, 2, 0, 2, 3, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 7, 2, 0, 2, 3, %51(tied-def 0), 2, 4278124286, %52(tied-def 1), 2, 0, 2, 3, 0, 0, 1, 1, 2, 2, csr_64, implicit-def $rsp, implicit-def $ssp 399 ADJCALLSTACKUP64 0, 0, implicit-def dead $rsp, implicit-def dead $eflags, implicit-def dead $ssp, implicit $rsp, implicit $ssp 400 401... 402