diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/CodeGen/ARM/2013-04-05-Small-ByVal-Structs-PR15293.ll | 16 | ||||
-rw-r--r-- | test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding.ll | 31 | ||||
-rw-r--r-- | test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding2.ll | 25 |
3 files changed, 64 insertions, 8 deletions
diff --git a/test/CodeGen/ARM/2013-04-05-Small-ByVal-Structs-PR15293.ll b/test/CodeGen/ARM/2013-04-05-Small-ByVal-Structs-PR15293.ll index 4a5ca9d..80b9d28 100644 --- a/test/CodeGen/ARM/2013-04-05-Small-ByVal-Structs-PR15293.ll +++ b/test/CodeGen/ARM/2013-04-05-Small-ByVal-Structs-PR15293.ll @@ -4,24 +4,24 @@ ;CHECK: foo: ;CHECK: sub sp, sp, #8 ;CHECK: push {r11, lr} -;CHECK: str r0, [sp, #12] -;CHECK: add r0, sp, #12 +;CHECK: str r0, [sp, #8] +;CHECK: add r0, sp, #8 ;CHECK: bl fooUseParam ;CHECK: pop {r11, lr} ;CHECK: add sp, sp, #8 ;CHECK: mov pc, lr ;CHECK: foo2: -;CHECK: sub sp, sp, #16 +;CHECK: sub sp, sp, #8 ;CHECK: push {r11, lr} -;CHECK: str r0, [sp, #12] -;CHECK: add r0, sp, #12 -;CHECK: str r2, [sp, #16] +;CHECK: str r0, [sp, #8] +;CHECK: add r0, sp, #8 +;CHECK: str r2, [sp, #12] ;CHECK: bl fooUseParam -;CHECK: add r0, sp, #16 +;CHECK: add r0, sp, #12 ;CHECK: bl fooUseParam ;CHECK: pop {r11, lr} -;CHECK: add sp, sp, #16 +;CHECK: add sp, sp, #8 ;CHECK: mov pc, lr ;CHECK: doFoo: diff --git a/test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding.ll b/test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding.ll new file mode 100644 index 0000000..7bf03a1 --- /dev/null +++ b/test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding.ll @@ -0,0 +1,31 @@ +;PR15293: ARM codegen ice - expected larger existing stack allocation +;RUN: llc -mtriple=arm-linux-gnueabihf < %s | FileCheck %s + +%struct.S227 = type { [49 x i32], i32 } + +define void @check227( + i32 %b, + %struct.S227* byval nocapture %arg0, + %struct.S227* %arg1) { +; b --> R0 +; arg0 --> [R1, R2, R3, SP+0 .. SP+188) +; arg1 --> SP+188 + +entry: + +;CHECK: sub sp, sp, #16 +;CHECK: push {r11, lr} +;CHECK: add r0, sp, #12 +;CHECK: stm r0, {r1, r2, r3} +;CHECK: ldr r0, [sp, #212] +;CHECK: bl useInt +;CHECK: pop {r11, lr} +;CHECK: add sp, sp, #16 + + %0 = ptrtoint %struct.S227* %arg1 to i32 + tail call void @useInt(i32 %0) + ret void +} + +declare void @useInt(i32) + diff --git a/test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding2.ll b/test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding2.ll new file mode 100644 index 0000000..438b021a --- /dev/null +++ b/test/CodeGen/ARM/2013-05-13-AAPCS-byval-padding2.ll @@ -0,0 +1,25 @@ +;PR15293: ARM codegen ice - expected larger existing stack allocation +;RUN: llc -mtriple=arm-linux-gnueabihf < %s | FileCheck %s + +%struct4bytes = type { i32 } +%struct20bytes = type { i32, i32, i32, i32, i32 } + +define void @foo(%struct4bytes* byval %p0, ; --> R0 + %struct20bytes* byval %p1 ; --> R1,R2,R3, [SP+0 .. SP+8) +) { +;CHECK: sub sp, sp, #16 +;CHECK: push {r11, lr} +;CHECK: add r11, sp, #8 +;CHECK: stm r11, {r0, r1, r2, r3} +;CHECK: add r0, sp, #12 +;CHECK: bl useInt +;CHECK: pop {r11, lr} +;CHECK: add sp, sp, #16 + + %1 = ptrtoint %struct20bytes* %p1 to i32 + tail call void @useInt(i32 %1) + ret void +} + +declare void @useInt(i32) + |