teak-llvm/llvm/test/MC/Disassembler/ARM
Diogo Sampaio d94d079a6a [ARM][Thumb2] Fix ADD/SUB invalid writes to SP
Summary:
This patch fixes pr23772  [ARM] r226200 can emit illegal thumb2 instruction: "sub sp, r12, #80".
The violation was that SUB and ADD (reg, immediate) instructions can only write to SP if the source register is also SP. So the above instructions was unpredictable.
To enforce that the instruction t2(ADD|SUB)ri does not write to SP we now enforce the destination register to be rGPR (That exclude PC and SP).
Different than the ARM specification, that defines one instruction that can read from SP, and one that can't, here we inserted one that can't write to SP, and other that can only write to SP as to reuse most of the hard-coded size optimizations.
When performing this change, it uncovered that emitting Thumb2 Reg plus Immediate could not emit all variants of ADD SP, SP #imm instructions before so it was refactored to be able to. (see test/CodeGen/Thumb2/mve-stacksplot.mir where we use a subw sp, sp, Imm12 variant )
It also uncovered a disassembly issue of adr.w instructions, that were only written as SUBW instructions (see llvm/test/MC/Disassembler/ARM/thumb2.txt).

Reviewers: eli.friedman, dmgreen, carwil, olista01, efriedma, andreadb

Reviewed By: efriedma

