Chromium Code Reviews| Index: src/IceTargetLoweringARM32.cpp |
| diff --git a/src/IceTargetLoweringARM32.cpp b/src/IceTargetLoweringARM32.cpp |
| index 4b70dadde7fccbb823684e6e2efab2c277dde208..dfb13df63222eeca8b483f71da4ddedab09bdb0b 100644 |
| --- a/src/IceTargetLoweringARM32.cpp |
| +++ b/src/IceTargetLoweringARM32.cpp |
| @@ -346,7 +346,7 @@ void TargetARM32::staticInit(GlobalContext *Ctx) { |
| filterTypeToRegisterSet( |
| Ctx, RegARM32::Reg_NUM, TypeToRegisterSet, |
| - llvm::array_lengthof(TypeToRegisterSet), [](int32_t RegNum) -> IceString { |
| + llvm::array_lengthof(TypeToRegisterSet), [](RegNumT RegNum) -> IceString { |
| // This function simply removes ", " from the register name. |
| IceString Name = RegARM32::getRegName(RegNum); |
| constexpr const char RegSeparator[] = ", "; |
| @@ -382,7 +382,7 @@ void copyRegAllocFromInfWeightVariable64On32(const VarList &Vars) { |
| } |
| Lo->setRegNum(FirstReg); |
| Lo->setMustHaveReg(); |
| - Hi->setRegNum(FirstReg + 1); |
| + Hi->setRegNum(RegNumT::fixme(FirstReg + 1)); |
| Hi->setMustHaveReg(); |
| } |
| } |
| @@ -390,7 +390,7 @@ void copyRegAllocFromInfWeightVariable64On32(const VarList &Vars) { |
| uint32_t TargetARM32::getCallStackArgumentsSizeBytes(const InstCall *Call) { |
| TargetARM32::CallingConv CC; |
| - int32_t DummyReg; |
| + RegNumT DummyReg; |
| size_t OutArgsSizeBytes = 0; |
| for (SizeT i = 0, NumArgs = Call->getNumArgs(); i < NumArgs; ++i) { |
| Operand *Arg = legalizeUndef(Call->getArg(i)); |
| @@ -902,13 +902,12 @@ bool TargetARM32::doBranchOpt(Inst *I, const CfgNode *NextNode) { |
| return false; |
| } |
| -IceString TargetARM32::getRegName(SizeT RegNum, Type Ty) const { |
| - assert(RegNum < RegARM32::Reg_NUM); |
| +IceString TargetARM32::getRegName(RegNumT RegNum, Type Ty) const { |
| (void)Ty; |
| return RegARM32::getRegName(RegNum); |
| } |
| -Variable *TargetARM32::getPhysicalRegister(SizeT RegNum, Type Ty) { |
| +Variable *TargetARM32::getPhysicalRegister(RegNumT RegNum, Type Ty) { |
| static const Type DefaultType[] = { |
| #define X(val, encode, name, cc_arg, scratch, preserved, stackptr, frameptr, \ |
| isGPR, isInt, isI64Pair, isFP32, isFP64, isVec128, alias_init) \ |
| @@ -919,14 +918,14 @@ Variable *TargetARM32::getPhysicalRegister(SizeT RegNum, Type Ty) { |
| #undef X |
| }; |
| - assert(RegNum < RegARM32::Reg_NUM); |
| + assert(unsigned(RegNum) < RegARM32::Reg_NUM); |
| if (Ty == IceType_void) { |
| - assert(RegNum < llvm::array_lengthof(DefaultType)); |
| + assert(unsigned(RegNum) < llvm::array_lengthof(DefaultType)); |
| Ty = DefaultType[RegNum]; |
| } |
| if (PhysicalRegisters[Ty].empty()) |
| PhysicalRegisters[Ty].resize(RegARM32::Reg_NUM); |
| - assert(RegNum < PhysicalRegisters[Ty].size()); |
| + assert(unsigned(RegNum) < PhysicalRegisters[Ty].size()); |
| Variable *Reg = PhysicalRegisters[Ty][RegNum]; |
| if (Reg == nullptr) { |
| Reg = Func->makeVariable(Ty); |
| @@ -963,8 +962,8 @@ void TargetARM32::emitVariable(const Variable *Var) const { |
| } |
| assert(!Var->isRematerializable()); |
| int32_t Offset = Var->getStackOffset(); |
| - int32_t BaseRegNum = Var->getBaseRegNum(); |
| - if (BaseRegNum == Variable::NoRegister) { |
| + RegNumT BaseRegNum = Var->getBaseRegNum(); |
| + if (BaseRegNum == RegNumT::NoRegister) { |
| BaseRegNum = getFrameOrStackReg(); |
| } |
| const Type VarTy = Var->getType(); |
| @@ -984,7 +983,7 @@ TargetARM32::CallingConv::CallingConv() |
| FP64Args(FP64ArgInitializer.rbegin(), FP64ArgInitializer.rend()), |
| Vec128Args(Vec128ArgInitializer.rbegin(), Vec128ArgInitializer.rend()) {} |
| -bool TargetARM32::CallingConv::argInGPR(Type Ty, int32_t *Reg) { |
| +bool TargetARM32::CallingConv::argInGPR(Type Ty, RegNumT *Reg) { |
| CfgVector<SizeT> *Source; |
| switch (Ty) { |
| @@ -1026,7 +1025,7 @@ void TargetARM32::CallingConv::discardUnavailableGPRsAndTheirAliases( |
| } |
| } |
| -bool TargetARM32::CallingConv::argInVFP(Type Ty, int32_t *Reg) { |
| +bool TargetARM32::CallingConv::argInVFP(Type Ty, RegNumT *Reg) { |
| CfgVector<SizeT> *Source; |
| switch (Ty) { |
| @@ -1076,7 +1075,7 @@ void TargetARM32::lowerArguments() { |
| for (SizeT I = 0, E = Args.size(); I < E; ++I) { |
| Variable *Arg = Args[I]; |
| Type Ty = Arg->getType(); |
| - int RegNum; |
| + RegNumT RegNum; |
| if (isScalarIntegerType(Ty)) { |
| if (!CC.argInGPR(Ty, &RegNum)) { |
| continue; |
| @@ -1362,7 +1361,7 @@ void TargetARM32::addProlog(CfgNode *Node) { |
| size_t InArgsSizeBytes = 0; |
| TargetARM32::CallingConv CC; |
| for (Variable *Arg : Args) { |
| - int32_t DummyReg; |
| + RegNumT DummyReg; |
| const Type Ty = Arg->getType(); |
| // Skip arguments passed in registers. |
| @@ -1481,7 +1480,7 @@ bool TargetARM32::isLegalMemOffset(Type Ty, int32_t Offset) const { |
| } |
| Variable *TargetARM32::PostLoweringLegalizer::newBaseRegister( |
| - Variable *Base, int32_t Offset, int32_t ScratchRegNum) { |
| + Variable *Base, int32_t Offset, RegNumT ScratchRegNum) { |
| // Legalize will likely need a movw/movt combination, but if the top bits are |
| // all 0 from negating the offset and subtracting, we could use that instead. |
| const bool ShouldSub = Offset != 0 && (-Offset & 0xFFFF0000) == 0; |
| @@ -1500,7 +1499,7 @@ Variable *TargetARM32::PostLoweringLegalizer::newBaseRegister( |
| if (ScratchRegNum == Target->getReservedTmpReg()) { |
| const bool BaseIsStackOrFramePtr = |
| - Base->getRegNum() == static_cast<int32_t>(Target->getFrameOrStackReg()); |
| + Base->getRegNum() == Target->getFrameOrStackReg(); |
| // There is currently no code path that would trigger this assertion, so we |
| // leave this assertion here in case it is ever violated. This is not a |
| // fatal error (thus the use of assert() and not llvm::report_fatal_error) |
| @@ -1607,10 +1606,9 @@ void TargetARM32::PostLoweringLegalizer::legalizeMov(InstARM32Mov *MovInstr) { |
| // ExtraOffset is only needed for frame-pointer based frames as we have |
| // to account for spill storage. |
| - const int32_t ExtraOffset = |
| - (static_cast<SizeT>(Var->getRegNum()) == Target->getFrameReg()) |
| - ? Target->getFrameFixedAllocaOffset() |
| - : 0; |
| + const int32_t ExtraOffset = (Var->getRegNum() == Target->getFrameReg()) |
| + ? Target->getFrameFixedAllocaOffset() |
| + : 0; |
| const int32_t Offset = Var->getStackOffset() + ExtraOffset; |
| Variable *Base = Target->getPhysicalRegister(Var->getRegNum()); |
| @@ -1678,10 +1676,9 @@ TargetARM32::PostLoweringLegalizer::legalizeMemOperand(OperandARM32Mem *Mem, |
| Variable *Base = Mem->getBase(); |
| int32_t Offset = Mem->isRegReg() ? 0 : Mem->getOffset()->getValue(); |
| if (Base->isRematerializable()) { |
| - const int32_t ExtraOffset = |
| - (static_cast<SizeT>(Base->getRegNum()) == Target->getFrameReg()) |
| - ? Target->getFrameFixedAllocaOffset() |
| - : 0; |
| + const int32_t ExtraOffset = (Base->getRegNum() == Target->getFrameReg()) |
| + ? Target->getFrameFixedAllocaOffset() |
| + : 0; |
| Offset += Base->getStackOffset() + ExtraOffset; |
| Base = Target->getPhysicalRegister(Base->getRegNum()); |
| assert(!Base->isRematerializable()); |
| @@ -1901,7 +1898,7 @@ llvm::SmallBitVector TargetARM32::getRegisterSet(RegSetMask Include, |
| RegSetMask Exclude) const { |
| llvm::SmallBitVector Registers(RegARM32::Reg_NUM); |
| - for (int32_t i = 0; i < RegARM32::Reg_NUM; ++i) { |
| + for (uint32_t i = 0; i < RegARM32::Reg_NUM; ++i) { |
|
Eric Holk
2016/02/08 19:37:10
Would something like a Register iterator make sens
Jim Stichnoth
2016/02/09 19:33:39
Good idea for future work. :)
I had thought about
Eric Holk
2016/02/10 01:11:30
Cool :)
|
| const auto &Entry = RegARM32::RegTable[i]; |
| if (Entry.Scratch && (Include & RegSet_CallerSave)) |
| Registers[i] = true; |
| @@ -3361,8 +3358,8 @@ void TargetARM32::lowerCall(const InstCall *Instr) { |
| // Assign arguments to registers and stack. Also reserve stack. |
| TargetARM32::CallingConv CC; |
| // Pair of Arg Operand -> GPR number assignments. |
| - llvm::SmallVector<std::pair<Operand *, int32_t>, NumGPRArgs> GPRArgs; |
| - llvm::SmallVector<std::pair<Operand *, int32_t>, NumFP32Args> FPArgs; |
| + llvm::SmallVector<std::pair<Operand *, RegNumT>, NumGPRArgs> GPRArgs; |
| + llvm::SmallVector<std::pair<Operand *, RegNumT>, NumFP32Args> FPArgs; |
| // Pair of Arg Operand -> stack offset. |
| llvm::SmallVector<std::pair<Operand *, int32_t>, 8> StackArgs; |
| size_t ParameterAreaSizeBytes = 0; |
| @@ -3373,7 +3370,7 @@ void TargetARM32::lowerCall(const InstCall *Instr) { |
| Operand *Arg = legalizeUndef(Instr->getArg(i)); |
| const Type Ty = Arg->getType(); |
| bool InReg = false; |
| - int32_t Reg; |
| + RegNumT Reg; |
| if (isScalarIntegerType(Ty)) { |
| InReg = CC.argInGPR(Ty, &Reg); |
| } else { |
| @@ -5457,7 +5454,7 @@ void TargetARM32::prelowerPhis() { |
| PhiLowering::prelowerPhis32Bit<TargetARM32>(this, Context.getNode(), Func); |
| } |
| -Variable *TargetARM32::makeVectorOfZeros(Type Ty, int32_t RegNum) { |
| +Variable *TargetARM32::makeVectorOfZeros(Type Ty, RegNumT RegNum) { |
| Variable *Reg = makeReg(Ty, RegNum); |
| Context.insert<InstFakeDef>(Reg); |
| UnimplementedError(Func->getContext()->getFlags()); |
| @@ -5466,7 +5463,7 @@ Variable *TargetARM32::makeVectorOfZeros(Type Ty, int32_t RegNum) { |
| // Helper for legalize() to emit the right code to lower an operand to a |
| // register of the appropriate type. |
| -Variable *TargetARM32::copyToReg(Operand *Src, int32_t RegNum) { |
| +Variable *TargetARM32::copyToReg(Operand *Src, RegNumT RegNum) { |
| Type Ty = Src->getType(); |
| Variable *Reg = makeReg(Ty, RegNum); |
| if (auto *Mem = llvm::dyn_cast<OperandARM32Mem>(Src)) { |
| @@ -5479,7 +5476,7 @@ Variable *TargetARM32::copyToReg(Operand *Src, int32_t RegNum) { |
| // TODO(jpp): remove unneeded else clauses in legalize. |
| Operand *TargetARM32::legalize(Operand *From, LegalMask Allowed, |
| - int32_t RegNum) { |
| + RegNumT RegNum) { |
| Type Ty = From->getType(); |
| // Assert that a physical register is allowed. To date, all calls to |
| // legalize() allow a physical register. Legal_Flex converts registers to the |
| @@ -5487,7 +5484,7 @@ Operand *TargetARM32::legalize(Operand *From, LegalMask Allowed, |
| assert(Allowed & Legal_Reg); |
| // Copied ipsis literis from TargetX86Base<Machine>. |
| - if (RegNum == Variable::NoRegister) { |
| + if (RegNum == RegNumT::NoRegister) { |
| if (Variable *Subst = getContext().availabilityGet(From)) { |
| // At this point we know there is a potential substitution available. |
| if (!Subst->isRematerializable() && Subst->mustHaveReg() && |
| @@ -5671,7 +5668,7 @@ Operand *TargetARM32::legalize(Operand *From, LegalMask Allowed, |
| // register, or |
| // RegNum is required and Var->getRegNum() doesn't match. |
| if ((!(Allowed & Legal_Mem) && !MustHaveRegister) || |
| - (RegNum != Variable::NoRegister && RegNum != Var->getRegNum())) { |
| + (RegNum != RegNumT::NoRegister && RegNum != Var->getRegNum())) { |
| From = copyToReg(From, RegNum); |
| } |
| return From; |
| @@ -5682,12 +5679,12 @@ Operand *TargetARM32::legalize(Operand *From, LegalMask Allowed, |
| } |
| /// Provide a trivial wrapper to legalize() for this common usage. |
| -Variable *TargetARM32::legalizeToReg(Operand *From, int32_t RegNum) { |
| +Variable *TargetARM32::legalizeToReg(Operand *From, RegNumT RegNum) { |
| return llvm::cast<Variable>(legalize(From, Legal_Reg, RegNum)); |
| } |
| /// Legalize undef values to concrete values. |
| -Operand *TargetARM32::legalizeUndef(Operand *From, int32_t RegNum) { |
| +Operand *TargetARM32::legalizeUndef(Operand *From, RegNumT RegNum) { |
| Type Ty = From->getType(); |
| if (llvm::isa<ConstantUndef>(From)) { |
| // Lower undefs to zero. Another option is to lower undefs to an |
| @@ -5735,12 +5732,12 @@ Variable64On32 *TargetARM32::makeI64RegPair() { |
| return Reg; |
| } |
| -Variable *TargetARM32::makeReg(Type Type, int32_t RegNum) { |
| +Variable *TargetARM32::makeReg(Type Type, RegNumT RegNum) { |
| // There aren't any 64-bit integer registers for ARM32. |
| assert(Type != IceType_i64); |
| - assert(AllowTemporaryWithNoReg || RegNum != Variable::NoRegister); |
| + assert(AllowTemporaryWithNoReg || RegNum != RegNumT::NoRegister); |
| Variable *Reg = Func->makeVariable(Type); |
| - if (RegNum == Variable::NoRegister) |
| + if (RegNum == RegNumT::NoRegister) |
| Reg->setMustHaveReg(); |
| else |
| Reg->setRegNum(RegNum); |
| @@ -5748,7 +5745,7 @@ Variable *TargetARM32::makeReg(Type Type, int32_t RegNum) { |
| } |
| void TargetARM32::alignRegisterPow2(Variable *Reg, uint32_t Align, |
| - int32_t TmpRegNum) { |
| + RegNumT TmpRegNum) { |
| assert(llvm::isPowerOf2_32(Align)); |
| uint32_t RotateAmt; |
| uint32_t Immed_8; |
| @@ -5775,7 +5772,7 @@ void TargetARM32::postLower() { |
| } |
| void TargetARM32::makeRandomRegisterPermutation( |
| - llvm::SmallVectorImpl<int32_t> &Permutation, |
| + llvm::SmallVectorImpl<RegNumT> &Permutation, |
| const llvm::SmallBitVector &ExcludeRegisters, uint64_t Salt) const { |
| (void)Permutation; |
| (void)ExcludeRegisters; |