[llvm] r293087 - GlobalISel: rework getOrCreateVReg to avoid double lookup. NFC.
Tim Northover via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 25 12:58:22 PST 2017
Author: tnorthover
Date: Wed Jan 25 14:58:22 2017
New Revision: 293087
URL: http://llvm.org/viewvc/llvm-project?rev=293087&view=rev
Log:
GlobalISel: rework getOrCreateVReg to avoid double lookup. NFC.
Thanks to Quentin for suggesting the refactoring.
Modified:
llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
Modified: llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp?rev=293087&r1=293086&r2=293087&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/IRTranslator.cpp Wed Jan 25 14:58:22 2017
@@ -60,30 +60,30 @@ void IRTranslator::getAnalysisUsage(Anal
unsigned IRTranslator::getOrCreateVReg(const Value &Val) {
unsigned &ValReg = ValToVReg[&Val];
- // Check if this is the first time we see Val.
- if (!ValReg) {
- // Fill ValRegsSequence with the sequence of registers
- // we need to concat together to produce the value.
- assert(Val.getType()->isSized() &&
- "Don't know how to create an empty vreg");
- unsigned VReg = MRI->createGenericVirtualRegister(LLT{*Val.getType(), *DL});
- ValReg = VReg;
-
- if (auto CV = dyn_cast<Constant>(&Val)) {
- bool Success = translate(*CV, VReg);
- if (!Success) {
- if (!TPC->isGlobalISelAbortEnabled()) {
- MF->getProperties().set(
- MachineFunctionProperties::Property::FailedISel);
- return VReg;
- }
- reportTranslationError(Val, "unable to translate constant");
+
+ if (ValReg)
+ return ValReg;
+
+ // Fill ValRegsSequence with the sequence of registers
+ // we need to concat together to produce the value.
+ assert(Val.getType()->isSized() &&
+ "Don't know how to create an empty vreg");
+ unsigned VReg = MRI->createGenericVirtualRegister(LLT{*Val.getType(), *DL});
+ ValReg = VReg;
+
+ if (auto CV = dyn_cast<Constant>(&Val)) {
+ bool Success = translate(*CV, VReg);
+ if (!Success) {
+ if (!TPC->isGlobalISelAbortEnabled()) {
+ MF->getProperties().set(
+ MachineFunctionProperties::Property::FailedISel);
+ return VReg;
}
+ reportTranslationError(Val, "unable to translate constant");
}
}
- // Look Val up again in case the reference has been invalidated since.
- return ValToVReg[&Val];
+ return VReg;
}
int IRTranslator::getOrCreateFrameIndex(const AllocaInst &AI) {
More information about the llvm-commits
mailing list