Index: src/IceTargetLoweringMIPS32.cpp |
diff --git a/src/IceTargetLoweringMIPS32.cpp b/src/IceTargetLoweringMIPS32.cpp |
index 57f79f6a59b270daaf3282b920f8afe85b9d153a..4f1f7bff60e338f8e77becc3939859b664228f10 100644 |
--- a/src/IceTargetLoweringMIPS32.cpp |
+++ b/src/IceTargetLoweringMIPS32.cpp |
@@ -45,8 +45,8 @@ createTargetHeaderLowering(::Ice::GlobalContext *Ctx) { |
return ::Ice::MIPS32::TargetHeaderMIPS32::create(Ctx); |
} |
-void staticInit(const ::Ice::ClFlags &Flags) { |
- ::Ice::MIPS32::TargetMIPS32::staticInit(Flags); |
+void staticInit(::Ice::GlobalContext *Ctx) { |
+ ::Ice::MIPS32::TargetMIPS32::staticInit(Ctx); |
} |
} // end of namespace MIPS32 |
@@ -64,8 +64,8 @@ constexpr uint32_t MIPS32_MAX_GPR_ARG = 4; |
TargetMIPS32::TargetMIPS32(Cfg *Func) : TargetLowering(Func) {} |
-void TargetMIPS32::staticInit(const ClFlags &Flags) { |
- (void)Flags; |
+void TargetMIPS32::staticInit(GlobalContext *Ctx) { |
+ (void)Ctx; |
llvm::SmallBitVector IntegerRegisters(RegMIPS32::Reg_NUM); |
llvm::SmallBitVector I64PairRegisters(RegMIPS32::Reg_NUM); |
llvm::SmallBitVector Float32Registers(RegMIPS32::Reg_NUM); |
@@ -106,6 +106,11 @@ void TargetMIPS32::staticInit(const ClFlags &Flags) { |
TypeToRegisterSet[IceType_v8i16] = VectorRegisters; |
TypeToRegisterSet[IceType_v4i32] = VectorRegisters; |
TypeToRegisterSet[IceType_v4f32] = VectorRegisters; |
+ |
+ filterTypeToRegisterSet(Ctx, RegMIPS32::Reg_NUM, TypeToRegisterSet, |
+ RCMIPS32_NUM, [](int32_t RegNum) -> IceString { |
+ return RegMIPS32::getRegName(RegNum); |
+ }); |
} |
void TargetMIPS32::translateO2() { |
@@ -262,19 +267,28 @@ bool TargetMIPS32::doBranchOpt(Inst *I, const CfgNode *NextNode) { |
return false; |
} |
-IceString TargetMIPS32::getRegName(SizeT RegNum, Type Ty) const { |
- assert(RegNum < RegMIPS32::Reg_NUM); |
- (void)Ty; |
- static const char *RegNames[] = { |
+namespace { |
+ |
+const char *RegNames[RegMIPS32::Reg_NUM] = { |
#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \ |
isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
name, |
- REGMIPS32_TABLE |
+ REGMIPS32_TABLE |
#undef X |
- }; |
+}; |
+ |
+} // end of anonymous namespace |
+ |
+const char *RegMIPS32::getRegName(int32_t RegNum) { |
+ assert(RegNum < RegMIPS32::Reg_NUM); |
return RegNames[RegNum]; |
} |
+IceString TargetMIPS32::getRegName(SizeT RegNum, Type Ty) const { |
+ (void)Ty; |
+ return RegMIPS32::getRegName(RegNum); |
+} |
+ |
Variable *TargetMIPS32::getPhysicalRegister(SizeT RegNum, Type Ty) { |
if (Ty == IceType_void) |
Ty = IceType_i32; |