summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
diff options
context:
space:
mode:
authorFrancisco Jerez <currojerez@riseup.net>2015-06-03 19:51:47 +0300
committerFrancisco Jerez <currojerez@riseup.net>2015-06-09 15:18:32 +0300
commita800ec04ad84abeb6243897a276facc4ef6cac82 (patch)
tree749e0d5abe4ade383723a5a080d191e37e9073d4 /src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
parent78f7c9edeb21ec4e7a4f96aa12b51cecc40e9688 (diff)
downloadexternal_mesa3d-a800ec04ad84abeb6243897a276facc4ef6cac82.zip
external_mesa3d-a800ec04ad84abeb6243897a276facc4ef6cac82.tar.gz
external_mesa3d-a800ec04ad84abeb6243897a276facc4ef6cac82.tar.bz2
i965/fs: Migrate opt_peephole_sel to the IR builder.
Reviewed-by: Matt Turner <mattst88@gmail.com>
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.cpp25
1 files changed, 12 insertions, 13 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 635c91b..8660ec0 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_sel_peephole.cpp
@@ -37,6 +37,8 @@
*/
#define MAX_MOVS 8 /**< The maximum number of MOVs to attempt to match. */
+using namespace brw;
+
/**
* Scans forwards from an IF counting consecutive MOV instructions in the
* "then" and "else" blocks of the if statement.
@@ -190,17 +192,16 @@ fs_visitor::opt_peephole_sel()
if (movs == 0)
continue;
+ const fs_builder ibld = bld.at(block, if_inst);
+
/* Emit a CMP if our IF used the embedded comparison */
- if (devinfo->gen == 6 && if_inst->conditional_mod) {
- fs_inst *cmp_inst = CMP(reg_null_d, if_inst->src[0], if_inst->src[1],
- if_inst->conditional_mod);
- if_inst->insert_before(block, cmp_inst);
- }
+ if (devinfo->gen == 6 && if_inst->conditional_mod)
+ ibld.CMP(ibld.null_reg_d(), if_inst->src[0], if_inst->src[1],
+ if_inst->conditional_mod);
for (int i = 0; i < movs; i++) {
if (then_mov[i]->src[0].equals(else_mov[i]->src[0])) {
- fs_inst *inst = MOV(then_mov[i]->dst, then_mov[i]->src[0]);
- if_inst->insert_before(block, inst);
+ ibld.MOV(then_mov[i]->dst, then_mov[i]->src[0]);
} else {
/* Only the last source register can be a constant, so if the MOV
* in the "then" clause uses a constant, we need to put it in a
@@ -210,14 +211,12 @@ fs_visitor::opt_peephole_sel()
if (src0.file == IMM) {
src0 = vgrf(glsl_type::float_type);
src0.type = then_mov[i]->src[0].type;
- fs_inst *inst = MOV(src0, then_mov[i]->src[0]);
- if_inst->insert_before(block, inst);
+ ibld.MOV(src0, then_mov[i]->src[0]);
}
- fs_inst *inst = SEL(then_mov[i]->dst, src0, else_mov[i]->src[0]);
- inst->predicate = predicate;
- inst->predicate_inverse = predicate_inverse;
- if_inst->insert_before(block, inst);
+ set_predicate_inv(predicate, predicate_inverse,
+ ibld.SEL(then_mov[i]->dst, src0,
+ else_mov[i]->src[0]));
}
then_mov[i]->remove(then_block);