summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/ARM/fpoffset_overflow.mir
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2017-04-19 01:16:07 +0000
committerMatthias Braun <matze@braunis.de>2017-04-19 01:16:07 +0000
commit661d3d4b005050a37ed034269b3b73bba72ba13a (patch)
tree683ce4f193b0fc4f753dc78f52134ee3e3d559fd /llvm/test/CodeGen/ARM/fpoffset_overflow.mir
parent32ed478d407006940f5f6a90302226524ac7c87c (diff)
downloadbcm5719-llvm-661d3d4b005050a37ed034269b3b73bba72ba13a.tar.gz
bcm5719-llvm-661d3d4b005050a37ed034269b3b73bba72ba13a.zip
ARMFrameLowering: Reserve emergency spill slot for large arguments
We need to reserve an emergency spill slot in cases with large argument types that could overflow immediate offsets for FP relative address calculations. rdar://31317893 Differential Revision: https://reviews.llvm.org/D31643 llvm-svn: 300639
Diffstat (limited to 'llvm/test/CodeGen/ARM/fpoffset_overflow.mir')
-rw-r--r--llvm/test/CodeGen/ARM/fpoffset_overflow.mir94
1 files changed, 94 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/fpoffset_overflow.mir b/llvm/test/CodeGen/ARM/fpoffset_overflow.mir
new file mode 100644
index 00000000000..9c6cd931b15
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/fpoffset_overflow.mir
@@ -0,0 +1,94 @@
+# RUN: llc -o - %s -mtriple=thumbv7-- -run-pass=stack-protector -run-pass=prologepilog | FileCheck %s
+---
+# This should trigger an emergency spill in the register scavenger because the
+# frame offset into the large argument is too large.
+# CHECK-LABEL: name: func0
+# CHECK: t2STRi12 killed %r7, %sp, 0, 14, _ :: (store 4 into %stack.0)
+# CHECK: %r7 = t2ADDri killed %sp, 4096, 14, _, _
+# CHECK: %r11 = t2LDRi12 killed %r7, 36, 14, _ :: (load 4)
+# CHECK: %r7 = t2LDRi12 %sp, 0, 14, _ :: (load 4 from %stack.0)
+name: func0
+tracksRegLiveness: true
+fixedStack:
+ - { id: 0, offset: 4084, size: 4, alignment: 4, isImmutable: true,
+ isAliased: false }
+ - { id: 1, offset: -12, size: 4096, alignment: 4, isImmutable: false,
+ isAliased: false }
+body: |
+ bb.0:
+ %r0 = IMPLICIT_DEF
+ %r1 = IMPLICIT_DEF
+ %r2 = IMPLICIT_DEF
+ %r3 = IMPLICIT_DEF
+ %r4 = IMPLICIT_DEF
+ %r5 = IMPLICIT_DEF
+ %r6 = IMPLICIT_DEF
+ %r8 = IMPLICIT_DEF
+ %r9 = IMPLICIT_DEF
+ %r10 = IMPLICIT_DEF
+ %r11 = IMPLICIT_DEF
+ %r12 = IMPLICIT_DEF
+ %lr = IMPLICIT_DEF
+
+ %r11 = t2LDRi12 %fixed-stack.0, 0, 14, _ :: (load 4)
+
+ KILL %r0
+ KILL %r1
+ KILL %r2
+ KILL %r3
+ KILL %r4
+ KILL %r5
+ KILL %r6
+ KILL %r8
+ KILL %r9
+ KILL %r10
+ KILL %r11
+ KILL %r12
+ KILL %lr
+...
+---
+# This should not trigger an emergency spill yet.
+# CHECK-LABEL: name: func1
+# CHECK-NOT: t2STRi12
+# CHECK-NOT: t2ADDri
+# CHECK: %r11 = t2LDRi12 %sp, 4092, 14, _ :: (load 4)
+# CHECK-NOT: t2LDRi12
+name: func1
+tracksRegLiveness: true
+fixedStack:
+ - { id: 0, offset: 4044, size: 4, alignment: 4, isImmutable: true,
+ isAliased: false }
+ - { id: 1, offset: -12, size: 4056, alignment: 4, isImmutable: false,
+ isAliased: false }
+body: |
+ bb.0:
+ %r0 = IMPLICIT_DEF
+ %r1 = IMPLICIT_DEF
+ %r2 = IMPLICIT_DEF
+ %r3 = IMPLICIT_DEF
+ %r4 = IMPLICIT_DEF
+ %r5 = IMPLICIT_DEF
+ %r6 = IMPLICIT_DEF
+ %r8 = IMPLICIT_DEF
+ %r9 = IMPLICIT_DEF
+ %r10 = IMPLICIT_DEF
+ %r11 = IMPLICIT_DEF
+ %r12 = IMPLICIT_DEF
+ %lr = IMPLICIT_DEF
+
+ %r11 = t2LDRi12 %fixed-stack.0, 0, 14, _ :: (load 4)
+
+ KILL %r0
+ KILL %r1
+ KILL %r2
+ KILL %r3
+ KILL %r4
+ KILL %r5
+ KILL %r6
+ KILL %r8
+ KILL %r9
+ KILL %r10
+ KILL %r11
+ KILL %r12
+ KILL %lr
+...
OpenPOWER on IntegriCloud