[Mesa-dev] [PATCH] nv50/ir: only stick one preret per function
Samuel Pitoiset
samuel.pitoiset at gmail.com
Sun Oct 9 11:53:17 UTC 2016
On 10/09/2016 06:12 AM, Ilia Mirkin wrote:
> A function with multiple returns would have had multiple preret settings
> at the top of the function. While this is unlikely to have caused issues
> since we don't use funcitons in earnest, it could have in some cases
s/funcitons/functions/ :)
This looks good to me, but fyi this doesn't fix the regressions
introduced with "nv50/ir: start LocalCSE with getFirst to merge PHI
instructions". Something else is probably wrong.
Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
> overflowed the call stack, in case a function had a lot of early
> returns.
>
> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
> ---
> src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 11 +++++++----
> 1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
> index 5938226..6664366 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp
> @@ -3475,10 +3475,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;
> - setPosition(pos, true);
> + BasicBlock *root = BasicBlock::get(func->cfg.getRoot());
> + if (root->getEntry() != NULL && root->getEntry()->op != OP_PRERET) {
> + BasicBlock *pos = getBB();
> + setPosition(root, false);
> + mkFlow(OP_PRERET, leave, CC_ALWAYS, NULL)->fixed = 1;
> + setPosition(pos, true);
> + }
> }
> mkFlow(OP_RET, NULL, CC_ALWAYS, NULL)->fixed = 1;
> bb->cfg.attach(&leave->cfg, Graph::Edge::CROSS);
>
More information about the mesa-dev
mailing list