[llvm] r302224 - [ARM] Add support for ORR and ORN instruction substitutions
John Brawn via llvm-commits
llvm-commits at lists.llvm.org
Fri May 5 04:31:26 PDT 2017
Author: john.brawn
Date: Fri May 5 06:31:25 2017
New Revision: 302224
URL: http://llvm.org/viewvc/llvm-project?rev=302224&view=rev
Log:
[ARM] Add support for ORR and ORN instruction substitutions
Recently support was added for substituting one intruction for another by
negating or inverting the immediate, but ORR and ORN were missed so this patch
adds them.
This one is slightly different to the others in that ORN only exists in thumb,
so we only do the substitution in thumb.
Differential Revision: https://reviews.llvm.org/D32534
Modified:
llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td
llvm/trunk/test/MC/ARM/negative-immediates-fail.s
llvm/trunk/test/MC/ARM/negative-immediates-thumb1-fail.s
llvm/trunk/test/MC/ARM/negative-immediates.s
Modified: llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td?rev=302224&r1=302223&r2=302224&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td (original)
+++ llvm/trunk/lib/Target/ARM/ARMInstrThumb2.td Fri May 5 06:31:25 2017
@@ -4706,6 +4706,19 @@ def : t2InstSubst<"and${s}${p} $Rd, $Rn,
def : t2InstSubst<"and${s}${p} $Rdn, $imm",
(t2BICri rGPR:$Rdn, rGPR:$Rdn, t2_so_imm_not:$imm,
pred:$p, cc_out:$s)>;
+// And ORR <--> ORN
+def : t2InstSubst<"orn${s}${p} $Rd, $Rn, $imm",
+ (t2ORRri rGPR:$Rd, rGPR:$Rn, t2_so_imm_not:$imm,
+ pred:$p, cc_out:$s)>;
+def : t2InstSubst<"orn${s}${p} $Rdn, $imm",
+ (t2ORRri rGPR:$Rdn, rGPR:$Rdn, t2_so_imm_not:$imm,
+ pred:$p, cc_out:$s)>;
+def : t2InstSubst<"orr${s}${p} $Rd, $Rn, $imm",
+ (t2ORNri rGPR:$Rd, rGPR:$Rn, t2_so_imm_not:$imm,
+ pred:$p, cc_out:$s)>;
+def : t2InstSubst<"orr${s}${p} $Rdn, $imm",
+ (t2ORNri rGPR:$Rdn, rGPR:$Rdn, t2_so_imm_not:$imm,
+ pred:$p, cc_out:$s)>;
// Likewise, "add Rd, t2_so_imm_neg" -> sub
def : t2InstSubst<"add${s}${p} $Rd, $Rn, $imm",
(t2SUBri GPRnopc:$Rd, GPRnopc:$Rn, t2_so_imm_neg:$imm,
Modified: llvm/trunk/test/MC/ARM/negative-immediates-fail.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/negative-immediates-fail.s?rev=302224&r1=302223&r2=302224&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/negative-immediates-fail.s (original)
+++ llvm/trunk/test/MC/ARM/negative-immediates-fail.s Fri May 5 06:31:25 2017
@@ -11,3 +11,8 @@ ADC r0, r1, #0xFFFFFE02
ADD.W r0, r0, #0xFF01FF01
# CHECK: error: immediate operand must be in the range [0,7]
+
+ORR r0, r1, #0xFFFFFF00
+# CHECK: error: instruction requires: thumb2
+ORN r0, r1, #0xFFFFFF00
+# CHECK: error: instruction requires: thumb2
Modified: llvm/trunk/test/MC/ARM/negative-immediates-thumb1-fail.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/negative-immediates-thumb1-fail.s?rev=302224&r1=302223&r2=302224&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/negative-immediates-thumb1-fail.s (original)
+++ llvm/trunk/test/MC/ARM/negative-immediates-thumb1-fail.s Fri May 5 06:31:25 2017
@@ -13,3 +13,8 @@ SUBs r1, r0, #0xFFFFFFF5
SUBs r0, #0xFFFFFEFF
# CHECK: error: immediate operand must be in the range [0,255]
+
+ORRs r0, r1, #0xFFFFFF00
+# CHECK: error: instruction requires: thumb2
+ORNs r0, r1, #0xFFFFFF00
+# CHECK: error: instruction requires: thumb2
Modified: llvm/trunk/test/MC/ARM/negative-immediates.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/negative-immediates.s?rev=302224&r1=302223&r2=302224&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/negative-immediates.s (original)
+++ llvm/trunk/test/MC/ARM/negative-immediates.s Fri May 5 06:31:25 2017
@@ -98,6 +98,22 @@
# CHECK: and r0, r1, #16777472 @ encoding: [0x01,0xf0,0x01,0x20]
# CHECK-DISABLED: error: instruction requires: NegativeImmediates
# CHECK-DISABLED: BIC
+ ORR r0, r1, #0xFFFFFF00
+# CHECK-DISABLED: error: instruction requires: NegativeImmediates
+# CHECK-DISABLED: ORR
+# CHECK: orn r0, r1, #255
+ ORR r0, r1, #0xFEFFFEFF
+# CHECK: orn r0, r1, #16777472 @ encoding: [0x61,0xf0,0x01,0x20]
+# CHECK-DISABLED: error: instruction requires: NegativeImmediates
+# CHECK-DISABLED: ORR
+ ORN r0, r1, #0xFFFFFF00
+# CHECK: orr r0, r1, #255
+# CHECK-DISABLED: error: instruction requires: NegativeImmediates
+# CHECK-DISABLED: ORN
+ ORN r0, r1, #0xFEFFFEFF
+# CHECK: orr r0, r1, #16777472 @ encoding: [0x41,0xf0,0x01,0x20]
+# CHECK-DISABLED: error: instruction requires: NegativeImmediates
+# CHECK-DISABLED: ORN
CMP r0, #0xFFFFFF01
# CHECK: cmn.w r0, #255
# CHECK-DISABLED: error: instruction requires: NegativeImmediates
More information about the llvm-commits
mailing list