[PATCH] D100585: [ARM][disassembler] Fix incorrect number of operands MCInst generated by the disassembler
Min-Yih Hsu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Apr 25 11:21:52 PDT 2021
myhsu updated this revision to Diff 340373.
myhsu marked 2 inline comments as done.
myhsu added a comment.
Update test cases
- Use tested instructions as the file name.
- Add tests for t2SUBspImm, which is also affected by this patch
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D100585/new/
https://reviews.llvm.org/D100585
Files:
llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
llvm/test/MC/Disassembler/ARM/bl-arm.txt
llvm/test/MC/Disassembler/ARM/sub-sp-imm-thumb2.txt
Index: llvm/test/MC/Disassembler/ARM/sub-sp-imm-thumb2.txt
===================================================================
--- /dev/null
+++ llvm/test/MC/Disassembler/ARM/sub-sp-imm-thumb2.txt
@@ -0,0 +1,37 @@
+# RUN: llvm-mc -triple=thumbv7 -disassemble -show-inst < %s | FileCheck %s
+
+# https://bugs.llvm.org/show_bug.cgi?id=49974
+# Incorrect number of predicate operands were inserted to the
+# disassembled MCInst.
+
+# CHECK: subw sp, sp, #1148
+# CHECK-SAME: <MCInst #{{[0-9]+}} t2SUBspImm12
+# CHECK-NEXT: <MCOperand Reg:15>
+# CHECK-NEXT: <MCOperand Reg:15>
+# CHECK-NEXT: <MCOperand Imm:1148>
+# CHECK-NEXT: <MCOperand Imm:14>
+# CHECK-NEXT: <MCOperand Reg:0>>
+
+0xad 0xf2 0x7c 0x4d
+
+# CHECK: sub.w sp, sp, #1024
+# CHECK-SAME: <MCInst #{{[0-9]+}} t2SUBspImm
+# CHECK-NEXT: <MCOperand Reg:15>
+# CHECK-NEXT: <MCOperand Reg:15>
+# CHECK-NEXT: <MCOperand Imm:1024>
+# CHECK-NEXT: <MCOperand Imm:14>
+# CHECK-NEXT: <MCOperand Reg:0>
+# CHECK-NEXT: <MCOperand Reg:0>>
+
+0xad,0xf5,0x80,0x6d
+
+# CHECK: subs.w sp, sp, #1024
+# CHECK-SAME: <MCInst #{{[0-9]+}} t2SUBspImm
+# CHECK-NEXT: <MCOperand Reg:15>
+# CHECK-NEXT: <MCOperand Reg:15>
+# CHECK-NEXT: <MCOperand Imm:1024>
+# CHECK-NEXT: <MCOperand Imm:14>
+# CHECK-NEXT: <MCOperand Reg:0>
+# CHECK-NEXT: <MCOperand Reg:3>>
+
+0xbd,0xf5,0x80,0x6d
Index: llvm/test/MC/Disassembler/ARM/bl-arm.txt
===================================================================
--- /dev/null
+++ llvm/test/MC/Disassembler/ARM/bl-arm.txt
@@ -0,0 +1,11 @@
+# RUN: llvm-mc -triple=arm -disassemble -show-inst < %s | FileCheck %s
+
+# https://bugs.llvm.org/show_bug.cgi?id=49974
+# Redundant (predicate) operands were inserted to the
+# disassembled MCInst.
+
+# CHECK: bl #152
+# CHECK-SAME: <MCInst #{{[0-9]+}} BL
+# CHECK-NEXT: <MCOperand Imm:152>>
+
+0x26 0x00 0x00 0xeb
Index: llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
===================================================================
--- llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
+++ llvm/lib/Target/ARM/Disassembler/ARMDisassembler.cpp
@@ -2676,8 +2676,12 @@
if (!tryAddingSymbolicOperand(Address, Address + SignExtend32<26>(imm) + 8,
true, 4, Inst, Decoder))
Inst.addOperand(MCOperand::createImm(SignExtend32<26>(imm)));
- if (!Check(S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
- return MCDisassembler::Fail;
+
+ // We already have BL_pred for BL w/ predicate, no need to add addition
+ // predicate opreands for BL
+ if (Inst.getOpcode() != ARM::BL)
+ if (!Check(S, DecodePredicateOperand(Inst, pred, Address, Decoder)))
+ return MCDisassembler::Fail;
return S;
}
@@ -6670,17 +6674,14 @@
return MCDisassembler::Fail;
if (TypeT3) {
Inst.setOpcode(sign1 ? ARM::t2SUBspImm12 : ARM::t2ADDspImm12);
- S = 0;
Inst.addOperand(MCOperand::createImm(Imm12)); // zext imm12
} else {
Inst.setOpcode(sign1 ? ARM::t2SUBspImm : ARM::t2ADDspImm);
if (!Check(DS, DecodeT2SOImm(Inst, Imm12, Address, Decoder))) // imm12
return MCDisassembler::Fail;
+ if (!Check(DS, DecodeCCOutOperand(Inst, S, Address, Decoder))) // cc_out
+ return MCDisassembler::Fail;
}
- if (!Check(DS, DecodeCCOutOperand(Inst, S, Address, Decoder))) // cc_out
- return MCDisassembler::Fail;
-
- Inst.addOperand(MCOperand::createReg(0)); // pred
return DS;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100585.340373.patch
Type: text/x-patch
Size: 3405 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210425/5d466433/attachment.bin>
More information about the llvm-commits
mailing list