- if (alu->src[i].abs) {
- /* abs trumps both neg and abs, do nothing */
- } else {
- alu->src[i].negate = (alu->src[i].negate != parent->src[0].negate);
- alu->src[i].abs |= parent->src[0].abs;
- }
+
+ /* Apply any modifiers that come from the parent opcode */
+ if (parent->op == nir_op_fneg || parent->op == nir_op_ineg)
+ alu_src_consume_negate(&alu->src[i]);
+ if (parent->op == nir_op_fabs || parent->op == nir_op_iabs)
+ alu_src_consume_abs(&alu->src[i]);
+
+ /* Apply modifiers from the parent source */
+ if (parent->src[0].negate)
+ alu_src_consume_negate(&alu->src[i]);
+ if (parent->src[0].abs)
+ alu_src_consume_abs(&alu->src[i]);