middle-end/95739 - fix vector condition IFN expansion
authorRichard Biener <rguenther@suse.de>
Thu, 18 Jun 2020 12:45:03 +0000 (14:45 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 18 Jun 2020 12:47:34 +0000 (14:47 +0200)
This fixes the omission of moving the expansion result to the
target.

2020-06-18  Richard Biener  <rguenther@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

index 644f234e087f74288573f90634ee8b6c70c6b202..2329e3db22f5fc2715ea373c3219590fbcc12bf8 100644 (file)
@@ -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