1; RUN: llc < %s -mtriple=armv7-apple-ios6.0 | FileCheck %s 2 3; rdar://9877866 4%struct.SmallStruct = type { i32, [8 x i32], [37 x i8] } 5%struct.LargeStruct = type { i32, [1001 x i8], [300 x i32] } 6 7define i32 @f() nounwind ssp { 8entry: 9; CHECK: f: 10; CHECK: ldr 11; CHECK: str 12; CHECK-NOT:bne 13 %st = alloca %struct.SmallStruct, align 4 14 %call = call i32 @e1(%struct.SmallStruct* byval %st) 15 ret i32 0 16} 17 18; Generate a loop for large struct byval 19define i32 @g() nounwind ssp { 20entry: 21; CHECK: g: 22; CHECK: ldr 23; CHECK: sub 24; CHECK: str 25; CHECK: bne 26 %st = alloca %struct.LargeStruct, align 4 27 %call = call i32 @e2(%struct.LargeStruct* byval %st) 28 ret i32 0 29} 30 31; Generate a loop using NEON instructions 32define i32 @h() nounwind ssp { 33entry: 34; CHECK: h: 35; CHECK: vld1 36; CHECK: sub 37; CHECK: vst1 38; CHECK: bne 39 %st = alloca %struct.LargeStruct, align 16 40 %call = call i32 @e3(%struct.LargeStruct* byval align 16 %st) 41 ret i32 0 42} 43 44declare i32 @e1(%struct.SmallStruct* nocapture byval %in) nounwind 45declare i32 @e2(%struct.LargeStruct* nocapture byval %in) nounwind 46declare i32 @e3(%struct.LargeStruct* nocapture byval align 16 %in) nounwind 47