diff options
Diffstat (limited to 'src/gallium/drivers/nv50')
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp index 8bd784fa47d..82e23602ca0 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp @@ -2196,12 +2196,13 @@ Converter::handleInstruction(const struct tgsi_full_instruction *insn) if (!isEndOfSubroutine(ip + 1)) { // insert a PRERET at the entry if this is an early return // (only needed for sharing code in the epilogue) + BasicBlock *pos = getBB(); + setPosition(BasicBlock::get(func->cfg.getRoot()), false); mkFlow(OP_PRERET, leave, CC_ALWAYS, NULL)->fixed = 1; - bb->cfg.attach(&leave->cfg, Graph::Edge::CROSS); - } else { - mkFlow(OP_RET, NULL, CC_ALWAYS, NULL)->fixed = 1; - bb->cfg.attach(&leave->cfg, Graph::Edge::TREE); + setPosition(pos, true); } + mkFlow(OP_RET, NULL, CC_ALWAYS, NULL)->fixed = 1; + bb->cfg.attach(&leave->cfg, Graph::Edge::CROSS); } break; case TGSI_OPCODE_END: |