diff options
Diffstat (limited to 'test/CodeGen/XCore/epilogue_prologue.ll')
-rw-r--r-- | test/CodeGen/XCore/epilogue_prologue.ll | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/test/CodeGen/XCore/epilogue_prologue.ll b/test/CodeGen/XCore/epilogue_prologue.ll index 14f04a3..9997814 100644 --- a/test/CodeGen/XCore/epilogue_prologue.ll +++ b/test/CodeGen/XCore/epilogue_prologue.ll @@ -206,14 +206,41 @@ entry: ret i32 %i } +; FP + large frame: spill FP+SR+LR = entsp 2 + 256 + extsp 1 +; CHECKFP-LABEL:f8 +; CHECKFP: entsp 258 +; CHECKFP-NEXT: stw r10, sp[1] +; CHECKFP-NEXT: ldaw r10, sp[0] +; CHECKFP-NEXT: mkmsk [[REG:r[0-9]+]], 8 +; CHECKFP-NEXT: ldaw r0, r10{{\[}}[[REG]]{{\]}} +; CHECKFP-NEXT: extsp 1 +; CHECKFP-NEXT: bl f5 +; CHECKFP-NEXT: ldaw sp, sp[1] +; CHECKFP-NEXT: set sp, r10 +; CHECKFP-NEXT: ldw r10, sp[1] +; CHECKFP-NEXT: retsp 258 +; +; !FP + large frame: spill SR+SR+LR = entsp 3 + 256 +; CHECK-LABEL:f8 +; CHECK: entsp 257 +; CHECK-NEXT: ldaw r0, sp[254] +; CHECK-NEXT: bl f5 +; CHECK-NEXT: retsp 257 +define void @f8() nounwind { +entry: + %0 = alloca [256 x i32] + %1 = getelementptr inbounds [256 x i32]* %0, i32 0, i32 253 + call void @f5(i32* %1) + ret void +} ; FP + large frame: spill FP+SR+LR = entsp 2 + 32768 + extsp 1 -; CHECKFP-LABEL:f8 +; CHECKFP-LABEL:f9 ; CHECKFP: entsp 32770 ; CHECKFP-NEXT: stw r10, sp[1] ; CHECKFP-NEXT: ldaw r10, sp[0] -; CHECKFP-NEXT: mkmsk r1, 15 -; CHECKFP-NEXT: ldaw r0, r10[r1] +; CHECKFP-NEXT: ldc [[REG:r[0-9]+]], 32767 +; CHECKFP-NEXT: ldaw r0, r10{{\[}}[[REG]]{{\]}} ; CHECKFP-NEXT: extsp 1 ; CHECKFP-NEXT: bl f5 ; CHECKFP-NEXT: ldaw sp, sp[1] @@ -222,12 +249,12 @@ entry: ; CHECKFP-NEXT: retsp 32770 ; ; !FP + large frame: spill SR+SR+LR = entsp 3 + 32768 -; CHECK-LABEL:f8 +; CHECK-LABEL:f9 ; CHECK: entsp 32771 ; CHECK-NEXT: ldaw r0, sp[32768] ; CHECK-NEXT: bl f5 ; CHECK-NEXT: retsp 32771 -define void @f8() nounwind { +define void @f9() nounwind { entry: %0 = alloca [32768 x i32] %1 = getelementptr inbounds [32768 x i32]* %0, i32 0, i32 32765 |