diff options
Diffstat (limited to 'test/CodeGen/XCore/scavenging.ll')
-rw-r--r-- | test/CodeGen/XCore/scavenging.ll | 69 |
1 files changed, 67 insertions, 2 deletions
diff --git a/test/CodeGen/XCore/scavenging.ll b/test/CodeGen/XCore/scavenging.ll index 5b612d0..a0c8a2e 100644 --- a/test/CodeGen/XCore/scavenging.ll +++ b/test/CodeGen/XCore/scavenging.ll @@ -1,4 +1,5 @@ -; RUN: llc < %s -march=xcore +; RUN: llc < %s -march=xcore | FileCheck %s + @size = global i32 0 ; <i32*> [#uses=1] @g0 = external global i32 ; <i32*> [#uses=2] @g1 = external global i32 ; <i32*> [#uses=2] @@ -48,5 +49,69 @@ entry: call void @g(i32* %x1, i32* %1) nounwind ret void } - declare void @g(i32*, i32*) + + +; CHECK: .section .cp.rodata.cst4,"aMc",@progbits,4 +; CHECK: .align 4 +; CHECK: [[ARG5:.LCPI[0-9_]+]]: +; CHECK: .long 100003 +; CHECK: [[INDEX0:.LCPI[0-9_]+]]: +; CHECK: .long 80002 +; CHECK: [[INDEX1:.LCPI[0-9_]+]]: +; CHECK: .long 81002 +; CHECK: [[INDEX2:.LCPI[0-9_]+]]: +; CHECK: .long 82002 +; CHECK: [[INDEX3:.LCPI[0-9_]+]]: +; CHECK: .long 83002 +; CHECK: [[INDEX4:.LCPI[0-9_]+]]: +; CHECK: .long 84002 +; CHECK: .text +; !FP + large frame: spill SR+SR = entsp 2 + 100000 +; CHECK-LABEL: ScavengeSlots: +; CHECK: entsp 65535 +; CHECK: extsp 34467 +; scavenge r11 +; CHECK: ldaw r11, sp[0] +; scavenge r4 using SR spill slot +; CHECK: stw r4, sp[1] +; CHECK: ldw r4, cp{{\[}}[[ARG5]]{{\]}} +; r11 used to load 5th argument +; CHECK: ldw r11, r11[r4] +; CHECK: ldaw r4, sp[0] +; scavenge r5 using SR spill slot +; CHECK: stw r5, sp[0] +; CHECK: ldw r5, cp{{\[}}[[INDEX0]]{{\]}} +; r4 & r5 used by InsertSPConstInst() to emit STW_l3r instruction. +; CHECK: stw r0, r4[r5] +; CHECK: ldaw r0, sp[0] +; CHECK: ldw r5, cp{{\[}}[[INDEX1]]{{\]}} +; CHECK: stw r1, r0[r5] +; CHECK: ldaw r0, sp[0] +; CHECK: ldw r1, cp{{\[}}[[INDEX2]]{{\]}} +; CHECK: stw r2, r0[r1] +; CHECK: ldaw r0, sp[0] +; CHECK: ldw r1, cp{{\[}}[[INDEX3]]{{\]}} +; CHECK: stw r3, r0[r1] +; CHECK: ldaw r0, sp[0] +; CHECK: ldw r1, cp{{\[}}[[INDEX4]]{{\]}} +; CHECK: stw r11, r0[r1] +; CHECK: ldaw sp, sp[65535] +; CHECK: ldw r4, sp[1] +; CHECK: ldw r5, sp[0] +; CHECK: retsp 34467 +define void @ScavengeSlots(i32 %r0, i32 %r1, i32 %r2, i32 %r3, i32 %r4) nounwind { +entry: + %Data = alloca [100000 x i32] + %i0 = getelementptr inbounds [100000 x i32]* %Data, i32 0, i32 80000 + store volatile i32 %r0, i32* %i0 + %i1 = getelementptr inbounds [100000 x i32]* %Data, i32 0, i32 81000 + store volatile i32 %r1, i32* %i1 + %i2 = getelementptr inbounds [100000 x i32]* %Data, i32 0, i32 82000 + store volatile i32 %r2, i32* %i2 + %i3 = getelementptr inbounds [100000 x i32]* %Data, i32 0, i32 83000 + store volatile i32 %r3, i32* %i3 + %i4 = getelementptr inbounds [100000 x i32]* %Data, i32 0, i32 84000 + store volatile i32 %r4, i32* %i4 + ret void +} |