mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 21:50:11 +01:00
nv50/ir/ssa: Take into account function inputs and outputs.
This commit is contained in:
parent
4a44f94caf
commit
4ece0dbd2f
1 changed files with 30 additions and 2 deletions
|
|
@ -352,7 +352,7 @@ Function::convertToSSA()
|
|||
// gather blocks with assignments to lval in workList
|
||||
for (Value::DefIterator d = lval->defs.begin();
|
||||
d != lval->defs.end(); ++d) {
|
||||
bb = (*d)->getInsn()->bb;
|
||||
bb = ((*d)->getInsn() ? (*d)->getInsn()->bb : NULL);
|
||||
if (!bb)
|
||||
continue; // instruction likely been removed but not XXX deleted
|
||||
|
||||
|
|
@ -436,10 +436,25 @@ bool RenamePass::run()
|
|||
|
||||
void RenamePass::search(BasicBlock *bb)
|
||||
{
|
||||
LValue *lval;
|
||||
LValue *lval, *ssa;
|
||||
int d, s;
|
||||
const Target *targ = prog->getTarget();
|
||||
|
||||
if (bb == BasicBlock::get(func->cfg.getRoot())) {
|
||||
for (std::deque<ValueDef>::iterator it = func->ins.begin();
|
||||
it != func->ins.end(); ++it) {
|
||||
lval = it->get()->asLValue();
|
||||
assert(lval);
|
||||
|
||||
ssa = new_LValue(func, targ->nativeFile(lval->reg.file));
|
||||
ssa->reg.size = lval->reg.size;
|
||||
ssa->reg.data.id = lval->reg.data.id;
|
||||
|
||||
it->setSSA(ssa);
|
||||
stack[lval->id].push(ssa);
|
||||
}
|
||||
}
|
||||
|
||||
for (Instruction *stmt = bb->getFirst(); stmt; stmt = stmt->next) {
|
||||
if (stmt->op != OP_PHI) {
|
||||
for (s = 0; stmt->srcExists(s); ++s) {
|
||||
|
|
@ -487,6 +502,19 @@ void RenamePass::search(BasicBlock *bb)
|
|||
for (Graph::EdgeIterator ei = bb->dom.outgoing(); !ei.end(); ei.next())
|
||||
search(BasicBlock::get(ei.getNode()));
|
||||
|
||||
if (bb == BasicBlock::get(func->cfgExit)) {
|
||||
for (std::deque<ValueRef>::iterator it = func->outs.begin();
|
||||
it != func->outs.end(); ++it) {
|
||||
lval = it->get()->asLValue();
|
||||
if (!lval)
|
||||
continue;
|
||||
lval = getStackTop(lval);
|
||||
if (!lval)
|
||||
lval = static_cast<LValue *>(undef->getDef(0));
|
||||
it->set(lval);
|
||||
}
|
||||
}
|
||||
|
||||
for (Instruction *stmt = bb->getFirst(); stmt; stmt = stmt->next) {
|
||||
for (d = 0; stmt->defExists(d); ++d)
|
||||
stack[stmt->def(d).preSSA()->id].pop();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue