forked from OSchip/llvm-project
[RISCV] Enable MCCodeEmitter instruction predicate verifier
This ensures that we never encode an instruction which is unavailable, such as if we explicitly insert a forbidden instruction when lowering. This is particularly important on RISC-V given its high degree of modularity, and will become increasingly important as new standard extensions appear. Reviewed By: asb, lenary Differential Revision: https://reviews.llvm.org/D85015
This commit is contained in:
parent
ea2e682cc2
commit
3149ec07c0
|
@ -84,6 +84,12 @@ public:
|
|||
unsigned getVMaskReg(const MCInst &MI, unsigned OpNo,
|
||||
SmallVectorImpl<MCFixup> &Fixups,
|
||||
const MCSubtargetInfo &STI) const;
|
||||
|
||||
private:
|
||||
FeatureBitset computeAvailableFeatures(const FeatureBitset &FB) const;
|
||||
void
|
||||
verifyInstructionPredicates(const MCInst &MI,
|
||||
const FeatureBitset &AvailableFeatures) const;
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
|
@ -185,6 +191,9 @@ void RISCVMCCodeEmitter::expandAddTPRel(const MCInst &MI, raw_ostream &OS,
|
|||
void RISCVMCCodeEmitter::encodeInstruction(const MCInst &MI, raw_ostream &OS,
|
||||
SmallVectorImpl<MCFixup> &Fixups,
|
||||
const MCSubtargetInfo &STI) const {
|
||||
verifyInstructionPredicates(MI,
|
||||
computeAvailableFeatures(STI.getFeatureBits()));
|
||||
|
||||
const MCInstrDesc &Desc = MCII.get(MI.getOpcode());
|
||||
// Get byte count of instruction.
|
||||
unsigned Size = Desc.getSize();
|
||||
|
@ -397,4 +406,5 @@ unsigned RISCVMCCodeEmitter::getVMaskReg(const MCInst &MI, unsigned OpNo,
|
|||
}
|
||||
}
|
||||
|
||||
#define ENABLE_INSTR_PREDICATE_VERIFIER
|
||||
#include "RISCVGenMCCodeEmitter.inc"
|
||||
|
|
Loading…
Reference in New Issue