Convert RegClass::IsColorUsedArr from a dynamically allocated array to
a vector. This makes asserting on array bounds easier.
llvm-svn: 2731
diff --git a/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp b/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp
index 11a8251..da40826 100644
--- a/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp
+++ b/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp
@@ -18,7 +18,7 @@
// If both above fail, spill.
//
//-----------------------------------------------------------------------------
-void SparcIntRegClass::colorIGNode(IGNode * Node, bool IsColorUsedArr[]) const {
+void SparcIntRegClass::colorIGNode(IGNode * Node, vector<bool> &IsColorUsedArr) const {
LiveRange *LR = Node->getParentLR();
if( DEBUG_RA ) {
@@ -30,7 +30,7 @@
unsigned SugCol = LR->getSuggestedColor();
- if( ! IsColorUsedArr[ SugCol ] ) {
+ if (!IsColorUsedArr[SugCol]) {
if( LR->isSuggestedColorUsable() ) {
@@ -71,7 +71,7 @@
// find first unused color
for( c=SearchStart; c < SparcIntRegOrder::NumOfAvailRegs; c++) {
- if( ! IsColorUsedArr[ c ] ) { ColorFound = true; break; }
+ if(!IsColorUsedArr[c] ) { ColorFound = true; break; }
}
if( ColorFound) {
@@ -130,7 +130,8 @@
// If a color is still not fond, mark for spilling
//
//----------------------------------------------------------------------------
-void SparcFloatRegClass::colorIGNode(IGNode * Node,bool IsColorUsedArr[]) const{
+void SparcFloatRegClass::colorIGNode(IGNode * Node,
+ vector<bool> &IsColorUsedArr) const{
LiveRange *LR = Node->getParentLR();
// Mark the second color for double-precision registers:
@@ -175,7 +176,7 @@
int ColorFound = -1; // have we found a color yet?
bool isCallInterf = LR->isCallInterference();
- // if value is a double - search the double only reigon (f32 - f63)
+ // if value is a double - search the double only region (f32 - f63)
// i.e. we try to allocate f32 - f63 first for doubles since singles
// cannot go there. By doing that, we provide more space for singles
// in f0 - f31
@@ -243,7 +244,7 @@
int SparcFloatRegClass::findFloatColor(const LiveRange *LR,
unsigned Start, unsigned End,
- bool IsColorUsedArr[]) const {
+ vector<bool> &IsColorUsedArr) const {
bool ColorFound = false;
unsigned c;
diff --git a/llvm/lib/Target/Sparc/SparcRegClassInfo.h b/llvm/lib/Target/Sparc/SparcRegClassInfo.h
index ab5b35c..f07d0aa 100644
--- a/llvm/lib/Target/Sparc/SparcRegClassInfo.h
+++ b/llvm/lib/Target/Sparc/SparcRegClassInfo.h
@@ -82,7 +82,7 @@
SparcIntRegOrder::NumOfAvailRegs,
SparcIntRegOrder::NumOfAllRegs) { }
- void colorIGNode(IGNode *Node, bool IsColorUsedArr[]) const;
+ void colorIGNode(IGNode *Node, std::vector<bool> &IsColorUsedArr) const;
inline bool isRegVolatile(int Reg) const {
return (Reg < (int) SparcIntRegOrder::StartOfNonVolatileRegs);
@@ -144,14 +144,14 @@
class SparcFloatRegClass : public MachineRegClassInfo {
int findFloatColor(const LiveRange *LR, unsigned Start,
- unsigned End, bool IsColorUsedArr[]) const;
+ unsigned End, std::vector<bool> &IsColorUsedArr) const;
public:
SparcFloatRegClass(unsigned ID)
: MachineRegClassInfo(ID,
SparcFloatRegOrder::NumOfAvailRegs,
SparcFloatRegOrder::NumOfAllRegs) {}
- void colorIGNode(IGNode *Node, bool IsColorUsedArr[]) const;
+ void colorIGNode(IGNode *Node, std::vector<bool> &IsColorUsedArr) const;
// according to Sparc 64 ABI, all %fp regs are volatile
inline bool isRegVolatile(int Reg) const { return true; }
@@ -192,7 +192,7 @@
SparcIntCCRegClass(unsigned ID)
: MachineRegClassInfo(ID, 1, 2) { }
- inline void colorIGNode(IGNode *Node, bool IsColorUsedArr[]) const {
+ void colorIGNode(IGNode *Node, std::vector<bool> &IsColorUsedArr) const {
if (IsColorUsedArr[0])
Node->getParentLR()->markForSpill();
else
@@ -231,13 +231,14 @@
SparcFloatCCRegClass(unsigned ID)
: MachineRegClassInfo(ID, 4, 4) { }
- void colorIGNode(IGNode *Node, bool IsColorUsedArr[]) const {
- int c;
- for(c=0; c < 4 && IsColorUsedArr[c] ; ++c) ; // find unused color
- if (c < 4)
- Node->setColor(c);
- else
- Node->getParentLR()->markForSpill();
+ void colorIGNode(IGNode *Node, std::vector<bool> &IsColorUsedArr) const {
+ for(unsigned c = 0; c != 4; ++c)
+ if (!IsColorUsedArr[c]) { // find unused color
+ Node->setColor(c);
+ return;
+ }
+
+ Node->getParentLR()->markForSpill();
}
// according to Sparc 64 ABI, all %fp CC regs are volatile