diff options
author | Ruchira Sasanka <sasanka@students.uiuc.edu> | 2001-10-19 21:41:16 +0000 |
---|---|---|
committer | Ruchira Sasanka <sasanka@students.uiuc.edu> | 2001-10-19 21:41:16 +0000 |
commit | 6a073498ba45bbc83d5265704e4a6fa1a5f7acf8 (patch) | |
tree | 7596a8357642a3f877a244b835c418d2577dcecd /llvm/lib/Target/Sparc/SparcRegClassInfo.cpp | |
parent | 01c55ba00c3c5b81404a18c315b0f1bf467529ce (diff) | |
download | bcm5719-llvm-6a073498ba45bbc83d5265704e4a6fa1a5f7acf8.tar.gz bcm5719-llvm-6a073498ba45bbc83d5265704e4a6fa1a5f7acf8.zip |
Added code so that colorIGNode does not unnecessarily reserve unusable
Suggested colors for neighbors.
llvm-svn: 921
Diffstat (limited to 'llvm/lib/Target/Sparc/SparcRegClassInfo.cpp')
-rw-r--r-- | llvm/lib/Target/Sparc/SparcRegClassInfo.cpp | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp b/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp index 02b67a17158..f79dd5817bb 100644 --- a/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp +++ b/llvm/lib/Target/Sparc/SparcRegClassInfo.cpp @@ -31,9 +31,13 @@ void SparcIntRegClass::colorIGNode(IGNode * Node, bool IsColorUsedArr[]) const if( NeighLR->hasColor() ) // if has a color IsColorUsedArr[ NeighLR->getColor() ] = true; // record that color - else if( NeighLR->hasSuggestedColor() ) // or has a suggest col - IsColorUsedArr[ NeighLR->getSuggestedColor() ] = true; - + else if( NeighLR->hasSuggestedColor() ) { + + // if the neighbout can use the suggested color + if( NeighLR-> isSuggestedColorUsable() ) + IsColorUsedArr[ NeighLR->getSuggestedColor() ] = true; + } + } if( DEBUG_RA ) { @@ -49,7 +53,7 @@ void SparcIntRegClass::colorIGNode(IGNode * Node, bool IsColorUsedArr[]) const if( ! IsColorUsedArr[ SugCol ] ) { - if(! (isRegVolatile( SugCol ) && LR->isCallInterference()) ) { + if( LR->isSuggestedColorUsable() ) { // if the suggested color is volatile, we should use it only if // there are no call interferences. Otherwise, it will get spilled. @@ -205,9 +209,16 @@ void SparcFloatRegClass::colorIGNode(IGNode * Node,bool IsColorUsedArr[]) const IsColorUsedArr[ (NeighLR->getColor()) + 1 ] = true; } else if( NeighLR->hasSuggestedColor() ) { // if neigh has sugg color - IsColorUsedArr[ NeighLR->getSuggestedColor() ] = true; - if( NeighLR->getTypeID() == Type::DoubleTyID ) - IsColorUsedArr[ (NeighLR->getSuggestedColor()) + 1 ] = true; + + if( NeighLR-> isSuggestedColorUsable() ) { + + // if the neighbout can use the suggested color + + IsColorUsedArr[ NeighLR->getSuggestedColor() ] = true; + if( NeighLR->getTypeID() == Type::DoubleTyID ) + IsColorUsedArr[ (NeighLR->getSuggestedColor()) + 1 ] = true; + } + } } |