llvm::SmallBitVector Float64Registers(RegARM32::Reg_NUM);
llvm::SmallBitVector VectorRegisters(RegARM32::Reg_NUM);
llvm::SmallBitVector InvalidRegisters(RegARM32::Reg_NUM);
- ScratchRegs.resize(RegARM32::Reg_NUM);
for (int i = 0; i < RegARM32::Reg_NUM; ++i) {
const auto &Entry = RegARM32::RegTable[i];
IntegerRegisters[i] = Entry.IsInt;
Float32Registers[i] = Entry.IsFP32;
Float64Registers[i] = Entry.IsFP64;
VectorRegisters[i] = Entry.IsVec128;
- ScratchRegs[i] = Entry.Scratch;
RegisterAliases[i].resize(RegARM32::Reg_NUM);
for (int j = 0; j < Entry.NumAliases; ++j) {
assert(i == j || !RegisterAliases[i][Entry.Aliases[j]]);
llvm::SmallBitVector TargetARM32::TypeToRegisterSet[IceType_NUM];
llvm::SmallBitVector TargetARM32::RegisterAliases[RegARM32::Reg_NUM];
-llvm::SmallBitVector TargetARM32::ScratchRegs;
} // end of namespace ARM32
} // end of namespace Ice
// TODO(jpp): std::array instead of array.
static llvm::SmallBitVector TypeToRegisterSet[RegARM32::RCARM32_NUM];
static llvm::SmallBitVector RegisterAliases[RegARM32::Reg_NUM];
- static llvm::SmallBitVector ScratchRegs;
llvm::SmallBitVector RegsUsed;
VarList PhysicalRegisters[IceType_NUM];
VarList PreservedGPRs;
llvm::SmallBitVector Float64Registers(RegMIPS32::Reg_NUM);
llvm::SmallBitVector VectorRegisters(RegMIPS32::Reg_NUM);
llvm::SmallBitVector InvalidRegisters(RegMIPS32::Reg_NUM);
- ScratchRegs.resize(RegMIPS32::Reg_NUM);
#define X(val, encode, name, scratch, preserved, stackptr, frameptr, isInt, \
isI64Pair, isFP32, isFP64, isVec128, alias_init) \
IntegerRegisters[RegMIPS32::val] = isInt; \
RegisterAliases[RegMIPS32::val].set(RegAlias); \
} \
RegisterAliases[RegMIPS32::val].resize(RegMIPS32::Reg_NUM); \
- assert(RegisterAliases[RegMIPS32::val][RegMIPS32::val]); \
- ScratchRegs[RegMIPS32::val] = scratch;
+ assert(RegisterAliases[RegMIPS32::val][RegMIPS32::val]);
REGMIPS32_TABLE;
#undef X
TypeToRegisterSet[IceType_void] = InvalidRegisters;
llvm::SmallBitVector TargetMIPS32::TypeToRegisterSet[IceType_NUM];
llvm::SmallBitVector TargetMIPS32::RegisterAliases[RegMIPS32::Reg_NUM];
-llvm::SmallBitVector TargetMIPS32::ScratchRegs;
} // end of namespace MIPS32
} // end of namespace Ice
bool NeedsStackAlignment = false;
static llvm::SmallBitVector TypeToRegisterSet[RCMIPS32_NUM];
static llvm::SmallBitVector RegisterAliases[RegMIPS32::Reg_NUM];
- static llvm::SmallBitVector ScratchRegs;
llvm::SmallBitVector RegsUsed;
VarList PhysicalRegisters[IceType_NUM];
TargetX86Base<X8632::Traits>::RegisterAliases = {{}};
template <>
-llvm::SmallBitVector
- TargetX86Base<X8632::Traits>::ScratchRegs = llvm::SmallBitVector();
-
-template <>
FixupKind TargetX86Base<X8632::Traits>::PcRelFixup =
TargetX86Base<X8632::Traits>::Traits::FK_PcRel;
static void initRegisterSet(
const ::Ice::ClFlags & /*Flags*/,
std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet,
- std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases,
- llvm::SmallBitVector *ScratchRegs) {
+ std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases) {
llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM);
llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM);
llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM);
llvm::SmallBitVector Trunc8RcvrRegisters(RegisterSet::Reg_NUM);
llvm::SmallBitVector AhRcvrRegisters(RegisterSet::Reg_NUM);
llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM);
- ScratchRegs->resize(RegisterSet::Reg_NUM);
static constexpr struct {
uint16_t Val;
unsigned Is16To8 : 1;
unsigned IsTrunc8Rcvr : 1;
unsigned IsAhRcvr : 1;
- unsigned Scratch : 1;
#define NUM_ALIASES_BITS 2
SizeT NumAliases : (NUM_ALIASES_BITS + 1);
uint16_t Aliases[1 << NUM_ALIASES_BITS];
isTrunc8Rcvr, isAhRcvr, aliases) \
{ \
RegisterSet::val, is64, is32, is16, is8, isXmm, is64To8, is32To8, is16To8, \
- isTrunc8Rcvr, isAhRcvr, scratch, (SizeOf aliases).size(), aliases, \
+ isTrunc8Rcvr, isAhRcvr, (SizeOf aliases).size(), aliases, \
} \
,
REGX8632_TABLE
(*RegisterAliases)[Entry.Val].set(Alias);
}
(*RegisterAliases)[Entry.Val].set(Entry.Val);
- (*ScratchRegs)[Entry.Val] = Entry.Scratch;
}
(*TypeToRegisterSet)[RC_void] = InvalidRegisters;
TargetX86Base<X8664::Traits>::RegisterAliases = {{}};
template <>
-llvm::SmallBitVector
- TargetX86Base<X8664::Traits>::ScratchRegs = llvm::SmallBitVector();
-
-template <>
FixupKind TargetX86Base<X8664::Traits>::PcRelFixup =
TargetX86Base<X8664::Traits>::Traits::FK_PcRel;
static void initRegisterSet(
const ::Ice::ClFlags &Flags,
std::array<llvm::SmallBitVector, RCX86_NUM> *TypeToRegisterSet,
- std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases,
- llvm::SmallBitVector *ScratchRegs) {
+ std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases) {
llvm::SmallBitVector IntegerRegistersI64(RegisterSet::Reg_NUM);
llvm::SmallBitVector IntegerRegistersI32(RegisterSet::Reg_NUM);
llvm::SmallBitVector IntegerRegistersI16(RegisterSet::Reg_NUM);
llvm::SmallBitVector Trunc8RcvrRegisters(RegisterSet::Reg_NUM);
llvm::SmallBitVector AhRcvrRegisters(RegisterSet::Reg_NUM);
llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM);
- ScratchRegs->resize(RegisterSet::Reg_NUM);
static constexpr struct {
uint16_t Val;
unsigned Is16To8 : 1;
unsigned IsTrunc8Rcvr : 1;
unsigned IsAhRcvr : 1;
- unsigned Scratch : 1;
#define NUM_ALIASES_BITS 2
SizeT NumAliases : (NUM_ALIASES_BITS + 1);
uint16_t Aliases[1 << NUM_ALIASES_BITS];
is16To8, isTrunc8Rcvr, isAhRcvr, aliases) \
{ \
RegisterSet::val, sboxres, is64, is32, is16, is8, isXmm, is64To8, is32To8, \
- is16To8, isTrunc8Rcvr, isAhRcvr, scratch, (SizeOf aliases).size(), \
- aliases, \
+ is16To8, isTrunc8Rcvr, isAhRcvr, (SizeOf aliases).size(), aliases, \
} \
,
REGX8664_TABLE
(Trunc16To8Registers)[Entry.Val] = Entry.Is16To8;
(Trunc8RcvrRegisters)[Entry.Val] = Entry.IsTrunc8Rcvr;
(AhRcvrRegisters)[Entry.Val] = Entry.IsAhRcvr;
- (*ScratchRegs)[Entry.Val] = Entry.Scratch;
}
(*TypeToRegisterSet)[RC_void] = InvalidRegisters;
static std::array<llvm::SmallBitVector, RCX86_NUM> TypeToRegisterSet;
static std::array<llvm::SmallBitVector, Traits::RegisterSet::Reg_NUM>
RegisterAliases;
- static llvm::SmallBitVector ScratchRegs;
llvm::SmallBitVector RegsUsed;
std::array<VarList, IceType_NUM> PhysicalRegisters;
// GotVar is a Variable that holds the GlobalOffsetTable address for Non-SFI
template <typename TraitsType>
void TargetX86Base<TraitsType>::staticInit(GlobalContext *Ctx) {
- Traits::initRegisterSet(Ctx->getFlags(), &TypeToRegisterSet, &RegisterAliases,
- &ScratchRegs);
+ Traits::initRegisterSet(Ctx->getFlags(), &TypeToRegisterSet,
+ &RegisterAliases);
filterTypeToRegisterSet(Ctx, Traits::RegisterSet::Reg_NUM,
TypeToRegisterSet.data(), TypeToRegisterSet.size(),
Traits::getRegName);