Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: src/IceRegAlloc.cpp

Issue 1738443002: Subzero. Performance tweaks. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Addresses comments -- all of them Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceRegAlloc.h ('k') | src/IceTLS.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceRegAlloc.cpp
diff --git a/src/IceRegAlloc.cpp b/src/IceRegAlloc.cpp
index 11a4a1b0ec44a755d76398e573baa1d44348aa2d..8ae852c8abd70482714b4911ee69864355efc5f5 100644
--- a/src/IceRegAlloc.cpp
+++ b/src/IceRegAlloc.cpp
@@ -15,6 +15,7 @@
#include "IceRegAlloc.h"
+#include "IceBitVector.h"
#include "IceCfg.h"
#include "IceCfgNode.h"
#include "IceInst.h"
@@ -78,7 +79,7 @@ void dumpLiveRange(const Variable *Var, const Cfg *Func) {
}
int32_t findMinWeightIndex(
- const llvm::SmallBitVector &RegMask,
+ const SmallBitVector &RegMask,
const llvm::SmallVector<RegWeight, LinearScan::REGS_SIZE> &Weights) {
int MinWeightIndex = -1;
for (RegNumT i : RegNumBVIter(RegMask)) {
@@ -413,7 +414,7 @@ void LinearScan::addSpillFill(IterationState &Iter) {
FOREACH_VAR_IN_INST(Var, *I) {
if (!Var->hasRegTmp())
continue;
- const llvm::SmallBitVector &Aliases = *RegAliases[Var->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[Var->getRegNumTmp()];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
Iter.RegMask[RegAlias] = false;
}
@@ -458,7 +459,7 @@ void LinearScan::handleActiveRangeExpiredOrInactive(const Variable *Cur) {
if (Moved) {
// Decrement Item from RegUses[].
assert(Item->hasRegTmp());
- const llvm::SmallBitVector &Aliases = *RegAliases[Item->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[Item->getRegNumTmp()];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
--RegUses[RegAlias];
assert(RegUses[RegAlias] >= 0);
@@ -482,7 +483,7 @@ void LinearScan::handleInactiveRangeExpiredOrReactivated(const Variable *Cur) {
moveItem(Inactive, Index, Active);
// Increment Item in RegUses[].
assert(Item->hasRegTmp());
- const llvm::SmallBitVector &Aliases = *RegAliases[Item->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[Item->getRegNumTmp()];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
assert(RegUses[RegAlias] >= 0);
++RegUses[RegAlias];
@@ -524,7 +525,7 @@ void LinearScan::findRegisterPreference(IterationState &Iter) {
// That register must be one in the RegMask set, e.g. don't try to prefer
// the stack pointer as a result of the stacksave intrinsic.
- const llvm::SmallBitVector &Aliases = *RegAliases[SrcVar->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[SrcVar->getRegNumTmp()];
const int SrcReg = (Iter.RegMask & Aliases).find_first();
if (SrcReg == -1)
continue;
@@ -561,7 +562,7 @@ void LinearScan::filterFreeWithInactiveRanges(IterationState &Iter) {
for (const Variable *Item : Inactive) {
if (!Item->rangeOverlaps(Iter.Cur))
continue;
- const llvm::SmallBitVector &Aliases = *RegAliases[Item->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[Item->getRegNumTmp()];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
// Don't assert(Iter.Free[RegAlias]) because in theory (though probably
// never in practice) there could be two inactive variables that were
@@ -593,7 +594,7 @@ void LinearScan::filterFreeWithPrecoloredRanges(IterationState &Iter) {
break;
if (!Item->rangeOverlaps(Iter.Cur))
continue;
- const llvm::SmallBitVector &Aliases =
+ const auto &Aliases =
*RegAliases[Item->getRegNum()]; // Note: not getRegNumTmp()
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
Iter.Weights[RegAlias].setWeight(RegWeight::Inf);
@@ -616,7 +617,7 @@ void LinearScan::allocatePrecoloredRegister(Variable *Cur) {
assert(Cur->getRegNumTmp() == RegNum);
dumpLiveRangeTrace("Precoloring ", Cur);
Active.push_back(Cur);
- const llvm::SmallBitVector &Aliases = *RegAliases[RegNum];
+ const auto &Aliases = *RegAliases[RegNum];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
assert(RegUses[RegAlias] >= 0);
++RegUses[RegAlias];
@@ -629,7 +630,7 @@ void LinearScan::allocatePrecoloredRegister(Variable *Cur) {
void LinearScan::allocatePreferredRegister(IterationState &Iter) {
Iter.Cur->setRegNumTmp(Iter.PreferReg);
dumpLiveRangeTrace("Preferring ", Iter.Cur);
- const llvm::SmallBitVector &Aliases = *RegAliases[Iter.PreferReg];
+ const auto &Aliases = *RegAliases[Iter.PreferReg];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
assert(RegUses[RegAlias] >= 0);
++RegUses[RegAlias];
@@ -645,7 +646,7 @@ void LinearScan::allocateFreeRegister(IterationState &Iter, bool Filtered) {
dumpLiveRangeTrace("Allocating Y ", Iter.Cur);
else
dumpLiveRangeTrace("Allocating X ", Iter.Cur);
- const llvm::SmallBitVector &Aliases = *RegAliases[RegNum];
+ const auto &Aliases = *RegAliases[RegNum];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
assert(RegUses[RegAlias] >= 0);
++RegUses[RegAlias];
@@ -658,7 +659,7 @@ void LinearScan::handleNoFreeRegisters(IterationState &Iter) {
for (const Variable *Item : Active) {
assert(Item->rangeOverlaps(Iter.Cur));
assert(Item->hasRegTmp());
- const llvm::SmallBitVector &Aliases = *RegAliases[Item->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[Item->getRegNumTmp()];
// We add the Item's weight to each alias/subregister to represent that,
// should we decide to pick any of them, then we would incur that many
// memory accesses.
@@ -672,7 +673,7 @@ void LinearScan::handleNoFreeRegisters(IterationState &Iter) {
if (!Item->rangeOverlaps(Iter.Cur))
continue;
assert(Item->hasRegTmp());
- const llvm::SmallBitVector &Aliases = *RegAliases[Item->getRegNumTmp()];
+ const auto &Aliases = *RegAliases[Item->getRegNumTmp()];
RegWeight W = Item->getWeight(Func);
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
Iter.Weights[RegAlias].addWeight(W);
@@ -726,14 +727,14 @@ void LinearScan::handleNoFreeRegisters(IterationState &Iter) {
// Evict all live ranges in Active that register number MinWeightIndex is
// assigned to.
- const llvm::SmallBitVector &Aliases = *RegAliases[MinWeightIndex];
+ const auto &Aliases = *RegAliases[MinWeightIndex];
for (SizeT I = Active.size(); I > 0; --I) {
const SizeT Index = I - 1;
Variable *Item = Active[Index];
const auto RegNum = Item->getRegNumTmp();
if (Aliases[RegNum]) {
dumpLiveRangeTrace("Evicting A ", Item);
- const llvm::SmallBitVector &Aliases = *RegAliases[RegNum];
+ const auto &Aliases = *RegAliases[RegNum];
for (RegNumT RegAlias : RegNumBVIter(Aliases)) {
--RegUses[RegAlias];
assert(RegUses[RegAlias] >= 0);
@@ -771,9 +772,9 @@ void LinearScan::handleNoFreeRegisters(IterationState &Iter) {
dumpLiveRangeTrace("Allocating Z ", Iter.Cur);
}
-void LinearScan::assignFinalRegisters(
- const llvm::SmallBitVector &RegMaskFull,
- const llvm::SmallBitVector &PreDefinedRegisters, bool Randomized) {
+void LinearScan::assignFinalRegisters(const SmallBitVector &RegMaskFull,
+ const SmallBitVector &PreDefinedRegisters,
+ bool Randomized) {
const size_t NumRegisters = RegMaskFull.size();
llvm::SmallVector<RegNumT, REGS_SIZE> Permutation(NumRegisters);
if (Randomized) {
@@ -825,15 +826,14 @@ void LinearScan::assignFinalRegisters(
//
// Requires running Cfg::liveness(Liveness_Intervals) in preparation. Results
// are assigned to Variable::RegNum for each Variable.
-void LinearScan::scan(const llvm::SmallBitVector &RegMaskFull,
- bool Randomized) {
+void LinearScan::scan(const SmallBitVector &RegMaskFull, bool Randomized) {
TimerMarker T(TimerStack::TT_linearScan, Func);
assert(RegMaskFull.any()); // Sanity check
if (Verbose)
Ctx->lockStr();
Func->resetCurrentNode();
const size_t NumRegisters = RegMaskFull.size();
- llvm::SmallBitVector PreDefinedRegisters(NumRegisters);
+ SmallBitVector PreDefinedRegisters(NumRegisters);
if (Randomized) {
for (Variable *Var : UnhandledPrecolored) {
PreDefinedRegisters[Var->getRegNum()] = true;
@@ -855,7 +855,7 @@ void LinearScan::scan(const llvm::SmallBitVector &RegMaskFull,
const TargetLowering::RegSetMask RegsInclude =
TargetLowering::RegSet_CallerSave;
const TargetLowering::RegSetMask RegsExclude = TargetLowering::RegSet_None;
- const llvm::SmallBitVector KillsMask =
+ const SmallBitVector KillsMask =
Target->getRegisterSet(RegsInclude, RegsExclude);
// Allocate memory once outside the loop.
@@ -901,7 +901,7 @@ void LinearScan::scan(const llvm::SmallBitVector &RegMaskFull,
// Disable AllowOverlap if an Active variable, which is not Prefer, shares
// Prefer's register, and has a definition within Cur's live range.
if (Iter.AllowOverlap) {
- const llvm::SmallBitVector &Aliases = *RegAliases[Iter.PreferReg];
+ const auto &Aliases = *RegAliases[Iter.PreferReg];
for (const Variable *Item : Active) {
const RegNumT RegNum = Item->getRegNumTmp();
if (Item != Iter.Prefer && Aliases[RegNum] &&
« no previous file with comments | « src/IceRegAlloc.h ('k') | src/IceTLS.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698