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

Unified Diff: src/IceTargetLoweringX8664Traits.h

Issue 1319203005: Subzero. Changes the Register Allocator so that it is aware of register (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: make format Created 5 years, 3 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
Index: src/IceTargetLoweringX8664Traits.h
diff --git a/src/IceTargetLoweringX8664Traits.h b/src/IceTargetLoweringX8664Traits.h
index a84dbc486e35fa79d8a8276a0ba30635ec99f856..2caaeb5524d6bf38669984307f3ab776d30811d3 100644
--- a/src/IceTargetLoweringX8664Traits.h
+++ b/src/IceTargetLoweringX8664Traits.h
@@ -25,6 +25,8 @@
#include "IceTargetLowering.h"
#include "IceTargetLoweringX8664.def"
+#include <array>
+
namespace Ice {
class TargetX8664;
@@ -325,20 +327,44 @@ template <> struct MachineTraits<TargetX8664> {
}
}
- static void initRegisterSet(llvm::SmallBitVector *IntegerRegisters,
- llvm::SmallBitVector *IntegerRegistersI8,
- llvm::SmallBitVector *FloatRegisters,
- llvm::SmallBitVector *VectorRegisters,
- llvm::SmallBitVector *ScratchRegs) {
+ static void initRegisterSet(
+ std::array<llvm::SmallBitVector, IceType_NUM> *TypeToRegisterSet,
+ std::array<llvm::SmallBitVector, RegisterSet::Reg_NUM> *RegisterAliases,
+ llvm::SmallBitVector *ScratchRegs) {
+ llvm::SmallBitVector IntegerRegisters(RegisterSet::Reg_NUM);
+ llvm::SmallBitVector IntegerRegistersI8(RegisterSet::Reg_NUM);
+ llvm::SmallBitVector FloatRegisters(RegisterSet::Reg_NUM);
+ llvm::SmallBitVector VectorRegisters(RegisterSet::Reg_NUM);
+ llvm::SmallBitVector InvalidRegisters(RegisterSet::Reg_NUM);
+ ScratchRegs->resize(RegisterSet::Reg_NUM);
+
#define X(val, encode, name64, name32, name16, name8, scratch, preserved, \
stackptr, frameptr, isInt, isFP) \
- (*IntegerRegisters)[RegisterSet::val] = isInt; \
- (*IntegerRegistersI8)[RegisterSet::val] = isInt; \
- (*FloatRegisters)[RegisterSet::val] = isFP; \
- (*VectorRegisters)[RegisterSet::val] = isFP; \
+ (IntegerRegisters)[RegisterSet::val] = isInt; \
+ (IntegerRegistersI8)[RegisterSet::val] = isInt; \
+ (FloatRegisters)[RegisterSet::val] = isFP; \
+ (VectorRegisters)[RegisterSet::val] = isFP; \
+ (*RegisterAliases)[RegisterSet::val].resize(RegisterSet::Reg_NUM); \
+ (*RegisterAliases)[RegisterSet::val].set(RegisterSet::val); \
(*ScratchRegs)[RegisterSet::val] = scratch;
REGX8664_TABLE;
#undef X
+
+ (*TypeToRegisterSet)[IceType_void] = InvalidRegisters;
+ (*TypeToRegisterSet)[IceType_i1] = IntegerRegistersI8;
+ (*TypeToRegisterSet)[IceType_i8] = IntegerRegistersI8;
+ (*TypeToRegisterSet)[IceType_i16] = IntegerRegisters;
+ (*TypeToRegisterSet)[IceType_i32] = IntegerRegisters;
+ (*TypeToRegisterSet)[IceType_i64] = IntegerRegisters;
+ (*TypeToRegisterSet)[IceType_f32] = FloatRegisters;
+ (*TypeToRegisterSet)[IceType_f64] = FloatRegisters;
+ (*TypeToRegisterSet)[IceType_v4i1] = VectorRegisters;
+ (*TypeToRegisterSet)[IceType_v8i1] = VectorRegisters;
+ (*TypeToRegisterSet)[IceType_v16i1] = VectorRegisters;
+ (*TypeToRegisterSet)[IceType_v16i8] = VectorRegisters;
+ (*TypeToRegisterSet)[IceType_v8i16] = VectorRegisters;
+ (*TypeToRegisterSet)[IceType_v4i32] = VectorRegisters;
+ (*TypeToRegisterSet)[IceType_v4f32] = VectorRegisters;
}
static llvm::SmallBitVector

Powered by Google App Engine
This is Rietveld 408576698