| ; This test should cause the TargetMaterializeAlloca to be invoked |
| ; RUN: llc -O0 -fast-isel -fast-isel-abort=1 -verify-machineinstrs -mtriple=arm64-apple-darwin -disable-fp-elim < %s | FileCheck %s |
| |
| %struct.S1Ty = type { i64 } |
| %struct.S2Ty = type { %struct.S1Ty, %struct.S1Ty } |
| |
| define void @takeS1(%struct.S1Ty* %V) nounwind { |
| entry: |
| %V.addr = alloca %struct.S1Ty*, align 8 |
| store %struct.S1Ty* %V, %struct.S1Ty** %V.addr, align 8 |
| ret void |
| } |
| |
| define void @main() nounwind { |
| entry: |
| ; CHECK: main |
| ; CHECK: add x29, sp, #16 |
| ; CHECK: mov [[REG:x[0-9]+]], sp |
| ; CHECK-NEXT: add x0, [[REG]], #8 |
| %E = alloca %struct.S2Ty, align 4 |
| %B = getelementptr inbounds %struct.S2Ty, %struct.S2Ty* %E, i32 0, i32 1 |
| call void @takeS1(%struct.S1Ty* %B) |
| ret void |
| } |