mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 20:08:06 +02:00
nv50/ir: Add support code for calculating the clobber set of a BB or function.
This commit is contained in:
parent
d6d1f0e4a2
commit
3e9150cd96
3 changed files with 34 additions and 0 deletions
|
|
@ -887,6 +887,7 @@ public:
|
|||
Graph::Node dom;
|
||||
|
||||
BitSet liveSet;
|
||||
BitSet defSet;
|
||||
|
||||
uint32_t binPos;
|
||||
uint32_t binSize;
|
||||
|
|
@ -937,6 +938,7 @@ public:
|
|||
|
||||
inline LValue *getLValue(int id);
|
||||
|
||||
void buildDefSets();
|
||||
bool convertToSSA();
|
||||
|
||||
public:
|
||||
|
|
@ -960,6 +962,7 @@ public:
|
|||
|
||||
private:
|
||||
void buildLiveSetsPreSSA(BasicBlock *, const int sequence);
|
||||
void buildDefSetsPreSSA(BasicBlock *bb, const int seq);
|
||||
|
||||
private:
|
||||
int id;
|
||||
|
|
|
|||
|
|
@ -415,6 +415,16 @@ Function::orderInstructions(ArrayList &result)
|
|||
return result.getSize();
|
||||
}
|
||||
|
||||
void
|
||||
Function::buildDefSets()
|
||||
{
|
||||
for (unsigned i = 0; i <= loopNestingBound; ++i)
|
||||
buildDefSetsPreSSA(BasicBlock::get(cfgExit), cfg.nextSequence());
|
||||
|
||||
for (ArrayList::Iterator bi = allBBlocks.iterator(); !bi.end(); bi.next())
|
||||
BasicBlock::get(bi)->liveSet.marker = false;
|
||||
}
|
||||
|
||||
bool
|
||||
Pass::run(Program *prog, bool ordered, bool skipPhi)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -256,6 +256,27 @@ Function::buildLiveSetsPreSSA(BasicBlock *bb, const int seq)
|
|||
bb->liveSet |= usedBeforeAssigned;
|
||||
}
|
||||
|
||||
void
|
||||
Function::buildDefSetsPreSSA(BasicBlock *bb, const int seq)
|
||||
{
|
||||
bb->defSet.allocate(allLValues.getSize(), !bb->liveSet.marker);
|
||||
bb->liveSet.marker = true;
|
||||
|
||||
for (Graph::EdgeIterator ei = bb->cfg.incident(); !ei.end(); ei.next()) {
|
||||
BasicBlock *in = BasicBlock::get(ei.getNode());
|
||||
|
||||
if (in->cfg.visit(seq))
|
||||
buildDefSetsPreSSA(in, seq);
|
||||
|
||||
bb->defSet |= in->defSet;
|
||||
}
|
||||
|
||||
for (Instruction *i = bb->getEntry(); i; i = i->next) {
|
||||
for (int d = 0; i->defExists(d); ++d)
|
||||
bb->defSet.set(i->getDef(d)->id);
|
||||
}
|
||||
}
|
||||
|
||||
class RenamePass
|
||||
{
|
||||
public:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue