summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIlia Mirkin <[email protected]>2015-11-06 19:28:29 -0500
committerIlia Mirkin <[email protected]>2015-11-06 19:39:32 -0500
commit393d0c336bc766a123e139ae85383663f81e00d1 (patch)
tree364cd551dc80aa028762a20fdb9fb81cae41eb14
parent2f9aaed7499499679d44e47b7a070df237f77683 (diff)
nv50/ir: properly set the type of the constant folding result
This removes the hack used for merge, which only covers a fraction of the cases. Signed-off-by: Ilia Mirkin <[email protected]>
-rw-r--r--src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
index f0955978dc8..0f1dcf0dacd 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
@@ -448,7 +448,7 @@ ConstantFolding::expr(Instruction *i,
{
struct Storage *const a = &imm0.reg, *const b = &imm1.reg;
struct Storage res;
- uint8_t fixSrc0Size = 0;
+ DataType type = i->dType;
memset(&res.data, 0, sizeof(res.data));
@@ -590,6 +590,7 @@ ConstantFolding::expr(Instruction *i,
// The two arguments to pfetch are logically added together. Normally
// the second argument will not be constant, but that can happen.
res.data.u32 = a->data.u32 + b->data.u32;
+ type = TYPE_U32;
break;
case OP_MERGE:
switch (i->dType) {
@@ -597,7 +598,6 @@ ConstantFolding::expr(Instruction *i,
case TYPE_S64:
case TYPE_F64:
res.data.u64 = (((uint64_t)b->data.u32) << 32) | a->data.u32;
- fixSrc0Size = 8;
break;
default:
return;
@@ -616,8 +616,8 @@ ConstantFolding::expr(Instruction *i,
i->setSrc(1, NULL);
i->getSrc(0)->reg.data = res.data;
- if (fixSrc0Size)
- i->getSrc(0)->reg.size = fixSrc0Size;
+ i->getSrc(0)->reg.type = type;
+ i->getSrc(0)->reg.size = typeSizeof(type);
switch (i->op) {
case OP_MAD: