diff options
| -rw-r--r-- | llvm/test/TableGen/HwModeEncodeDecode.td | 9 | ||||
| -rw-r--r-- | llvm/utils/TableGen/CodeEmitterGen.cpp | 3 |
2 files changed, 11 insertions, 1 deletions
diff --git a/llvm/test/TableGen/HwModeEncodeDecode.td b/llvm/test/TableGen/HwModeEncodeDecode.td index b76d8564651..1c9b86ff26a 100644 --- a/llvm/test/TableGen/HwModeEncodeDecode.td +++ b/llvm/test/TableGen/HwModeEncodeDecode.td @@ -56,6 +56,15 @@ def bar: Instruction { let Inst{1-0} = 0b10; let AsmString = "bar $factor"; } + +def baz : Instruction { + let InOperandList = (ins i32imm:$factor); + bits<32> Inst; + let EncodingInfos = EncodingByHwMode< + [ModeB], [fooTypeEncA] + >; + let AsmString = "foo $factor"; +} } // DECODER-LABEL: DecoderTable_ModeA32[] = diff --git a/llvm/utils/TableGen/CodeEmitterGen.cpp b/llvm/utils/TableGen/CodeEmitterGen.cpp index b021d08881f..42f69cb253d 100644 --- a/llvm/utils/TableGen/CodeEmitterGen.cpp +++ b/llvm/utils/TableGen/CodeEmitterGen.cpp @@ -367,7 +367,8 @@ void CodeEmitterGen::emitInstructionBaseValues( if (const RecordVal *RV = R->getValue("EncodingInfos")) { if (auto *DI = dyn_cast_or_null<DefInit>(RV->getValue())) { EncodingInfoByHwMode EBM(DI->getDef(), HWM); - EncodingDef = EBM.get(HwMode); + if (EBM.hasMode(HwMode)) + EncodingDef = EBM.get(HwMode); } } BitsInit *BI = EncodingDef->getValueAsBitsInit("Inst"); |