Subscribers: gbedwell, john.brawn, efriedma, ostannard, kristof.beyls, hiraditya, dmgreen, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D70680
2020-01-14 11:47:19 +00:00
..
addrmode2-reencoding.txt
arm-LDREXD-reencoding.txt
arm-STREXD-reencoding.txt
arm-tests.txt
arm-thumb-trustzone.txt
arm-trustzone.txt
arm-vmrs_vmsr.txt
armv8.1a.txt
armv8.2a-dotprod-a32.s
armv8.2a-dotprod-t32.s
armv8.3a-js-arm.txt
armv8.3a-js-thumb.txt
armv8.4a-trace-a32.txt
armv8.4a-trace-t32.txt
armv8.5a-sb-thumb.txt [ARM] Add command-line option for SB 2019-01-03 12:09:12 +00:00
armv8.5a-sb.txt [NFC] Fix missing testfile change of rL350299 2019-01-03 12:48:06 +00:00
armv8a-fpmul-a32.txt
armv8a-fpmul-t32.txt
basic-arm-instructions-v8.txt
basic-arm-instructions.txt [ARM][v8.5A] Add speculation barriers SSBB and PSSBB 2018-09-28 08:27:56 +00:00
clrm.txt [ARM] Add the non-MVE instructions in Arm v8.1-M. 2019-06-11 09:29:18 +00:00
coprocessors-arm.txt [ARM] Make coprocessor number restrictions consistent. 2019-06-27 12:40:55 +00:00
coprocessors-thumb.txt [ARM] Make coprocessor number restrictions consistent. 2019-06-27 12:40:55 +00:00
crc32-thumb.txt
crc32.txt
csdb-arm.txt
csdb-thumb.txt
d16.txt
dfb-arm.txt
dfb-thumb.txt
fp-armv8.txt
fp-encoding.txt
fullfp16-arm-neg.txt
fullfp16-arm-nopred.txt [ARM] Make fullfp16 instructions not conditionalisable. 2019-02-25 10:39:53 +00:00
fullfp16-arm.txt
fullfp16-neon-arm-neg.txt
fullfp16-neon-arm.txt
fullfp16-neon-thumb-neg.txt
fullfp16-neon-thumb.txt
fullfp16-thumb-neg.txt
fullfp16-thumb-nopred.txt [ARM] Make fullfp16 instructions not conditionalisable. 2019-02-25 10:39:53 +00:00
fullfp16-thumb.txt
hex-immediates.txt
invalid-armv7.txt [ARM][MC] Update one test case in 'test/MC/Disassembler/ARM/invalid-armv7.txt' 2019-03-05 03:07:56 +00:00
invalid-armv8.1a.txt
invalid-armv8.txt
invalid-because-armv7.txt
invalid-FSTMX-arm.txt
invalid-IT-CC15.txt
invalid-thumb-MSR-MClass.txt
invalid-thumbv7-xfail.txt
invalid-thumbv7.txt [ARM][Thumb2] Fix ADD/SUB invalid writes to SP 2020-01-14 11:47:19 +00:00
invalid-thumbv8.1a.txt
invalid-thumbv8.txt
invalid-virtexts.arm.txt
ldrd-armv4.txt
lit.local.cfg [lit] Delete empty lines at the end of lit.local.cfg NFC 2019-06-17 09:51:07 +00:00
load-store-acquire-release-v8-thumb.txt
load-store-acquire-release-v8.txt
marked-up-thumb.txt
memory-arm-instructions.txt
move-banked-regs-arm.txt
move-banked-regs-thumb.txt
mve-bitops.txt [ARM] Add MVE vector bit-operations (register inputs). 2019-06-19 16:43:53 +00:00
mve-float.txt [ARM] Add a batch of MVE floating-point instructions. 2019-06-21 09:35:07 +00:00
mve-integer.txt [ARM] Add a batch of MVE integer instructions. 2019-06-20 15:16:56 +00:00
mve-interleave.txt [ARM] Add MVE interleaving load/store family. 2019-06-24 10:00:39 +00:00
mve-load-store.txt [ARM] Add MVE vector load/store instructions. 2019-06-25 11:24:18 +00:00
mve-minmax.txt [ARM] Add MVE integer vector min/max instructions. 2019-06-18 15:51:46 +00:00
mve-misc.txt [ARM] Fix handling of zero offsets in LOB instructions. 2019-06-27 12:41:07 +00:00
mve-qdest-qsrc.txt [ARM] Add a batch of similarly encoded MVE instructions. 2019-06-21 12:13:59 +00:00
mve-qdest-rsrc.txt [ARM] Remove nonexistent unsigned forms of MVE VQDMLAH. 2019-07-11 09:52:15 +00:00
mve-reductions.txt [ARM] Remove some spurious MVE reduction instructions. 2019-09-09 15:17:26 +00:00
mve-scalar-shift-unpredictable.txt [ARM][MVE] Decoding of uqrshl and sqrshl accepts unpredictable encodings 2019-09-09 08:50:28 +00:00
mve-scalar-shift.txt [ARM] Add <saturate> operand to SQRSHRL and UQRSHLL 2019-07-19 09:46:28 +00:00
mve-shifts.txt [ARM] Add MVE vector shift instructions. 2019-06-18 16:19:59 +00:00
mve-vcmp.txt [ARM] Add MVE vector compare instructions. 2019-06-21 11:14:51 +00:00
mve-vmov-lane.txt [ARM] Add MVE vector bit-operations (register inputs). 2019-06-19 16:43:53 +00:00
mve-vmov-pair.txt [ARM] Add MVE 64-bit GPR <-> vector move instructions. 2019-06-21 13:17:23 +00:00
mve-vpt.txt [ARM] Set up infrastructure for MVE vector instructions. 2019-06-13 13:11:13 +00:00
neon-complex-arm.txt
neon-complex-thumb.txt
neon-crypto.txt
neon-tests.txt
neon-v8.txt
neon.txt
neont2.txt
neont-VLD-reencoding.txt
neont-VST-reencoding.txt
ras-extension-arm.txt
ras-extension-thumb.txt [ARM] Extra MVE-related testing. 2019-06-25 11:24:42 +00:00
thumb1.txt
thumb2-bit-15.txt [ARM] Turn some undefined encoding bits into 0s. 2019-06-04 08:28:48 +00:00
thumb2-preloads.txt
thumb2-v8.1m.txt [ARM] Fix handling of zero offsets in LOB instructions. 2019-06-27 12:41:07 +00:00
thumb2-v8.txt [ARM][Thumb2] Fix ADD/SUB invalid writes to SP 2020-01-14 11:47:19 +00:00
thumb2-v8m.txt
thumb2.txt [ARM][Thumb2] Fix ADD/SUB invalid writes to SP 2020-01-14 11:47:19 +00:00
thumb-fp-armv8.txt
thumb-MSR-MClass.txt
thumb-neon-crypto.txt
thumb-neon-v8.txt
thumb-printf.txt
thumb-tests.txt [ARM][Thumb2] Fix ADD/SUB invalid writes to SP 2020-01-14 11:47:19 +00:00
thumb-v8.1a.txt
thumb-v8.txt
thumb-vmrs_vmsr.txt
thumbv8.1m-vmrs-vmsr.txt [ARM] Add the non-MVE instructions in Arm v8.1-M. 2019-06-11 09:29:18 +00:00
thumbv8.1m.s [ARM] Reject CSEL instructions with invalid operands 2019-07-31 14:22:45 +00:00
unpredictable-ADC-arm.txt
unpredictable-ADDREXT3-arm.txt
unpredictable-AExtI-arm.txt
unpredictable-AI1cmp-arm.txt
unpredictable-BFI.txt
unpredictable-LDR-arm.txt
unpredictable-LDRD-arm.txt
unpredictable-LSL-regform.txt
unpredictable-MRRC2-arm.txt
unpredictable-MRS-arm.txt
unpredictable-MUL-arm.txt
unpredictable-MVN-arm.txt
unpredictable-RSC-arm.txt
unpredictable-SEL-arm.txt
unpredictable-SHADD16-arm.txt
unpredictable-SSAT-arm.txt
unpredictable-STRBrs-arm.txt
unpredictable-swp-arm.txt
unpredictable-UQADD8-arm.txt
unpredictables-thumb.txt
vfp4.txt
virtexts-arm.txt
virtexts-thumb.txt
vmrs-vmsr-invalid.txt [ARM][MVE] Decoding of VMSR doesn't diagnose some unpredictable encodings 2019-09-03 09:55:30 +00:00
vscclrm.txt [MC][ARM] vscclrm disassembles as vldmia 2019-09-27 08:22:24 +00:00
vstrldr_sys.txt [ARM] Add the non-MVE instructions in Arm v8.1-M. 2019-06-11 09:29:18 +00:00