[llvm] r362122 - [MIR-Canon] Add support for rewriting VRegs that are typed but don't have an RC.
Puyan Lotfi via llvm-commits
llvm-commits at lists.llvm.org
Thu May 30 11:06:28 PDT 2019
Author: zer0
Date: Thu May 30 11:06:28 2019
New Revision: 362122
URL: http://llvm.org/viewvc/llvm-project?rev=362122&view=rev
Log:
[MIR-Canon] Add support for rewriting VRegs that are typed but don't have an RC.
There were crashes (addrspace-memoperands.mir was only one of them) in MIR that
had operands that came from before register classes were set. With these
operands, creating a replacement vreg (for MIR-Canon's renaming) needs to use
the vreg type rather than the RegisterClass which is not present.
Differential Revision: https://reviews.llvm.org/D62543
Modified:
llvm/trunk/lib/CodeGen/MIRCanonicalizerPass.cpp
llvm/trunk/test/CodeGen/MIR/AArch64/addrspace-memoperands.mir
Modified: llvm/trunk/lib/CodeGen/MIRCanonicalizerPass.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MIRCanonicalizerPass.cpp?rev=362122&r1=362121&r2=362122&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/MIRCanonicalizerPass.cpp (original)
+++ llvm/trunk/lib/CodeGen/MIRCanonicalizerPass.cpp Thu May 30 11:06:28 2019
@@ -500,14 +500,15 @@ public:
return virtualVRegNumber;
}
- unsigned createVirtualRegister(const TargetRegisterClass *RC) {
+ unsigned createVirtualRegister(unsigned VReg) {
std::string S;
raw_string_ostream OS(S);
OS << "namedVReg" << (virtualVRegNumber & ~0x80000000);
OS.flush();
virtualVRegNumber++;
-
- return MRI.createVirtualRegister(RC, OS.str());
+ if (auto RC = MRI.getRegClassOrNull(VReg))
+ return MRI.createVirtualRegister(RC, OS.str());
+ return MRI.createGenericVirtualRegister(MRI.getType(VReg), OS.str());
}
};
} // namespace
@@ -557,7 +558,7 @@ GetVRegRenameMap(const std::vector<Typed
continue;
}
- auto Rename = NVC.createVirtualRegister(MRI.getRegClass(Reg));
+ auto Rename = NVC.createVirtualRegister(Reg);
if (VRegRenameMap.find(Reg) == VRegRenameMap.end()) {
LLVM_DEBUG(dbgs() << "Mapping vreg ";);
@@ -741,7 +742,7 @@ static bool runOnBasicBlock(MachineBasic
MachineInstr &MI = *MII++;
Changed = true;
unsigned vRegToRename = MI.getOperand(0).getReg();
- auto Rename = NVC.createVirtualRegister(MRI.getRegClass(vRegToRename));
+ auto Rename = NVC.createVirtualRegister(vRegToRename);
std::vector<MachineOperand *> RenameMOs;
for (auto &MO : MRI.reg_operands(vRegToRename)) {
Modified: llvm/trunk/test/CodeGen/MIR/AArch64/addrspace-memoperands.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/MIR/AArch64/addrspace-memoperands.mir?rev=362122&r1=362121&r2=362122&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/MIR/AArch64/addrspace-memoperands.mir (original)
+++ llvm/trunk/test/CodeGen/MIR/AArch64/addrspace-memoperands.mir Thu May 30 11:06:28 2019
@@ -1,4 +1,5 @@
# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass none -o - %s | FileCheck %s
+# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass mir-canonicalizer -o - %s
--- |
More information about the llvm-commits
mailing list