aboutsummaryrefslogtreecommitdiff
path: root/test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2003-08-23 23:38:59 +0000
committerChris Lattner <sabre@nondot.org>2003-08-23 23:38:59 +0000
commitae1c1ffacd160666df0daafb5dcc62eb33dfbf19 (patch)
tree1d5b70efb316800213852537616c1a9a06c68bdb /test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll
parent7d6c24cdbf41522818ec9ae7b8d3b624660853c1 (diff)
new testcase distilled from 176.gcc
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8094 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll')
-rw-r--r--test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll30
1 files changed, 30 insertions, 0 deletions
diff --git a/test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll b/test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll
new file mode 100644
index 0000000000..fa7df62913
--- /dev/null
+++ b/test/ExecutionEngine/2003-08-23-RegisterAllocatePhysReg.ll
@@ -0,0 +1,30 @@
+; This testcase exposes a bug in the local register allocator where it runs out
+; of registers (due to too many overlapping live ranges), but then attempts to
+; use the ESP register (which is not allocatable) to hold a value.
+
+int %main(uint %A) {
+ %Ap2 = alloca uint, uint %A ; ESP gets used again...
+ %B = add uint %A, 1 ; Produce lots of overlapping live ranges
+ %C = add uint %A, 2
+ %D = add uint %A, 3
+ %E = add uint %A, 4
+ %F = add uint %A, 5
+ %G = add uint %A, 6
+ %H = add uint %A, 7
+ %I = add uint %A, 8
+ %J = add uint %A, 9
+ %K = add uint %A, 10
+
+ store uint %A, uint *%Ap2 ; Uses of all of the values
+ store uint %B, uint *%Ap2
+ store uint %C, uint *%Ap2
+ store uint %D, uint *%Ap2
+ store uint %E, uint *%Ap2
+ store uint %F, uint *%Ap2
+ store uint %G, uint *%Ap2
+ store uint %H, uint *%Ap2
+ store uint %I, uint *%Ap2
+ store uint %J, uint *%Ap2
+ store uint %K, uint *%Ap2
+ ret int 0
+}