diff options
author | Ilia Mirkin <[email protected]> | 2017-04-08 00:05:18 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2018-01-07 11:15:23 -0500 |
commit | 7f92c8ee3709b7e229321636ee15b6b7571fe3ea (patch) | |
tree | af517610571b3f07a67fcfbd3dfa584f93a27298 | |
parent | bdf300e09d8ddbcacac5d7c8d727e5c2f5635f50 (diff) |
nvc0/ir: safen up lowering logic against overwriting reused values
I'm fairly sure both of the changed sites are OK as-is, but they're
fragile, so this is just safening them up. Since this is happening
pre-ssa, we don't want to be overwriting values that may potentially get
used later on.
Signed-off-by: Ilia Mirkin <[email protected]>
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp index 51f6fae2c1f..8a864079ce9 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp @@ -1046,9 +1046,11 @@ NVC0LoweringPass::handleTEX(TexInstruction *i) if (chipset >= NVISA_GM107_CHIPSET) s += dim; if (i->tex.target.isArray()) { - bld.mkOp3(OP_INSBF, TYPE_U32, i->getSrc(s), + Value *offset = bld.getScratch(); + bld.mkOp3(OP_INSBF, TYPE_U32, offset, bld.loadImm(NULL, imm), bld.mkImm(0xc10), i->getSrc(s)); + i->setSrc(s, offset); } else { i->moveSources(s, 1); i->setSrc(s, bld.loadImm(NULL, imm << 16)); @@ -2457,7 +2459,7 @@ NVC0LoweringPass::handleLDST(Instruction *i) // Clamp the UBO index when an indirect access is used to avoid // loading information from the wrong place in the driver cb. // TODO - synchronize the max with the driver. - ind = bld.mkOp2v(OP_MIN, TYPE_U32, ind, + ind = bld.mkOp2v(OP_MIN, TYPE_U32, bld.getSSA(), bld.mkOp2v(OP_ADD, TYPE_U32, bld.getSSA(), ind, bld.loadImm(NULL, fileIndex)), bld.loadImm(NULL, 13)); |