brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · f8059d0 Raw
83 lines · plain
1; RUN: llc < %s -mtriple=armv7-apple-ios6.0 | FileCheck %s2; RUN: llc < %s -mtriple=thumbv7-apple-ios6.0 | FileCheck %s3; RUN: llc < %s -mtriple=armv5-none-linux-gnueabi | FileCheck %s -check-prefix=NOMOVT4 5; NOMOVT-NOT: movt6 7; rdar://98778668%struct.SmallStruct = type { i32, [8 x i32], [37 x i8] }9%struct.LargeStruct = type { i32, [1001 x i8], [300 x i32] }10 11define i32 @f() nounwind ssp {12entry:13; CHECK-LABEL: f:14; CHECK: ldr15; CHECK: str16; CHECK-NOT:bne17  %st = alloca %struct.SmallStruct, align 418  %call = call i32 @e1(ptr byval(%struct.SmallStruct) %st)19  ret i32 020}21 22; Generate a loop for large struct byval23define i32 @g() nounwind ssp {24entry:25; CHECK-LABEL: g:26; CHECK: ldr27; CHECK: sub28; CHECK: str29; CHECK: bne30  %st = alloca %struct.LargeStruct, align 431  %call = call i32 @e2(ptr byval(%struct.LargeStruct) %st)32  ret i32 033}34 35; Generate a loop using NEON instructions36define i32 @h() nounwind ssp {37entry:38; CHECK-LABEL: h:39; CHECK: vld140; CHECK: sub41; CHECK: vst142; CHECK: bne43  %st = alloca %struct.LargeStruct, align 1644  %call = call i32 @e3(ptr byval(%struct.LargeStruct) align 16 %st)45  ret i32 046}47 48declare i32 @e1(ptr nocapture byval(%struct.SmallStruct) %in) nounwind49declare i32 @e2(ptr nocapture byval(%struct.LargeStruct) %in) nounwind50declare i32 @e3(ptr nocapture byval(%struct.LargeStruct) align 16 %in) nounwind51 52; We can do tail call here since s is in the incoming argument area.53define void @f5(i32 %a, i32 %b, i32 %c, i32 %d, ptr nocapture byval(%struct.SmallStruct) %s) nounwind optsize {54; CHECK-LABEL: f555; CHECK: b{{(\.w)?}} _consumestruct56entry:57  tail call void @consumestruct(ptr %s, i32 80) optsize58  ret void59}60 61define void @f6(i32 %a, i32 %b, i32 %c, i32 %d, ptr nocapture byval(%struct.SmallStruct) %s) nounwind optsize {62; CHECK-LABEL: f663; CHECK: b{{(\.w)?}} _consumestruct64entry:65  tail call void @consumestruct(ptr %s, i32 80) optsize66  ret void67}68 69declare void @consumestruct(ptr nocapture %structp, i32 %structsize) nounwind70 71; PR1730972%struct.I.8 = type { [10 x i32], [3 x i8] }73 74declare void @use_I(ptr byval(%struct.I.8))75define void @test_I_16() {76; CHECK-LABEL: test_I_1677; CHECK: ldrb78; CHECK: strb79entry:80  call void @use_I(ptr byval(%struct.I.8) align 16 undef)81  ret void82}83