[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
Wed Jun 29 00:59:28 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa97a79da0272: [TableGen] Add a knob for MCOperandInfo expansion in gen-instr-info (authored by Amir).

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 {
@@ -391,7 +397,7 @@
       OperandOffsets.push_back(CurrentOffset);
       for (const auto &Op : Inst->Operands) {
         const DagInit *MIOI = Op.MIOperandInfo;
-        if (!MIOI || MIOI->getNumArgs() == 0) {
+        if (!ExpandMIOperandInfo || !MIOI || MIOI->getNumArgs() == 0) {
           // Single, anonymous, operand.
           OperandRecords.push_back(Op.Rec);
           ++CurrentOffset;
Index: llvm/test/TableGen/get-operand-type-no-expand.td
===================================================================
--- /dev/null
+++ llvm/test/TableGen/get-operand-type-no-expand.td
@@ -0,0 +1,48 @@
+// 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: OpcodeOperandTypes[] = {
+// 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: OpcodeOperandTypes[] = {
+// 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.440885.patch
Type: text/x-patch
Size: 2845 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220629/4603c9b8/attachment.bin>


More information about the llvm-commits mailing list