aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-02-05 01:43:49 +0000
committerChris Lattner <sabre@nondot.org>2002-02-05 01:43:49 +0000
commit0665a5f1f5716a69982f4bcd654e5ace975d0c0a (patch)
tree67856963d43737337cb4c9c2d7940989d9e16341
parentf39f379f9ec2e2908c89fdc809c9665c7484edb1 (diff)
downloadexternal_llvm-0665a5f1f5716a69982f4bcd654e5ace975d0c0a.zip
external_llvm-0665a5f1f5716a69982f4bcd654e5ace975d0c0a.tar.gz
external_llvm-0665a5f1f5716a69982f4bcd654e5ace975d0c0a.tar.bz2
* Code Cleanups
* Introduce RAV to allow stream I/O instead of using printValue git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1710 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/LiveVar/LiveVarSet.h2
-rw-r--r--include/llvm/Analysis/LiveVar/ValueSet.h13
-rw-r--r--include/llvm/CodeGen/ValueSet.h13
-rw-r--r--lib/Analysis/LiveVar/BBLiveVar.cpp18
-rw-r--r--lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp2
-rw-r--r--lib/Analysis/LiveVar/ValueSet.cpp68
-rw-r--r--lib/CodeGen/RegAlloc/LiveRange.h157
-rw-r--r--lib/CodeGen/RegAlloc/LiveRangeInfo.cpp61
-rw-r--r--lib/CodeGen/RegAlloc/PhyRegAlloc.cpp36
-rw-r--r--lib/Target/SparcV9/LiveVar/BBLiveVar.cpp18
-rw-r--r--lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp2
-rw-r--r--lib/Target/SparcV9/LiveVar/ValueSet.cpp68
-rw-r--r--lib/Target/SparcV9/RegAlloc/LiveRange.h157
-rw-r--r--lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp61
-rw-r--r--lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp36
-rw-r--r--lib/Target/SparcV9/SparcV9RegInfo.cpp50
16 files changed, 300 insertions, 462 deletions
diff --git a/include/llvm/Analysis/LiveVar/LiveVarSet.h b/include/llvm/Analysis/LiveVar/LiveVarSet.h
index 8a33821..2174be2 100644
--- a/include/llvm/Analysis/LiveVar/LiveVarSet.h
+++ b/include/llvm/Analysis/LiveVar/LiveVarSet.h
@@ -16,7 +16,7 @@ struct LiveVarSet : public ValueSet {
// This function applies a machine instr to a live var set (accepts OutSet)
// and makes necessary changes to it (produces InSet).
//
- void applyTranferFuncForMInst(const MachineInstr *const MInst);
+ void applyTranferFuncForMInst(const MachineInstr *MInst);
};
diff --git a/include/llvm/Analysis/LiveVar/ValueSet.h b/include/llvm/Analysis/LiveVar/ValueSet.h
index 055eef3..7196284 100644
--- a/include/llvm/Analysis/LiveVar/ValueSet.h
+++ b/include/llvm/Analysis/LiveVar/ValueSet.h
@@ -8,12 +8,19 @@
#ifndef VALUE_SET_H
#define VALUE_SET_H
-class Value;
#include <set>
+class Value;
+
+// RAV - Used to print values in a form used by the register allocator.
+//
+struct RAV { // Register Allocator Value
+ const Value *V;
+ RAV(const Value *v) : V(v) {}
+};
+ostream &operator<<(ostream &out, RAV Val);
-//------------------- Class Definition for ValueSet --------------------------
-void printValue( const Value *v); // func to print a Value
+//------------------- Class Definition for ValueSet --------------------------
struct ValueSet : public std::set<const Value*> {
bool setUnion( const ValueSet *const set1); // for performing set union
diff --git a/include/llvm/CodeGen/ValueSet.h b/include/llvm/CodeGen/ValueSet.h
index 055eef3..7196284 100644
--- a/include/llvm/CodeGen/ValueSet.h
+++ b/include/llvm/CodeGen/ValueSet.h
@@ -8,12 +8,19 @@
#ifndef VALUE_SET_H
#define VALUE_SET_H
-class Value;
#include <set>
+class Value;
+
+// RAV - Used to print values in a form used by the register allocator.
+//
+struct RAV { // Register Allocator Value
+ const Value *V;
+ RAV(const Value *v) : V(v) {}
+};
+ostream &operator<<(ostream &out, RAV Val);
-//------------------- Class Definition for ValueSet --------------------------
-void printValue( const Value *v); // func to print a Value
+//------------------- Class Definition for ValueSet --------------------------
struct ValueSet : public std::set<const Value*> {
bool setUnion( const ValueSet *const set1); // for performing set union
diff --git a/lib/Analysis/LiveVar/BBLiveVar.cpp b/lib/Analysis/LiveVar/BBLiveVar.cpp
index b8b9e53..81bbd38 100644
--- a/lib/Analysis/LiveVar/BBLiveVar.cpp
+++ b/lib/Analysis/LiveVar/BBLiveVar.cpp
@@ -70,13 +70,9 @@ void BBLiveVar::calcDefUseSets() {
PhiArgMap[ArgVal] = cast<BasicBlock>(BBVal);
- if (DEBUG_LV > 1) {
- cerr << " - phi operand ";
- printValue(ArgVal);
- cerr << " came from BB ";
- printValue(PhiArgMap[ArgVal]);
- cerr << "\n";
- }
+ if (DEBUG_LV > 1)
+ cerr << " - phi operand " << RAV(ArgVal) << " came from BB "
+ << RAV(PhiArgMap[ArgVal]) << "\n";
} // if( IsPhi )
} // if a use
} // for all operands
@@ -105,9 +101,7 @@ void BBLiveVar::addDef(const Value *Op) {
InSet.erase(Op); // this definition kills any uses
InSetChanged = true;
- if (DEBUG_LV > 1) {
- cerr << " +Def: "; printValue( Op ); cerr << "\n";
- }
+ if (DEBUG_LV > 1) cerr << " +Def: " << RAV(Op) << "\n";
}
@@ -119,9 +113,7 @@ void BBLiveVar::addUse(const Value *Op) {
OutSet.erase(Op); // remove if there is a def below this use
InSetChanged = true;
- if (DEBUG_LV > 1) {
- cerr << " Use: "; printValue( Op ); cerr << "\n";
- }
+ if (DEBUG_LV > 1) cerr << " Use: " << RAV(Op) << "\n";
}
diff --git a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
index 07ac10f..cfe0fe4 100644
--- a/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Analysis/LiveVar/FunctionLiveVarInfo.cpp
@@ -62,7 +62,7 @@ void MethodLiveVarInfo::constructBBs(const Method *M) {
BBI != BBE; ++BBI, ++POId) {
const BasicBlock *BB = *BBI; // get the current BB
- if (DEBUG_LV) { std::cerr << " For BB "; printValue(BB); cerr << ":\n"; }
+ if (DEBUG_LV) std::cerr << " For BB " << RAV(BB) << ":\n";
// create a new BBLiveVar
BBLiveVar *LVBB = new BBLiveVar(BB, POId);
diff --git a/lib/Analysis/LiveVar/ValueSet.cpp b/lib/Analysis/LiveVar/ValueSet.cpp
index 8bf0b4d..431ccc6 100644
--- a/lib/Analysis/LiveVar/ValueSet.cpp
+++ b/lib/Analysis/LiveVar/ValueSet.cpp
@@ -1,64 +1,42 @@
+
+
#include "llvm/Analysis/LiveVar/ValueSet.h"
#include "llvm/ConstantVals.h"
-#include <algorithm>
#include <iostream>
-using std::cerr;
-using std::endl;
-using std::pair;
-using std::hash_set;
-void printValue(const Value *v) { // func to print a Value
+ostream &operator<<(ostream &O, RAV V) { // func to print a Value
+ const Value *v = V.V;
if (v->hasName())
- cerr << v << "(" << v->getName() << ") ";
+ return O << v << "(" << v->getName() << ") ";
else if (Constant *C = dyn_cast<Constant>(v))
- cerr << v << "(" << C->getStrValue() << ") ";
+ return O << v << "(" << C->getStrValue() << ") ";
else
- cerr << v << " ";
+ return O << v << " ";
}
+bool ValueSet::setUnion( const ValueSet *S) {
+ bool Changed = false;
-//---------------- Method implementations --------------------------
- // for performing two set unions
-bool ValueSet::setUnion( const ValueSet *set1) {
- pair<iterator, bool> result;
- bool changed = false;
-
- for(const_iterator set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
- // for all all elements in set1
- result = insert(*set1it); // insert to this set
- if(result.second == true) changed = true;
- }
+ for (const_iterator SI = S->begin(), SE = S->end(); SI != SE; ++SI)
+ if (insert(*SI).second)
+ Changed = true;
- return changed;
+ return Changed;
}
-
- // for performing set difference
-void ValueSet::setDifference( const ValueSet *const set1,
- const ValueSet *const set2) {
-
- const_iterator set1it, set2it;
- for( set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
- // for all elements in set1
- iterator set2it = set2->find( *set1it ); // find wether the elem is in set2
- if( set2it == set2->end() ) // if the element is not in set2
- insert( *set1it ); // insert to this set
- }
+void ValueSet::setDifference(const ValueSet *S1, const ValueSet *S2) {
+ for (const_iterator SI = S1->begin(), SE = S1->end() ; SI != SE; ++SI)
+ if (S2->find(*SI) == S2->end()) // if the element is not in set2
+ insert(*SI);
}
-
- // for performing set subtraction
-void ValueSet::setSubtract( const ValueSet *const set1) {
- const_iterator set1it;
- for( set1it = set1->begin() ; set1it != set1->end(); ++set1it)
- // for all elements in set1
- erase( *set1it ); // erase that element from this set
+void ValueSet::setSubtract(const ValueSet *S) {
+ for (const_iterator SI = S->begin() ; SI != S->end(); ++SI)
+ erase(*SI);
}
-
-
-
-void ValueSet::printSet() const { // for printing a live variable set
- for_each(begin(), end(), printValue);
+void ValueSet::printSet() const {
+ for (const_iterator I = begin(), E = end(); I != E; ++I)
+ std::cerr << RAV(*I);
}
diff --git a/lib/CodeGen/RegAlloc/LiveRange.h b/lib/CodeGen/RegAlloc/LiveRange.h
index e1e2992..6c2952a 100644
--- a/lib/CodeGen/RegAlloc/LiveRange.h
+++ b/lib/CodeGen/RegAlloc/LiveRange.h
@@ -1,12 +1,12 @@
-/* Title: LiveRange.h -*- C++ -*-
- Author: Ruchira Sasanka
- Date: July 25, 01
- Purpose: To keep info about a live range.
- Asuumptions:
-
- Since the Value pointed by a use is the same as of its def, it is sufficient
- to keep only defs in a LiveRange.
-*/
+//===-- LiveRange.h - Store info about a live range --------------*- C++ -*--=//
+//
+// Implements a live range using a ValueSet. A LiveRange is a simple set
+// of Values.
+//
+// Since the Value pointed by a use is the same as of its def, it is sufficient
+// to keep only defs in a LiveRange.
+//
+//===----------------------------------------------------------------------===//
#ifndef LIVE_RANGE_H
#define LIVE_RANGE_H
@@ -18,149 +18,120 @@
class RegClass;
class IGNode;
-
-//----------------------------------------------------------------------------
-// Class LiveRange
-//
-// Implements a live range using a ValueSet. A LiveRange is a simple set
-// of Values.
-//----------------------------------------------------------------------------
-
class LiveRange : public ValueSet {
RegClass *MyRegClass; // register classs (e.g., int, FP) for this LR
- bool doesSpanAcrossCalls;
- //
- // Does this live range span across calls?
+ // doesSpanAcrossCalls - Does this live range span across calls?
// This information is used by graph
// coloring algo to avoid allocating volatile colors to live ranges
// that span across calls (since they have to be saved/restored)
-
+ //
+ bool doesSpanAcrossCalls;
IGNode *UserIGNode; // IGNode which uses this LR
-
int Color; // color assigned to this live range
-
bool mustSpill; // whether this LR must be spilt
-
- bool mustSaveAcrossCalls;
+ // mustSaveAcrossCalls - whether this LR must be saved accross calls
+ // ***TODO REMOVE this
//
- // whether this LR must be saved accross calls ***TODO REMOVE this
+ bool mustSaveAcrossCalls;
- int SuggestedColor; // The suggested color for this LR
+ // SuggestedColor - if this LR has a suggested color, can it be
+ // really alloated? A suggested color cannot be allocated when the
+ // suggested color is volatile and when there are call
+ // interferences.
//
- // if this LR has a suggested color, can it be really alloated?
- // A suggested color cannot be allocated when the suggested color is
- // volatile and when there are call interferences.
+ int SuggestedColor; // The suggested color for this LR
- bool CanUseSuggestedCol;
+ // CanUseSuggestedCol - It is possible that a suggested color for
+ // this live range is not available before graph coloring (e.g., it
+ // can be allocated to another live range which interferes with
+ // this)
//
- // It is possible that a suggested color for this live range is not
- // available before graph coloring (e.g., it can be allocated to another
- // live range which interferes with this)
+ bool CanUseSuggestedCol;
- int SpilledStackOffsetFromFP;
+ // SpilledStackOffsetFromFP - If this LR is spilled, its stack
+ // offset from *FP*. The spilled offsets must always be relative to
+ // the FP.
//
- // if this LR is spilled, its stack offset from *FP*. The spilled offsets
- // must always be relative to the FP.
+ int SpilledStackOffsetFromFP;
- bool HasSpillOffset;
+ // HasSpillOffset 0 Whether this live range has a spill offset
//
- // Whether this live range has a spill offset
+ bool HasSpillOffset;
- unsigned SpillCost;
- //
// The spill cost of this live range. Calculated using loop depth of
// each reference to each Value in the live range
-
- public:
-
- // constructor
//
- LiveRange() : ValueSet() {
+ unsigned SpillCost;
+
+public:
+ LiveRange() {
Color = SuggestedColor = -1; // not yet colored
mustSpill = mustSaveAcrossCalls = false;
- MyRegClass = NULL;
- UserIGNode = NULL;
+ MyRegClass = 0;
+ UserIGNode = 0;
doesSpanAcrossCalls = false;
CanUseSuggestedCol = true;
- HasSpillOffset = false;
+ HasSpillOffset = false;
SpillCost = 0;
}
- // empty destructor since there are nothing to be deleted
- //
- ~LiveRange() {}
+ void setRegClass(RegClass *RC) { MyRegClass = RC; }
+ RegClass *getRegClass() const { assert(MyRegClass); return MyRegClass; }
- void setRegClass(RegClass *const RC)
- { MyRegClass = RC; }
-
- inline RegClass *const getRegClass() const
- { assert(MyRegClass); return MyRegClass; }
-
- inline bool hasColor() const
- { return Color != -1; }
+ bool hasColor() const { return Color != -1; }
- inline unsigned int getColor() const
- { assert( Color != -1); return (unsigned) Color ; }
+ unsigned getColor() const { assert(Color != -1); return (unsigned)Color; }
- inline void setColor(unsigned int Col)
- { Color = (int) Col ; }
+ void setColor(unsigned Col) { Color = (int)Col; }
-
inline void setCallInterference() {
doesSpanAcrossCalls = 1;
}
-
inline bool isCallInterference() const {
- return (doesSpanAcrossCalls == 1);
+ return doesSpanAcrossCalls == 1;
}
inline void markForSpill() { mustSpill = true; }
- inline bool isMarkedForSpill() { return mustSpill; }
+ inline bool isMarkedForSpill() { return mustSpill; }
inline void setSpillOffFromFP(int StackOffset) {
- assert( mustSpill && "This LR is not spilled");
+ assert(mustSpill && "This LR is not spilled");
SpilledStackOffsetFromFP = StackOffset;
HasSpillOffset = true;
}
inline void modifySpillOffFromFP(int StackOffset) {
- assert( mustSpill && "This LR is not spilled");
+ assert(mustSpill && "This LR is not spilled");
SpilledStackOffsetFromFP = StackOffset;
HasSpillOffset = true;
}
-
-
inline bool hasSpillOffset() const {
- return HasSpillOffset;
+ return HasSpillOffset;
}
-
inline int getSpillOffFromFP() const {
- assert( HasSpillOffset && "This LR is not spilled");
+ assert(HasSpillOffset && "This LR is not spilled");
return SpilledStackOffsetFromFP;
}
-
inline void markForSaveAcrossCalls() { mustSaveAcrossCalls = true; }
-
- inline void setUserIGNode( IGNode *const IGN)
- { assert( !UserIGNode); UserIGNode = IGN; }
+ inline void setUserIGNode(IGNode *IGN) {
+ assert(!UserIGNode); UserIGNode = IGN;
+ }
- inline IGNode * getUserIGNode() const
- { return UserIGNode; } // NULL if the user is not allocated
+ // getUserIGNode - NULL if the user is not allocated
+ inline IGNode *getUserIGNode() const { return UserIGNode; }
- inline const Type* getType() const {
- const Value *val = *begin();
- assert(val && "Can't find type - Live range is empty" );
- return val->getType();
+ inline const Type *getType() const {
+ return (*begin())->getType(); // set's don't have a front
}
inline Type::PrimitiveID getTypeID() const {
@@ -168,9 +139,7 @@ class LiveRange : public ValueSet {
}
inline void setSuggestedColor(int Col) {
- //assert( (SuggestedColor == -1) && "Changing an already suggested color");
-
- if(SuggestedColor == -1 )
+ if (SuggestedColor == -1)
SuggestedColor = Col;
#if 0
else if (DEBUG_RA)
@@ -179,21 +148,21 @@ class LiveRange : public ValueSet {
}
inline unsigned getSuggestedColor() const {
- assert( SuggestedColor != -1); // only a valid color is obtained
- return (unsigned) SuggestedColor;
+ assert(SuggestedColor != -1); // only a valid color is obtained
+ return (unsigned)SuggestedColor;
}
inline bool hasSuggestedColor() const {
- return ( SuggestedColor > -1);
+ return SuggestedColor != -1;
}
inline bool isSuggestedColorUsable() const {
- assert( hasSuggestedColor() && "No suggested color");
+ assert(hasSuggestedColor() && "No suggested color");
return CanUseSuggestedCol;
}
- inline void setSuggestedColorUsable(const bool val) {
- assert( hasSuggestedColor() && "No suggested color");
+ inline void setSuggestedColorUsable(bool val) {
+ assert(hasSuggestedColor() && "No suggested color");
CanUseSuggestedCol = val;
}
diff --git a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
index 26e4788..590c88f 100644
--- a/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
+++ b/lib/CodeGen/RegAlloc/LiveRangeInfo.cpp
@@ -118,8 +118,8 @@ void LiveRangeInfo::constructLiveRanges()
if( DEBUG_RA > 1) {
- cerr << " adding LiveRange for argument ";
- printValue((const Value *) *ArgIt); cerr << "\n";
+ cerr << " adding LiveRange for argument "
+ << RAV((const Value *)*ArgIt) << "\n";
}
}
@@ -163,11 +163,9 @@ void LiveRangeInfo::constructLiveRanges()
MachineOperand::MachineOperandType OpTyp =
OpI.getMachineOperand().getOperandType();
- if (OpTyp == MachineOperand::MO_CCRegister) {
- cerr << "\n**CC reg found. Is Def=" << OpI.isDef() << " Val:";
- printValue( OpI.getMachineOperand().getVRegValue() );
- cerr << "\n";
- }
+ if (OpTyp == MachineOperand::MO_CCRegister)
+ cerr << "\n**CC reg found. Is Def=" << OpI.isDef() << " Val:"
+ << RAV(OpI.getMachineOperand().getVRegValue()) << "\n";
}
// create a new LR iff this operand is a def
@@ -175,9 +173,9 @@ void LiveRangeInfo::constructLiveRanges()
const Value *Def = *OpI;
// Only instruction values are accepted for live ranges here
- if( Def->getValueType() != Value::InstructionVal ) {
- cerr << "\n**%%Error: Def is not an instruction val. Def=";
- printValue( Def ); cerr << "\n";
+ if (Def->getValueType() != Value::InstructionVal ) {
+ cerr << "\n**%%Error: Def is not an instruction val. Def="
+ << RAV(Def) << "\n";
continue;
}
@@ -189,10 +187,8 @@ void LiveRangeInfo::constructLiveRanges()
DefRange->insert(Def); // add the instruction (def) to it
LiveRangeMap[ Def ] = DefRange; // update the map
- if (DEBUG_RA > 1) {
- cerr << " creating a LR for def: ";
- printValue(Def); cerr << "\n";
- }
+ if (DEBUG_RA > 1)
+ cerr << " creating a LR for def: " << RAV(Def) << "\n";
// set the register class of the new live range
//assert( RegClassList.size() );
@@ -204,24 +200,20 @@ void LiveRangeInfo::constructLiveRanges()
OpI.getMachineOperand().getVRegValue(), isCC );
- if(isCC && DEBUG_RA) {
- cerr << "\a**created a LR for a CC reg:";
- printValue( OpI.getMachineOperand().getVRegValue() );
- }
-
- DefRange->setRegClass( RegClassList[ rcid ] );
+ if (isCC && DEBUG_RA)
+ cerr << "\a**created a LR for a CC reg:"
+ << RAV(OpI.getMachineOperand().getVRegValue());
- }
- else {
+ DefRange->setRegClass(RegClassList[rcid]);
+ } else {
DefRange->insert(Def); // add the opearand to def range
// update the map - Operand points
// to the merged set
- LiveRangeMap[ Def ] = DefRange;
+ LiveRangeMap[Def] = DefRange;
- if( DEBUG_RA > 1) {
- cerr << " added to an existing LR for def: ";
- printValue( Def ); cerr << "\n";
- }
+ if (DEBUG_RA > 1)
+ cerr << " added to an existing LR for def: "
+ << RAV(Def) << "\n";
}
} // if isDef()
@@ -336,10 +328,8 @@ void LiveRangeInfo::coalesceLRs()
if( ! LROfUse ) { // if LR of use is not found
//don't warn about labels
- if (!((*UseI)->getType())->isLabelType() && DEBUG_RA) {
- cerr<<" !! Warning: No LR for use "; printValue(*UseI);
- cerr << "\n";
- }
+ if (!((*UseI)->getType())->isLabelType() && DEBUG_RA)
+ cerr << " !! Warning: No LR for use " << RAV(*UseI) << "\n";
continue; // ignore and continue
}
@@ -398,13 +388,12 @@ void LiveRangeInfo::coalesceLRs()
/*--------------------------- Debug code for printing ---------------*/
-void LiveRangeInfo::printLiveRanges()
-{
+void LiveRangeInfo::printLiveRanges() {
LiveRangeMapType::iterator HMI = LiveRangeMap.begin(); // hash map iterator
cerr << "\nPrinting Live Ranges from Hash Map:\n";
- for( ; HMI != LiveRangeMap.end() ; ++HMI) {
- if( HMI->first && HMI->second ) {
- cerr <<" "; printValue((*HMI).first); cerr << "\t: ";
+ for( ; HMI != LiveRangeMap.end(); ++HMI) {
+ if (HMI->first && HMI->second) {
+ cerr << " " << RAV(HMI->first) << "\t: ";
HMI->second->printSet(); cerr << "\n";
}
}
diff --git a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
index d901337..90de8b9 100644
--- a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
@@ -118,8 +118,8 @@ void PhyRegAlloc::createIGNodeListsAndIGs() {
LiveRange *L = HMI->second; // get the LiveRange
if (!L) {
if( DEBUG_RA) {
- cerr << "\n*?!?Warning: Null liver range found for: ";
- printValue(HMI->first); cerr << "\n";
+ cerr << "\n*?!?Warning: Null liver range found for: "
+ << RAV(HMI->first) << "\n";
}
continue;
}
@@ -170,14 +170,12 @@ void PhyRegAlloc::addInterference(const Value *const Def,
//
for( ; LIt != LVSet->end(); ++LIt) {
- if( DEBUG_RA > 1) {
- cerr << "< Def="; printValue(Def);
- cerr << ", Lvar="; printValue( *LIt); cerr << "> ";
- }
+ if (DEBUG_RA > 1)
+ cerr << "< Def=" << RAV(Def) << ", Lvar=" << RAV(*LIt) << "> ";
// get the live range corresponding to live var
//
- LiveRange *const LROfVar = LRI.getLiveRangeForValue(*LIt );
+ LiveRange *LROfVar = LRI.getLiveRangeForValue(*LIt);
// LROfVar can be null if it is a const since a const
// doesn't have a dominating def - see Assumptions above
@@ -188,13 +186,12 @@ void PhyRegAlloc::addInterference(const Value *const Def,
// if 2 reg classes are the same set interference
//
- if(RCOfDef == LROfVar->getRegClass()) {
+ if (RCOfDef == LROfVar->getRegClass()) {
RCOfDef->setInterference( LROfDef, LROfVar);
- } else if(DEBUG_RA > 1) {
+ } else if (DEBUG_RA > 1) {
// we will not have LRs for values not explicitly allocated in the
// instruction stream (e.g., constants)
- cerr << " warning: no live range for " ;
- printValue(*LIt); cerr << "\n";
+ cerr << " warning: no live range for " << RAV(*LIt) << "\n";
}
}
}
@@ -434,10 +431,9 @@ void PhyRegAlloc::addInterferencesForArgs()
for( ; ArgIt != ArgList.end() ; ++ArgIt) { // for each argument
addInterference((Value*)*ArgIt, InSet, false); // add interferences between
// args and LVars at start
- if( DEBUG_RA > 1) {
- cerr << " - %% adding interference for argument ";
- printValue((const Value *)*ArgIt); cerr << "\n";
- }
+ if( DEBUG_RA > 1)
+ cerr << " - %% adding interference for argument "
+ << RAV((const Value *)*ArgIt) << "\n";
}
}
@@ -1051,15 +1047,11 @@ void PhyRegAlloc::printMachineCode()
unsigned NumOfImpRefs = MInst->getNumImplicitRefs();
- if( NumOfImpRefs > 0 ) {
-
+ if( NumOfImpRefs > 0) {
cerr << "\tImplicit:";
- for(unsigned z=0; z < NumOfImpRefs; z++) {
- printValue( MInst->getImplicitRef(z) );
- cerr << "\t";
- }
-
+ for(unsigned z=0; z < NumOfImpRefs; z++)
+ cerr << RAV(MInst->getImplicitRef(z)) << "\t";
}
} // for all machine instructions
diff --git a/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp b/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp
index b8b9e53..81bbd38 100644
--- a/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp
+++ b/lib/Target/SparcV9/LiveVar/BBLiveVar.cpp
@@ -70,13 +70,9 @@ void BBLiveVar::calcDefUseSets() {
PhiArgMap[ArgVal] = cast<BasicBlock>(BBVal);
- if (DEBUG_LV > 1) {
- cerr << " - phi operand ";
- printValue(ArgVal);
- cerr << " came from BB ";
- printValue(PhiArgMap[ArgVal]);
- cerr << "\n";
- }
+ if (DEBUG_LV > 1)
+ cerr << " - phi operand " << RAV(ArgVal) << " came from BB "
+ << RAV(PhiArgMap[ArgVal]) << "\n";
} // if( IsPhi )
} // if a use
} // for all operands
@@ -105,9 +101,7 @@ void BBLiveVar::addDef(const Value *Op) {
InSet.erase(Op); // this definition kills any uses
InSetChanged = true;
- if (DEBUG_LV > 1) {
- cerr << " +Def: "; printValue( Op ); cerr << "\n";
- }
+ if (DEBUG_LV > 1) cerr << " +Def: " << RAV(Op) << "\n";
}
@@ -119,9 +113,7 @@ void BBLiveVar::addUse(const Value *Op) {
OutSet.erase(Op); // remove if there is a def below this use
InSetChanged = true;
- if (DEBUG_LV > 1) {
- cerr << " Use: "; printValue( Op ); cerr << "\n";
- }
+ if (DEBUG_LV > 1) cerr << " Use: " << RAV(Op) << "\n";
}
diff --git a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
index 07ac10f..cfe0fe4 100644
--- a/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
+++ b/lib/Target/SparcV9/LiveVar/FunctionLiveVarInfo.cpp
@@ -62,7 +62,7 @@ void MethodLiveVarInfo::constructBBs(const Method *M) {
BBI != BBE; ++BBI, ++POId) {
const BasicBlock *BB = *BBI; // get the current BB
- if (DEBUG_LV) { std::cerr << " For BB "; printValue(BB); cerr << ":\n"; }
+ if (DEBUG_LV) std::cerr << " For BB " << RAV(BB) << ":\n";
// create a new BBLiveVar
BBLiveVar *LVBB = new BBLiveVar(BB, POId);
diff --git a/lib/Target/SparcV9/LiveVar/ValueSet.cpp b/lib/Target/SparcV9/LiveVar/ValueSet.cpp
index 8bf0b4d..431ccc6 100644
--- a/lib/Target/SparcV9/LiveVar/ValueSet.cpp
+++ b/lib/Target/SparcV9/LiveVar/ValueSet.cpp
@@ -1,64 +1,42 @@
+
+
#include "llvm/Analysis/LiveVar/ValueSet.h"
#include "llvm/ConstantVals.h"
-#include <algorithm>
#include <iostream>
-using std::cerr;
-using std::endl;
-using std::pair;
-using std::hash_set;
-void printValue(const Value *v) { // func to print a Value
+ostream &operator<<(ostream &O, RAV V) { // func to print a Value
+ const Value *v = V.V;
if (v->hasName())
- cerr << v << "(" << v->getName() << ") ";
+ return O << v << "(" << v->getName() << ") ";
else if (Constant *C = dyn_cast<Constant>(v))
- cerr << v << "(" << C->getStrValue() << ") ";
+ return O << v << "(" << C->getStrValue() << ") ";
else
- cerr << v << " ";
+ return O << v << " ";
}
+bool ValueSet::setUnion( const ValueSet *S) {
+ bool Changed = false;
-//---------------- Method implementations --------------------------
- // for performing two set unions
-bool ValueSet::setUnion( const ValueSet *set1) {
- pair<iterator, bool> result;
- bool changed = false;
-
- for(const_iterator set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
- // for all all elements in set1
- result = insert(*set1it); // insert to this set
- if(result.second == true) changed = true;
- }
+ for (const_iterator SI = S->begin(), SE = S->end(); SI != SE; ++SI)
+ if (insert(*SI).second)
+ Changed = true;
- return changed;
+ return Changed;
}
-
- // for performing set difference
-void ValueSet::setDifference( const ValueSet *const set1,
- const ValueSet *const set2) {
-
- const_iterator set1it, set2it;
- for( set1it = set1->begin() ; set1it != set1->end(); ++set1it) {
- // for all elements in set1
- iterator set2it = set2->find( *set1it ); // find wether the elem is in set2
- if( set2it == set2->end() ) // if the element is not in set2
- insert( *set1it ); // insert to this set
- }
+void ValueSet::setDifference(const ValueSet *S1, const ValueSet *S2) {
+ for (const_iterator SI = S1->begin(), SE = S1->end() ; SI != SE; ++SI)
+ if (S2->find(*SI) == S2->end()) // if the element is not in set2
+ insert(*SI);
}
-
- // for performing set subtraction
-void ValueSet::setSubtract( const ValueSet *const set1) {
- const_iterator set1it;
- for( set1it = set1->begin() ; set1it != set1->end(); ++set1it)
- // for all elements in set1
- erase( *set1it ); // erase that element from this set
+void ValueSet::setSubtract(const ValueSet *S) {
+ for (const_iterator SI = S->begin() ; SI != S->end(); ++SI)
+ erase(*SI);
}
-
-
-
-void ValueSet::printSet() const { // for printing a live variable set
- for_each(begin(), end(), printValue);
+void ValueSet::printSet() const {
+ for (const_iterator I = begin(), E = end(); I != E; ++I)
+ std::cerr << RAV(*I);
}
diff --git a/lib/Target/SparcV9/RegAlloc/LiveRange.h b/lib/Target/SparcV9/RegAlloc/LiveRange.h
index e1e2992..6c2952a 100644
--- a/lib/Target/SparcV9/RegAlloc/LiveRange.h
+++ b/lib/Target/SparcV9/RegAlloc/LiveRange.h
@@ -1,12 +1,12 @@
-/* Title: LiveRange.h -*- C++ -*-
- Author: Ruchira Sasanka
- Date: July 25, 01
- Purpose: To keep info about a live range.
- Asuumptions:
-
- Since the Value pointed by a use is the same as of its def, it is sufficient
- to keep only defs in a LiveRange.
-*/
+//===-- LiveRange.h - Store info about a live range --------------*- C++ -*--=//
+//
+// Implements a live range using a ValueSet. A LiveRange is a simple set
+// of Values.
+//
+// Since the Value pointed by a use is the same as of its def, it is sufficient
+// to keep only defs in a LiveRange.
+//
+//===----------------------------------------------------------------------===//
#ifndef LIVE_RANGE_H
#define LIVE_RANGE_H
@@ -18,149 +18,120 @@
class RegClass;
class IGNode;
-
-//----------------------------------------------------------------------------
-// Class LiveRange
-//
-// Implements a live range using a ValueSet. A LiveRange is a simple set
-// of Values.
-//----------------------------------------------------------------------------
-
class LiveRange : public ValueSet {
RegClass *MyRegClass; // register classs (e.g., int, FP) for this LR
- bool doesSpanAcrossCalls;
- //
- // Does this live range span across calls?
+ // doesSpanAcrossCalls - Does this live range span across calls?
// This information is used by graph
// coloring algo to avoid allocating volatile colors to live ranges
// that span across calls (since they have to be saved/restored)
-
+ //
+ bool doesSpanAcrossCalls;
IGNode *UserIGNode; // IGNode which uses this LR
-
int Color; // color assigned to this live range
-
bool mustSpill; // whether this LR must be spilt
-
- bool mustSaveAcrossCalls;
+ // mustSaveAcrossCalls - whether this LR must be saved accross calls
+ // ***TODO REMOVE this
//
- // whether this LR must be saved accross calls ***TODO REMOVE this
+ bool mustSaveAcrossCalls;
- int SuggestedColor; // The suggested color for this LR
+ // SuggestedColor - if this LR has a suggested color, can it be
+ // really alloated? A suggested color cannot be allocated when the
+ // suggested color is volatile and when there are call
+ // interferences.
//
- // if this LR has a suggested color, can it be really alloated?
- // A suggested color cannot be allocated when the suggested color is
- // volatile and when there are call interferences.
+ int SuggestedColor; // The suggested color for this LR
- bool CanUseSuggestedCol;
+ // CanUseSuggestedCol - It is possible that a suggested color for
+ // this live range is not available before graph coloring (e.g., it
+ // can be allocated to another live range which interferes with
+ // this)
//
- // It is possible that a suggested color for this live range is not
- // available before graph coloring (e.g., it can be allocated to another
- // live range which interferes with this)
+ bool CanUseSuggestedCol;
- int SpilledStackOffsetFromFP;
+ // SpilledStackOffsetFromFP - If this LR is spilled, its stack
+ // offset from *FP*. The spilled offsets must always be relative to
+ // the FP.
//
- // if this LR is spilled, its stack offset from *FP*. The spilled offsets
- // must always be relative to the FP.
+ int SpilledStackOffsetFromFP;
- bool HasSpillOffset;
+ // HasSpillOffset 0 Whether this live range has a spill offset
//
- // Whether this live range has a spill offset
+ bool HasSpillOffset;
- unsigned SpillCost;
- //
// The spill cost of this live range. Calculated using loop depth of
// each reference to each Value in the live range
-
- public:
-
- // constructor
//
- LiveRange() : ValueSet() {
+ unsigned SpillCost;
+
+public:
+ LiveRange() {
Color = SuggestedColor = -1; // not yet colored
mustSpill = mustSaveAcrossCalls = false;
- MyRegClass = NULL;
- UserIGNode = NULL;
+ MyRegClass = 0;
+ UserIGNode = 0;
doesSpanAcrossCalls = false;
CanUseSuggestedCol = true;
- HasSpillOffset = false;
+ HasSpillOffset = false;
SpillCost = 0;
}
- // empty destructor since there are nothing to be deleted
- //
- ~LiveRange() {}
+ void setRegClass(RegClass *RC) { MyRegClass = RC; }
+ RegClass *getRegClass() const { assert(MyRegClass); return MyRegClass; }
- void setRegClass(RegClass *const RC)
- { MyRegClass = RC; }
-
- inline RegClass *const getRegClass() const
- { assert(MyRegClass); return MyRegClass; }
-
- inline bool hasColor() const
- { return Color != -1; }
+ bool hasColor() const { return Color != -1; }
- inline unsigned int getColor() const
- { assert( Color != -1); return (unsigned) Color ; }
+ unsigned getColor() const { assert(Color != -1); return (unsigned)Color; }
- inline void setColor(unsigned int Col)
- { Color = (int) Col ; }
+ void setColor(unsigned Col) { Color = (int)Col; }
-
inline void setCallInterference() {
doesSpanAcrossCalls = 1;
}
-
inline bool isCallInterference() const {
- return (doesSpanAcrossCalls == 1);
+ return doesSpanAcrossCalls == 1;
}
inline void markForSpill() { mustSpill = true; }
- inline bool isMarkedForSpill() { return mustSpill; }
+ inline bool isMarkedForSpill() { return mustSpill; }
inline void setSpillOffFromFP(int StackOffset) {
- assert( mustSpill && "This LR is not spilled");
+ assert(mustSpill && "This LR is not spilled");
SpilledStackOffsetFromFP = StackOffset;
HasSpillOffset = true;
}
inline void modifySpillOffFromFP(int StackOffset) {
- assert( mustSpill && "This LR is not spilled");
+ assert(mustSpill && "This LR is not spilled");
SpilledStackOffsetFromFP = StackOffset;
HasSpillOffset = true;
}
-
-
inline bool hasSpillOffset() const {
- return HasSpillOffset;
+ return HasSpillOffset;
}
-
inline int getSpillOffFromFP() const {
- assert( HasSpillOffset && "This LR is not spilled");
+ assert(HasSpillOffset && "This LR is not spilled");
return SpilledStackOffsetFromFP;
}
-
inline void markForSaveAcrossCalls() { mustSaveAcrossCalls = true; }
-
- inline void setUserIGNode( IGNode *const IGN)
- { assert( !UserIGNode); UserIGNode = IGN; }
+ inline void setUserIGNode(IGNode *IGN) {
+ assert(!UserIGNode); UserIGNode = IGN;
+ }
- inline IGNode * getUserIGNode() const
- { return UserIGNode; } // NULL if the user is not allocated
+ // getUserIGNode - NULL if the user is not allocated
+ inline IGNode *getUserIGNode() const { return UserIGNode; }
- inline const Type* getType() const {
- const Value *val = *begin();
- assert(val && "Can't find type - Live range is empty" );
- return val->getType();
+ inline const Type *getType() const {
+ return (*begin())->getType(); // set's don't have a front
}
inline Type::PrimitiveID getTypeID() const {
@@ -168,9 +139,7 @@ class LiveRange : public ValueSet {
}
inline void setSuggestedColor(int Col) {
- //assert( (SuggestedColor == -1) && "Changing an already suggested color");
-
- if(SuggestedColor == -1 )
+ if (SuggestedColor == -1)
SuggestedColor = Col;
#if 0
else if (DEBUG_RA)
@@ -179,21 +148,21 @@ class LiveRange : public ValueSet {
}
inline unsigned getSuggestedColor() const {
- assert( SuggestedColor != -1); // only a valid color is obtained
- return (unsigned) SuggestedColor;
+ assert(SuggestedColor != -1); // only a valid color is obtained
+ return (unsigned)SuggestedColor;
}
inline bool hasSuggestedColor() const {
- return ( SuggestedColor > -1);
+ return SuggestedColor != -1;
}
inline bool isSuggestedColorUsable() const {
- assert( hasSuggestedColor() && "No suggested color");
+ assert(hasSuggestedColor() && "No suggested color");
return CanUseSuggestedCol;
}
- inline void setSuggestedColorUsable(const bool val) {
- assert( hasSuggestedColor() && "No suggested color");
+ inline void setSuggestedColorUsable(bool val) {
+ assert(hasSuggestedColor() && "No suggested color");
CanUseSuggestedCol = val;
}
diff --git a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
index 26e4788..590c88f 100644
--- a/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
+++ b/lib/Target/SparcV9/RegAlloc/LiveRangeInfo.cpp
@@ -118,8 +118,8 @@ void LiveRangeInfo::constructLiveRanges()
if( DEBUG_RA > 1) {
- cerr << " adding LiveRange for argument ";
- printValue((const Value *) *ArgIt); cerr << "\n";
+ cerr << " adding LiveRange for argument "
+ << RAV((const Value *)*ArgIt) << "\n";
}
}
@@ -163,11 +163,9 @@ void LiveRangeInfo::constructLiveRanges()
MachineOperand::MachineOperandType OpTyp =
OpI.getMachineOperand().getOperandType();
- if (OpTyp == MachineOperand::MO_CCRegister) {
- cerr << "\n**CC reg found. Is Def=" << OpI.isDef() << " Val:";
- printValue( OpI.getMachineOperand().getVRegValue() );
- cerr << "\n";
- }
+ if (OpTyp == MachineOperand::MO_CCRegister)
+ cerr << "\n**CC reg found. Is Def=" << OpI.isDef() << " Val:"
+ << RAV(OpI.getMachineOperand().getVRegValue()) << "\n";
}
// create a new LR iff this operand is a def
@@ -175,9 +173,9 @@ void LiveRangeInfo::constructLiveRanges()
const Value *Def = *OpI;
// Only instruction values are accepted for live ranges here
- if( Def->getValueType() != Value::InstructionVal ) {
- cerr << "\n**%%Error: Def is not an instruction val. Def=";
- printValue( Def ); cerr << "\n";
+ if (Def->getValueType() != Value::InstructionVal ) {
+ cerr << "\n**%%Error: Def is not an instruction val. Def="
+ << RAV(Def) << "\n";
continue;
}
@@ -189,10 +187,8 @@ void LiveRangeInfo::constructLiveRanges()
DefRange->insert(Def); // add the instruction (def) to it
LiveRangeMap[ Def ] = DefRange; // update the map
- if (DEBUG_RA > 1) {
- cerr << " creating a LR for def: ";
- printValue(Def); cerr << "\n";
- }
+ if (DEBUG_RA > 1)
+ cerr << " creating a LR for def: " << RAV(Def) << "\n";
// set the register class of the new live range
//assert( RegClassList.size() );
@@ -204,24 +200,20 @@ void LiveRangeInfo::constructLiveRanges()
OpI.getMachineOperand().getVRegValue(), isCC );
- if(isCC && DEBUG_RA) {
- cerr << "\a**created a LR for a CC reg:";
- printValue( OpI.getMachineOperand().getVRegValue() );
- }
-
- DefRange->setRegClass( RegClassList[ rcid ] );
+ if (isCC && DEBUG_RA)
+ cerr << "\a**created a LR for a CC reg:"
+ << RAV(OpI.getMachineOperand().getVRegValue());
- }
- else {
+ DefRange->setRegClass(RegClassList[rcid]);
+ } else {
DefRange->insert(Def); // add the opearand to def range
// update the map - Operand points
// to the merged set
- LiveRangeMap[ Def ] = DefRange;
+ LiveRangeMap[Def] = DefRange;
- if( DEBUG_RA > 1) {
- cerr << " added to an existing LR for def: ";
- printValue( Def ); cerr << "\n";
- }
+ if (DEBUG_RA > 1)
+ cerr << " added to an existing LR for def: "
+ << RAV(Def) << "\n";
}
} // if isDef()
@@ -336,10 +328,8 @@ void LiveRangeInfo::coalesceLRs()
if( ! LROfUse ) { // if LR of use is not found
//don't warn about labels
- if (!((*UseI)->getType())->isLabelType() && DEBUG_RA) {
- cerr<<" !! Warning: No LR for use "; printValue(*UseI);
- cerr << "\n";
- }
+ if (!((*UseI)->getType())->isLabelType() && DEBUG_RA)
+ cerr << " !! Warning: No LR for use " << RAV(*UseI) << "\n";
continue; // ignore and continue
}
@@ -398,13 +388,12 @@ void LiveRangeInfo::coalesceLRs()
/*--------------------------- Debug code for printing ---------------*/
-void LiveRangeInfo::printLiveRanges()
-{
+void LiveRangeInfo::printLiveRanges() {
LiveRangeMapType::iterator HMI = LiveRangeMap.begin(); // hash map iterator
cerr << "\nPrinting Live Ranges from Hash Map:\n";
- for( ; HMI != LiveRangeMap.end() ; ++HMI) {
- if( HMI->first && HMI->second ) {
- cerr <<" "; printValue((*HMI).first); cerr << "\t: ";
+ for( ; HMI != LiveRangeMap.end(); ++HMI) {
+ if (HMI->first && HMI->second) {
+ cerr << " " << RAV(HMI->first) << "\t: ";
HMI->second->printSet(); cerr << "\n";
}
}
diff --git a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
index d901337..90de8b9 100644
--- a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
@@ -118,8 +118,8 @@ void PhyRegAlloc::createIGNodeListsAndIGs() {
LiveRange *L = HMI->second; // get the LiveRange
if (!L) {
if( DEBUG_RA) {
- cerr << "\n*?!?Warning: Null liver range found for: ";
- printValue(HMI->first); cerr << "\n";
+ cerr << "\n*?!?Warning: Null liver range found for: "
+ << RAV(HMI->first) << "\n";
}
continue;
}
@@ -170,14 +170,12 @@ void PhyRegAlloc::addInterference(const Value *const Def,
//
for( ; LIt != LVSet->end(); ++LIt) {
- if( DEBUG_RA > 1) {
- cerr << "< Def="; printValue(Def);
- cerr << ", Lvar="; printValue( *LIt); cerr << "> ";
- }
+ if (DEBUG_RA > 1)
+ cerr << "< Def=" << RAV(Def) << ", Lvar=" << RAV(*LIt) << "> ";
// get the live range corresponding to live var
//
- LiveRange *const LROfVar = LRI.getLiveRangeForValue(*LIt );
+ LiveRange *LROfVar = LRI.getLiveRangeForValue(*LIt);
// LROfVar can be null if it is a const since a const
// doesn't have a dominating def - see Assumptions above
@@ -188,13 +186,12 @@ void PhyRegAlloc::addInterference(const Value *const Def,
// if 2 reg classes are the same set interference
//
- if(RCOfDef == LROfVar->getRegClass()) {
+ if (RCOfDef == LROfVar->getRegClass()) {
RCOfDef->setInterference( LROfDef, LROfVar);
- } else if(DEBUG_RA > 1) {
+ } else if (DEBUG_RA > 1) {
// we will not have LRs for values not explicitly allocated in the
// instruction stream (e.g., constants)
- cerr << " warning: no live range for " ;
- printValue(*LIt); cerr << "\n";
+ cerr << " warning: no live range for " << RAV(*LIt) << "\n";
}
}
}
@@ -434,10 +431,9 @@ void PhyRegAlloc::addInterferencesForArgs()
for( ; ArgIt != ArgList.end() ; ++ArgIt) { // for each argument
addInterference((Value*)*ArgIt, InSet, false); // add interferences between
// args and LVars at start
- if( DEBUG_RA > 1) {
- cerr << " - %% adding interference for argument ";
- printValue((const Value *)*ArgIt); cerr << "\n";
- }
+ if( DEBUG_RA > 1)
+ cerr << " - %% adding interference for argument "
+ << RAV((const Value *)*ArgIt) << "\n";
}
}
@@ -1051,15 +1047,11 @@ void PhyRegAlloc::printMachineCode()
unsigned NumOfImpRefs = MInst->getNumImplicitRefs();
- if( NumOfImpRefs > 0 ) {
-
+ if( NumOfImpRefs > 0) {
cerr << "\tImplicit:";
- for(unsigned z=0; z < NumOfImpRefs; z++) {
- printValue( MInst->getImplicitRef(z) );
- cerr << "\t";
- }
-
+ for(unsigned z=0; z < NumOfImpRefs; z++)
+ cerr << RAV(MInst->getImplicitRef(z)) << "\t";
}
} // for all machine instructions
diff --git a/lib/Target/SparcV9/SparcV9RegInfo.cpp b/lib/Target/SparcV9/SparcV9RegInfo.cpp
index f35af9e..6e2c1b0 100644
--- a/lib/Target/SparcV9/SparcV9RegInfo.cpp
+++ b/lib/Target/SparcV9/SparcV9RegInfo.cpp
@@ -563,11 +563,8 @@ void UltraSparcRegInfo::suggestRegs4CallArgs(const MachineInstr *CallMI,
// not possible to have a null LR since all args (even consts)
// must be defined before
- if( !LR ) {
- if( DEBUG_RA) {
- cerr << " ERROR: In call instr, no LR for arg: " ;
- printValue(CallArg); cerr << "\n";
- }
+ if (!LR) {
+ cerr << " ERROR: In call instr, no LR for arg: " << RAV(CallArg) << "\n";
assert(0 && "NO LR for call arg");
}
@@ -624,16 +621,12 @@ void UltraSparcRegInfo::colorCallArgs(const MachineInstr *CallMI,
const Value *RetVal = getCallInstRetVal( CallMI );
- if( RetVal ) {
-
- LiveRange * RetValLR = LRI.getLiveRangeForValue( RetVal );
+ if (RetVal) {
+ LiveRange *RetValLR = LRI.getLiveRangeForValue( RetVal );
- if( !RetValLR ) {
- cerr << "\nNo LR for:";
- printValue( RetVal );
- cerr << "\n";
- assert( RetValLR && "ERR:No LR for non-void return value");
- //return;
+ if (!RetValLR) {
+ cerr << "\nNo LR for:" << RAV(RetVal) << "\n";
+ assert(0 && "ERR:No LR for non-void return value");
}
unsigned RegClassID = (RetValLR->getRegClass())->getID();
@@ -755,13 +748,9 @@ void UltraSparcRegInfo::colorCallArgs(const MachineInstr *CallMI,
// not possible to have a null LR since all args (even consts)
// must be defined before
- if( !LR ) {
- if( DEBUG_RA) {
- cerr << " ERROR: In call instr, no LR for arg: " ;
- printValue(CallArg); cerr << "\n";
- }
+ if (!LR) {
+ cerr << " ERROR: In call instr, no LR for arg: " << RAV(CallArg) << "\n";
assert(0 && "NO LR for call arg");
- // continue;
}
@@ -942,13 +931,10 @@ void UltraSparcRegInfo::suggestReg4RetValue(const MachineInstr *RetMI,
LiveRange *const LR = LRI.getLiveRangeForValue( RetVal );
- if( !LR ) {
- cerr << "\nNo LR for:";
- printValue( RetVal );
- cerr << "\n";
- assert( LR && "No LR for return value of non-void method");
- //return;
- }
+ if (!LR) {
+ cerr << "\nNo LR for:" << RAV(RetVal) << "\n";
+ assert(0 && "No LR for return value of non-void method");
+ }
unsigned RegClassID = (LR->getRegClass())->getID();
@@ -981,12 +967,10 @@ void UltraSparcRegInfo::colorRetValue(const MachineInstr *RetMI,
LiveRange *LR = LRI.getLiveRangeForValue(RetVal);
- if( ! LR ) {
- cerr << "\nNo LR for:";
- printValue( RetVal );
- cerr << "\n";
- // assert( LR && "No LR for return value of non-void method");
- return;
+ if (!LR) {
+ cerr << "\nNo LR for:" << RAV(RetVal) << "\n";
+ // assert( LR && "No LR for return value of non-void method");
+ return;
}
unsigned RegClassID = getRegClassIDOfValue(RetVal);