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


Reply via email to