aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2020-06-18 14:45:03 +0200
committerRichard Biener <rguenther@suse.de>2020-06-18 14:47:34 +0200
commiteccc3d432669ba272229d49f015cb986df21eb0a (patch)
tree9a3b1a718ba6e9b6a07b378ab12b0a66012c5773 /gcc
parent9435fb9668ecb0e9823a307f85dcb28b13beb431 (diff)
downloadgcc-eccc3d432669ba272229d49f015cb986df21eb0a.zip
gcc-eccc3d432669ba272229d49f015cb986df21eb0a.tar.gz
gcc-eccc3d432669ba272229d49f015cb986df21eb0a.tar.bz2
middle-end/95739 - fix vector condition IFN expansion
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/internal-fn.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/gcc/internal-fn.c b/gcc/internal-fn.c
index 644f234..2329e3d 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