diff options
author | Manman Ren <mren@apple.com> | 2012-06-02 05:37:44 +0000 |
---|---|---|
committer | Manman Ren <mren@apple.com> | 2012-06-02 05:37:44 +0000 |
commit | be4258adc5724e209d7a73f310fef44764971dec (patch) | |
tree | 4b77703eaadf2a5b35b3e1a55f99d6c261baec77 | |
parent | 3309dbab30f4f49b217cbbf9e995e00d4aa5a7bb (diff) |
ARM: add testing case for struct byval
rdar://9877866
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157876 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | test/CodeGen/ARM/struct_byval.ll | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/test/CodeGen/ARM/struct_byval.ll b/test/CodeGen/ARM/struct_byval.ll new file mode 100644 index 0000000000..0c2f7398cb --- /dev/null +++ b/test/CodeGen/ARM/struct_byval.ll @@ -0,0 +1,32 @@ +; RUN: llc < %s -mtriple=armv7-apple-ios6.0 | FileCheck %s + +; rdar://9877866 +%struct.SmallStruct = type { i32, [8 x i32], [37 x i8] } +%struct.LargeStruct = type { i32, [1001 x i8], [300 x i32] } + +define i32 @f() nounwind ssp { +entry: +; CHECK: f: +; CHECK: ldr +; CHECK: str +; CHECK-NOT:bne + %st = alloca %struct.SmallStruct, align 4 + %call = call i32 @e1(%struct.SmallStruct* byval %st) + ret i32 0 +} + +; Generate a loop for large struct byval +define i32 @g() nounwind ssp { +entry: +; CHECK: g: +; CHECK: ldr +; CHECK: sub +; CHECK: str +; CHECK: bne + %st = alloca %struct.LargeStruct, align 4 + %call = call i32 @e2(%struct.LargeStruct* byval %st) + ret i32 0 +} + +declare i32 @e1(%struct.SmallStruct* nocapture byval %in) nounwind +declare i32 @e2(%struct.LargeStruct* nocapture byval %in) nounwind |