[SubZero] Handle relocatable constants for MIPS
The patch generates HI/LO modifiers for relocatable constants.
R=stichnot@chromium.org
Review URL: https://codereview.chromium.org/2420033002 .
Patch from Jaydeep Patil <jaydeep.patil@imgtec.com>.
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp
index 624c4a5..b7d36a6 100644
--- a/src/IceTargetLoweringMIPS32.cpp
+++ b/src/IceTargetLoweringMIPS32.cpp
@@ -4961,10 +4961,10 @@
return From;
}
if (auto *C = llvm::dyn_cast<ConstantRelocatable>(From)) {
- (void)C;
- // TODO(reed kotler): complete this case for proper implementation
Variable *Reg = makeReg(Ty, RegNum);
- Context.insert<InstFakeDef>(Reg);
+ Variable *TReg = makeReg(Ty, RegNum);
+ _lui(TReg, C, RO_Hi);
+ _addiu(Reg, TReg, C, RO_Lo);
return Reg;
} else if (auto *C32 = llvm::dyn_cast<ConstantInteger32>(From)) {
const uint32_t Value = C32->getValue();