brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 4242343 Raw
116 lines · plain
1; RUN: llc -mtriple=arm-linux-gnueabihf < %s | FileCheck %s2 3%struct4bytes = type { i32 }4%struct8bytes8align = type { i64 }5%struct12bytes = type { i32, i32, i32 }6 7declare void @useIntPtr(ptr)8declare void @useLong(i64)9declare void @usePtr(ptr)10 11; a -> r012; b -> r1..r313; c -> sp+0..sp+714define void @foo1(i32 %a, ptr byval(%struct12bytes) %b, i64 %c) {15; CHECK-LABEL: foo116; CHECK: sub  sp, sp, #1217; CHECK: push  {r11, lr}18; CHECK: sub sp, sp, #419; CHECK: add  [[SCRATCH:r[0-9]+]], sp, #1220; CHECK: stm  [[SCRATCH]], {r1, r2, r3}21; CHECK: ldr  r0, [sp, #24]22; CHECK: ldr  r1, [sp, #28]23; CHECK: bl  useLong24; CHECK: pop  {r11, lr}25; CHECK: add  sp, sp, #1226 27  call void @useLong(i64 %c)28  ret void29}30 31; a -> r032; b -> r2..r333define void @foo2(i32 %a, ptr byval(%struct8bytes8align) %b) {34; CHECK-LABEL: foo235; CHECK: sub  sp, sp, #836; CHECK: push  {r11, lr}37; CHECK: add  r0, sp, #838; CHECK-DAG: str  r3, [sp, #12]39; CHECK-DAG: str  r2, [sp, #8]40; CHECK: bl   usePtr41; CHECK: pop  {r11, lr}42; CHECK: add  sp, sp, #843 44  call void @usePtr(ptr %b)45  ret void46}47 48; a -> r0..r149; b -> r250define void @foo3(ptr byval(%struct8bytes8align) %a, ptr byval(%struct4bytes) %b) {51; CHECK-LABEL: foo352; CHECK: sub  sp, sp, #1653; CHECK: push  {r11, lr}54; CHECK: add  [[SCRATCH:r[0-9]+]], sp, #855; CHECK: stm  [[SCRATCH]], {r0, r1, r2}56; CHECK: add  r0, sp, #857; CHECK: bl   usePtr58; CHECK: pop  {r11, lr}59; CHECK: add  sp, sp, #1660 61  call void @usePtr(ptr %a)62  ret void63}64 65; a -> r066; b -> r2..r367define void @foo4(ptr byval(%struct4bytes) %a, ptr byval(%struct8bytes8align) %b) {68; CHECK-LABEL: foo469; CHECK: sub     sp, sp, #1670; CHECK: push    {r11, lr}71; CHECK: str     r0, [sp, #8]72; CHECK: add     r0, sp, #1673; CHECK-DAG: str     r3, [sp, #20]74; CHECK-DAG: str     r2, [sp, #16]75; CHECK: bl      usePtr76; CHECK: pop     {r11, lr}77; CHECK: add     sp, sp, #1678; CHECK: mov     pc, lr79 80  call void @usePtr(ptr %b)81  ret void82}83 84; a -> r0..r185; b -> r286; c -> r387define void @foo5(ptr byval(%struct8bytes8align) %a, ptr byval(%struct4bytes) %b, ptr byval(%struct4bytes) %c) {88; CHECK-LABEL: foo589; CHECK: sub     sp, sp, #1690; CHECK: push    {r11, lr}91; CHECK: add     [[SCRATCH:r[0-9]+]], sp, #892; CHECK: stm     [[SCRATCH]], {r0, r1, r2, r3}93; CHECK: add     r0, sp, #894; CHECK: bl      usePtr95; CHECK: pop     {r11, lr}96; CHECK: add     sp, sp, #1697; CHECK: mov     pc, lr98 99  call void @usePtr(ptr %a)100  ret void101}102 103; a..c -> r0..r2104; d -> sp+0..sp+7105define void @foo6(i32 %a, i32 %b, i32 %c, ptr byval(%struct8bytes8align) %d) {106; CHECK-LABEL: foo6107; CHECK: push {r11, lr}108; CHECK: add  r0, sp, #8109; CHECK: bl   usePtr110; CHECK: pop  {r11, lr}111; CHECK: mov  pc, lr112 113  call void @usePtr(ptr %d)114  ret void115}116