From e9294e11b452e8ad159496abecf7fd0f406b0fe2 Mon Sep 17 00:00:00 2001 From: Christoph Bumiller Date: Wed, 27 Feb 2013 21:08:57 +0100 Subject: nv50/ir/ra: make sure all used function inputs get assigned a reg A live range [0, 0) counts as empty. For function inputs this can be a problem, so insert a nop at the beginning to make it [0, 1). This is a bit of a hack but also the most simple solution. --- src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/gallium') diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp index 5e5255fc4f8..e0fea4b9337 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_ra.cpp @@ -1586,6 +1586,13 @@ RegAlloc::execFunc() unsigned int i, retries; bool ret; + if (!func->ins.empty()) { + // Insert a nop at the entry so inputs only used by the first instruction + // don't count as having an empty live range. + Instruction *nop = new_Instruction(func, OP_NOP, TYPE_NONE); + BasicBlock::get(func->cfg.getRoot())->insertHead(nop); + } + ret = insertConstr.exec(func); if (!ret) goto out; -- cgit v1.2.3