[llvm] [X86] Support 2nd EVEX compression described in X86CompressEVEX.cpp (PR #77202)
via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 6 08:12:07 PST 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
Author: Shengchen Kan (KanRobert)
<details>
<summary>Changes</summary>
Promoted instruction (EVEX) -> pre-promotion instruction (legacy/VEX)
---
Full diff: https://github.com/llvm/llvm-project/pull/77202.diff
1 Files Affected:
- (modified) llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp (+6-2)
``````````diff
diff --git a/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp b/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp
index b03bcb6bc26b30..c519c07b243c24 100644
--- a/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp
+++ b/llvm/utils/TableGen/X86CompressEVEXTablesEmitter.cpp
@@ -167,12 +167,16 @@ void X86CompressEVEXTablesEmitter::run(raw_ostream &OS) {
for (const CodeGenInstruction *Inst : PreCompressionInsts) {
const Record *Rec = Inst->TheDef;
uint8_t Opcode =
- byteFromBitsInit(Inst->TheDef->getValueAsBitsInit("Opcode"));
+ byteFromBitsInit(Rec->getValueAsBitsInit("Opcode"));
+ StringRef Name = Rec->getName();
const CodeGenInstruction *NewInst = nullptr;
- if (ManualMap.find(Rec->getName()) != ManualMap.end()) {
+ if (ManualMap.find(Name) != ManualMap.end()) {
Record *NewRec = Records.getDef(ManualMap.at(Rec->getName()));
assert(NewRec && "Instruction not found!");
NewInst = &Target.getInstruction(NewRec);
+ } else if (Name.ends_with("_EVEX")) {
+ if (auto *NewRec = Records.getDef(Name.drop_back(5)))
+ NewInst = &Target.getInstruction(NewRec);
} else {
// For each pre-compression instruction look for a match in the appropriate
// vector (instructions with the same opcode) using function object
``````````
</details>
https://github.com/llvm/llvm-project/pull/77202
More information about the llvm-commits
mailing list