[PATCH] D127932: [TableGen] Add a knob for MCOperandInfo expansion in gen-instr-info
Amir Ayupov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 20 12:33:09 PDT 2022
Amir updated this revision to Diff 438457.
Amir added a comment.
Rebase
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D127932/new/
https://reviews.llvm.org/D127932
Files:
llvm/test/TableGen/get-operand-type-no-expand.td
llvm/utils/TableGen/InstrInfoEmitter.cpp
Index: llvm/utils/TableGen/InstrInfoEmitter.cpp
===================================================================
--- llvm/utils/TableGen/InstrInfoEmitter.cpp
+++ llvm/utils/TableGen/InstrInfoEmitter.cpp
@@ -36,6 +36,12 @@
using namespace llvm;
+cl::OptionCategory InstrInfoEmitterCat("Options for -gen-instr-info");
+static cl::opt<bool> ExpandMIOperandInfo(
+ "instr-info-expand-mi-operand-info",
+ cl::desc("Expand operand's MIOperandInfo DAG into suboperands"),
+ cl::cat(InstrInfoEmitterCat), cl::init(true));
+
namespace {
class InstrInfoEmitter {
@@ -130,7 +136,7 @@
// operand.
DagInit *MIOI = Op.MIOperandInfo;
- if (!MIOI || MIOI->getNumArgs() == 0) {
+ if (!ExpandMIOperandInfo || !MIOI || MIOI->getNumArgs() == 0) {
// Single, anonymous, operand.
OperandList.push_back(Op);
} else {
Index: llvm/test/TableGen/get-operand-type-no-expand.td
===================================================================
--- /dev/null
+++ llvm/test/TableGen/get-operand-type-no-expand.td
@@ -0,0 +1,46 @@
+// Test -instr-info-expand-mi-operand-info=0 mode which keeps complex operands
+// that contain a DAG of basic operands unexpanded (the default is to expand).
+
+include "llvm/Target/Target.td"
+
+def archInstrInfo : InstrInfo { }
+
+def arch : Target {
+ let InstructionSet = archInstrInfo;
+}
+
+def Reg : Register<"reg">;
+def RegClass : RegisterClass<"foo", [i32], 0, (add Reg)>;
+
+class ComplexOperand<int size> : Operand<iPTR> {
+ let MIOperandInfo = (ops i8imm, i32imm);
+ int Size = size;
+}
+
+def i8complex : ComplexOperand<8>;
+def i512complex: ComplexOperand<512>;
+
+def InstA : Instruction {
+ let Size = 1;
+ let OutOperandList = (outs i512complex:$a);
+ let InOperandList = (ins i8complex:$b, i32imm:$c);
+ field bits<8> Inst;
+ field bits<8> SoftFail = 0;
+ let Namespace = "MyNamespace";
+}
+
+// RUN: llvm-tblgen -gen-instr-info -I %p/../../include %s \
+// RUN: -instr-info-expand-mi-operand-info=1 \
+// RUN: | FileCheck %s --check-prefix=CHECK-EXPAND
+// CHECK-EXPAND: #ifdef GET_INSTRINFO_OPERAND_TYPE
+// CHECK-EXPAND: /* InstA */
+// CHECK-EXPAND-NEXT: i8imm, i32imm, i8imm, i32imm, i32imm,
+// CHECK-EXPAND: #endif // GET_INSTRINFO_OPERAND_TYPE
+
+// RUN: llvm-tblgen -gen-instr-info -I %p/../../include %s \
+// RUN: -instr-info-expand-mi-operand-info=0 \
+// RUN: | FileCheck %s --check-prefix=CHECK-NOEXPAND
+// CHECK-NOEXPAND: #ifdef GET_INSTRINFO_OPERAND_TYPE
+// CHECK-NOEXPAND: /* InstA */
+// CHECK-NOEXPAND-NEXT: i512complex, i8complex, i32imm,
+// CHECK-NOEXPAND: #endif // GET_INSTRINFO_OPERAND_TYPE
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127932.438457.patch
Type: text/x-patch
Size: 2634 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220620/c8dfd938/attachment.bin>
More information about the llvm-commits
mailing list