summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-02-11 13:12:07 -0800
committerMatt Turner <mattst88@gmail.com>2014-07-24 11:27:44 -0700
commit2a33510f1649f2ef5c5b2d693aa89ef0efc5dcfb (patch)
treeefb0abb9c829d9d0d109065999ad139c1d032abd /src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
parent96128d134be82cd5a8cda2c473c1242c18409029 (diff)
downloadexternal_mesa3d-2a33510f1649f2ef5c5b2d693aa89ef0efc5dcfb.zip
external_mesa3d-2a33510f1649f2ef5c5b2d693aa89ef0efc5dcfb.tar.gz
external_mesa3d-2a33510f1649f2ef5c5b2d693aa89ef0efc5dcfb.tar.bz2
i965/fs: Decide predicate/predicate_inverse outside of the for loop.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
index c0bba8e..03c7ee6 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
@@ -156,6 +156,18 @@ fs_visitor::opt_peephole_sel()
fs_inst *sel_inst[MAX_MOVS] = { NULL };
fs_inst *mov_imm_inst[MAX_MOVS] = { NULL };
+ enum brw_predicate predicate;
+ bool predicate_inverse;
+ if (brw->gen == 6 && if_inst->conditional_mod) {
+ /* For Sandybridge with IF with embedded comparison */
+ predicate = BRW_PREDICATE_NORMAL;
+ predicate_inverse = false;
+ } else {
+ /* Separate CMP and IF instructions */
+ predicate = if_inst->predicate;
+ predicate_inverse = if_inst->predicate_inverse;
+ }
+
/* Generate SEL instructions for pairs of MOVs to a common destination. */
for (int i = 0; i < movs; i++) {
if (!then_mov[i] || !else_mov[i])
@@ -190,15 +202,8 @@ fs_visitor::opt_peephole_sel()
}
sel_inst[i] = SEL(then_mov[i]->dst, src0, else_mov[i]->src[0]);
-
- if (brw->gen == 6 && if_inst->conditional_mod) {
- /* For Sandybridge with IF with embedded comparison */
- sel_inst[i]->predicate = BRW_PREDICATE_NORMAL;
- } else {
- /* Separate CMP and IF instructions */
- sel_inst[i]->predicate = if_inst->predicate;
- sel_inst[i]->predicate_inverse = if_inst->predicate_inverse;
- }
+ sel_inst[i]->predicate = predicate;
+ sel_inst[i]->predicate_inverse = predicate_inverse;
}
}