|
44 | 44 | entry: |
45 | 45 | ret i64 0 |
46 | 46 | } |
| 47 | + |
| 48 | + define i64 @blended_stack_address(i64 %a) { |
| 49 | + entry: |
| 50 | + %local_var = alloca ptr, align 8 |
| 51 | + ret i64 0 |
| 52 | + } |
47 | 53 | ... |
48 | 54 | --- |
49 | 55 | name: movk_correct_blend |
@@ -203,3 +209,35 @@ body: | |
203 | 209 | $x0 = COPY %3 |
204 | 210 | RET_ReallyLR implicit $x0 |
205 | 211 | ... |
| 212 | + |
| 213 | +# Make sure non-register operands are handled correctly. |
| 214 | +--- |
| 215 | +name: blended_stack_address |
| 216 | +tracksRegLiveness: true |
| 217 | +stack: |
| 218 | + - { id: 0, name: local_var, type: default, offset: 0, size: 8, alignment: 8, |
| 219 | + stack-id: default, callee-saved-register: '', callee-saved-restored: true, |
| 220 | + debug-info-variable: '', debug-info-expression: '', debug-info-location: '' } |
| 221 | +body: | |
| 222 | + bb.0.entry: |
| 223 | + liveins: $x0 |
| 224 | +
|
| 225 | + ; CHECK-LABEL: name: blended_stack_address |
| 226 | + ; CHECK: liveins: $x0 |
| 227 | + ; CHECK-NEXT: {{ $}} |
| 228 | + ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0 |
| 229 | + ; CHECK-NEXT: LIFETIME_START %stack.0.local_var |
| 230 | + ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64common_and_gpr64noip = ADDXri %stack.0.local_var, 0, 0 |
| 231 | + ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64noip = COPY [[ADDXri]] |
| 232 | + ; CHECK-NEXT: [[PAC:%[0-9]+]]:gpr64 = PAC [[COPY]], 2, 0, killed [[COPY1]], implicit-def dead $x16, implicit-def dead $x17 |
| 233 | + ; CHECK-NEXT: LIFETIME_END %stack.0.local_var |
| 234 | + ; CHECK-NEXT: $x0 = COPY [[PAC]] |
| 235 | + ; CHECK-NEXT: RET_ReallyLR implicit $x0 |
| 236 | + %0:gpr64 = COPY $x0 |
| 237 | + LIFETIME_START %stack.0.local_var |
| 238 | + %1:gpr64common_and_gpr64noip = ADDXri %stack.0.local_var, 0, 0 |
| 239 | + %2:gpr64 = PAC %0, 2, 0, killed %1, implicit-def dead $x16, implicit-def dead $x17 |
| 240 | + LIFETIME_END %stack.0.local_var |
| 241 | + $x0 = COPY %2 |
| 242 | + RET_ReallyLR implicit $x0 |
| 243 | +... |
0 commit comments