[PATCH] D70680: [ARM][Thumb2] Fix ADD/SUB invalid writes to SP
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 6 13:57:57 PST 2020
efriedma added inline comments.
================
Comment at: llvm/lib/Target/ARM/ARMInstrThumb2.td:2351
+// SP to SP alike
+def : T2Pat<(add GPRsp:$src, imm1_255_neg:$imm),
+ (t2SUBspImm GPRsp:$src, imm1_255_neg:$imm)>;
----------------
These patterns are unreachable.
================
Comment at: llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp:9851
+ if (Inst.getOperand(5).getReg() != 0 || HasWideQualifier)
+ break;
+ unsigned V = Inst.getOperand(2).getImm();
----------------
Is this new behavior? Or was this handled elsewhere before, somehow?
================
Comment at: llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp:5611
+ if (!Check(S, DecoderGPRRegisterClass(Inst, Rd, Address, Decoder)))
+ return MCDisassembler::Fail;
+ }
----------------
I assume this is supposed to reject `adr sp, #label` etc. Is this new behavior? If it is, can you split it into a separate patch?
Not sure what the `Inst.getNumOperands()` check is supposed to be doing.
================
Comment at: llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp:5620
+ Inst.setOpcode(ARM::t2SUBri12);
+ if (!Check(S, DecoderGPRRegisterClass(Inst, 15, Address, Decoder)))
+ return MCDisassembler::Fail;
----------------
This could probably use a comment. It looks like it's handling `sub r0, pc, #0`? (That should actually be a valid instruction, as far as I know.)
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70680/new/
https://reviews.llvm.org/D70680
More information about the llvm-commits
mailing list