summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2014-06-23 09:20:02 +0000
committerTim Northover <tnorthover@apple.com>2014-06-23 09:20:02 +0000
commit6f7e87c7514c5d287cff80b033f1877059133177 (patch)
tree65add62abfefcf3e513f96ba6991e5db8efea8ae
parent139f2f15651a805b6ba2f0e34f9b345f5f46b553 (diff)
downloadllvm-6f7e87c7514c5d287cff80b033f1877059133177.tar.gz
llvm-6f7e87c7514c5d287cff80b033f1877059133177.tar.bz2
llvm-6f7e87c7514c5d287cff80b033f1877059133177.tar.xz
ARM: mark UBFX as not allowing PC.
Strictly, it's unpredictable. But we don't quite model that yet and an error is better than ignoring the issue. This one somehow got left out before though. rdar://problem/15997748 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211490 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/ARM/ARMInstrInfo.td4
-rw-r--r--test/MC/ARM/diagnostics.s18
2 files changed, 20 insertions, 2 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td
index 03eac2e0c8..4788bac8f3 100644
--- a/lib/Target/ARM/ARMInstrInfo.td
+++ b/lib/Target/ARM/ARMInstrInfo.td
@@ -3334,8 +3334,8 @@ def SBFX : I<(outs GPRnopc:$Rd),
let Inst{3-0} = Rn;
}
-def UBFX : I<(outs GPR:$Rd),
- (ins GPR:$Rn, imm0_31:$lsb, imm1_32:$width),
+def UBFX : I<(outs GPRnopc:$Rd),
+ (ins GPRnopc:$Rn, imm0_31:$lsb, imm1_32:$width),
AddrMode1, 4, IndexModeNone, DPFrm, IIC_iUNAsi,
"ubfx", "\t$Rd, $Rn, $lsb, $width", "", []>,
Requires<[IsARM, HasV6T2]> {
diff --git a/test/MC/ARM/diagnostics.s b/test/MC/ARM/diagnostics.s
index 62d7daea28..88c5fb5b68 100644
--- a/test/MC/ARM/diagnostics.s
+++ b/test/MC/ARM/diagnostics.s
@@ -351,6 +351,24 @@
@ CHECK-ERRORS: ubfxgt r4, r5, #16, #17
@ CHECK-ERRORS: ^
+ @ Using pc for SBFX/UBFX
+ sbfx pc, r2, #1, #3
+ sbfx sp, pc, #4, #5
+ ubfx pc, r0, #0, #31
+ ubfx r14, pc, #1, #2
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: sbfx pc, r2, #1, #3
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: sbfx sp, pc, #4, #5
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: ubfx pc, r0, #0, #31
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: ubfx r14, pc, #1, #2
+@ CHECK-ERRORS: ^
+
@ Out of order Rt/Rt2 operands for ldrd
ldrd r4, r3, [r8]
ldrd r4, r3, [r8, #8]!