From b49865fa0292ece66e6aab17c67131841f2e8f39 Mon Sep 17 00:00:00 2001 From: Ruchira Sasanka Date: Fri, 19 Oct 2001 21:41:16 +0000 Subject: [PATCH] Added code so that colorIGNode does not unnecessarily reserve unusable Suggested colors for neighbors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@921 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/SparcV9/SparcV9RegClassInfo.cpp | 25 ++++++++++++++++------ lib/Target/SparcV9/SparcV9RegInfo.cpp | 1 - 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/lib/Target/SparcV9/SparcV9RegClassInfo.cpp b/lib/Target/SparcV9/SparcV9RegClassInfo.cpp index 02b67a17158..f79dd5817bb 100644 --- a/lib/Target/SparcV9/SparcV9RegClassInfo.cpp +++ b/lib/Target/SparcV9/SparcV9RegClassInfo.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; + } + } } diff --git a/lib/Target/SparcV9/SparcV9RegInfo.cpp b/lib/Target/SparcV9/SparcV9RegInfo.cpp index 60f4203c38c..3622510de8f 100644 --- a/lib/Target/SparcV9/SparcV9RegInfo.cpp +++ b/lib/Target/SparcV9/SparcV9RegInfo.cpp @@ -61,7 +61,6 @@ void UltraSparcRegInfo::suggestReg4CallAddr(const MachineInstr * CallMI) const MachineOperand & MO = ( MachineOperand &) CallMI->getOperand(2); MO.setRegForValue( getUnifiedRegNum( IntRegClassID,SparcIntRegOrder::o7) ); - }