void mir_print_bundle(midgard_bundle *ctx);
void mir_print_block(midgard_block *block);
void mir_print_shader(compiler_context *ctx);
-bool mir_nontrivial_raw_mod(midgard_vector_alu_src src, bool is_int);
bool mir_nontrivial_source2_mod(midgard_instruction *ins);
+bool mir_nontrivial_source2_mod_simple(midgard_instruction *ins);
bool mir_nontrivial_mod(midgard_vector_alu_src src, bool is_int, unsigned mask);
bool mir_nontrivial_outmod(midgard_instruction *ins);
/* We don't know how to handle these with a constant */
- bool is_int = midgard_is_integer_op(ins->alu.op);
- if (mir_nontrivial_raw_mod(*src, is_int) || src->half || src->rep_low || src->rep_high) {
+ if (mir_nontrivial_source2_mod_simple(ins) || src->rep_low || src->rep_high) {
DBG("Bailing inline constant...\n");
continue;
}
return mir_use_count(ctx, value) <= 1;
}
-bool
+static bool
mir_nontrivial_raw_mod(midgard_vector_alu_src src, bool is_int)
{
if (is_int)
return false;
}
+
bool
mir_nontrivial_source2_mod(midgard_instruction *ins)
{
return mir_nontrivial_mod(src2, is_int, ins->mask);
}
+bool
+mir_nontrivial_source2_mod_simple(midgard_instruction *ins)
+{
+ bool is_int = midgard_is_integer_op(ins->alu.op);
+
+ midgard_vector_alu_src src2 =
+ vector_alu_from_unsigned(ins->alu.src2);
+
+ return mir_nontrivial_raw_mod(src2, is_int) && !src2.half;
+}
+
bool
mir_nontrivial_outmod(midgard_instruction *ins)
{