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 | be10421c17f171e146a7dae1f1bfba6fb8abcab1 (patch) | |
tree | 8bad40636d1a1c06e817f602ce267546e20d0d9a /llvm/test | |
parent | 8b0737fe280edd21dd730391ab6db878ecc057ae (diff) | |
download | bcm5719-llvm-be10421c17f171e146a7dae1f1bfba6fb8abcab1.tar.gz bcm5719-llvm-be10421c17f171e146a7dae1f1bfba6fb8abcab1.zip |
ARM: add testing case for struct byval
rdar://9877866
llvm-svn: 157876
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/ARM/struct_byval.ll | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/struct_byval.ll b/llvm/test/CodeGen/ARM/struct_byval.ll new file mode 100644 index 00000000000..0c2f7398cb7 --- /dev/null +++ b/llvm/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 |