On 6/18/20 2:47 PM, Richard Biener wrote:
This fixes the omission of moving the expansion result to the
target.
Thank you for the fix, it's new for me that this can happen.
Martin
Bootstrapped and tested on x86_64-unknown-linux-gnu, fixes the
observed -m32 FAIL.
2020-06-18 Richard Biener <rguent...@suse.de>
PR middle-end/95739
* internal-fn.c (expand_vect_cond_optab_fn): Move the result
to the target if necessary.
(expand_vect_cond_mask_optab_fn): Likewise.
---
gcc/internal-fn.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
index 644f234e087..2329e3db22f 100644
--- a/gcc/internal-fn.c
+++ b/gcc/internal-fn.c
@@ -2589,6 +2589,8 @@ expand_vect_cond_optab_fn (internal_fn, gcall *stmt,
convert_optab optab)
create_fixed_operand (&ops[4], XEXP (comparison, 0));
create_fixed_operand (&ops[5], XEXP (comparison, 1));
expand_insn (icode, 6, ops);
+ if (!rtx_equal_p (ops[0].value, target))
+ emit_move_insn (target, ops[0].value);
}
#define expand_vec_cond_optab_fn expand_vect_cond_optab_fn
@@ -2629,6 +2631,8 @@ expand_vect_cond_mask_optab_fn (internal_fn, gcall *stmt,
convert_optab optab)
create_input_operand (&ops[2], rtx_op2, mode);
create_input_operand (&ops[3], mask, mask_mode);
expand_insn (icode, 4, ops);
+ if (!rtx_equal_p (ops[0].value, target))
+ emit_move_insn (target, ops[0].value);
}
#define expand_vec_cond_mask_optab_fn expand_vect_cond_mask_optab_fn