diff options
author | Christoph Bumiller <[email protected]> | 2012-04-18 17:00:52 +0200 |
---|---|---|
committer | Christoph Bumiller <[email protected]> | 2012-04-19 14:56:03 +0200 |
commit | 90b5301ceab8fd86fccf76efe7ebb039c0e4a28f (patch) | |
tree | 0e59c1b63cd4a5171e41021458dcf77c09f7fbc3 /src/gallium | |
parent | 97e2f625b8bcba96acde29dcd017031e036f4a24 (diff) |
nv50/ir/opt: swap VP inputs to first source where possible
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/nv50/codegen/nv50_ir_peephole.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_peephole.cpp index 3852a8de3d0..7d0ebc69710 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_peephole.cpp @@ -123,6 +123,7 @@ private: bool isCSpaceLoad(Instruction *); bool isImmd32Load(Instruction *); + bool isAttribOrSharedLoad(Instruction *); }; bool @@ -139,6 +140,16 @@ LoadPropagation::isImmd32Load(Instruction *ld) return ld->src(0).getFile() == FILE_IMMEDIATE; } +bool +LoadPropagation::isAttribOrSharedLoad(Instruction *ld) +{ + return ld && + (ld->op == OP_VFETCH || + (ld->op == OP_LOAD && + (ld->src(0).getFile() == FILE_SHADER_INPUT || + ld->src(0).getFile() == FILE_MEMORY_SHARED))); +} + void LoadPropagation::checkSwapSrc01(Instruction *insn) { @@ -162,6 +173,12 @@ LoadPropagation::checkSwapSrc01(Instruction *insn) insn->swapSources(0, 1); else return; + } else + if (isAttribOrSharedLoad(i1)) { + if (!isAttribOrSharedLoad(i0)) + insn->swapSources(0, 1); + else + return; } else { return; } |