mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-24 22:11:56 +08:00
vshuffle: Use correct mode for mask operand.
From-SVN: r179622
This commit is contained in:
parent
92aea285e7
commit
8864db874b
@ -1,3 +1,8 @@
|
||||
2001-10-06 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* optabs.c (expand_vec_shuffle_expr): Use the proper mode for the
|
||||
mask operand. Tidy the code.
|
||||
|
||||
2011-10-06 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tree-vect-patterns.c (vect_pattern_recog_1): Use
|
||||
|
16
gcc/optabs.c
16
gcc/optabs.c
@ -6650,9 +6650,8 @@ expand_vec_shuffle_expr (tree type, tree v0, tree v1, tree mask, rtx target)
|
||||
struct expand_operand ops[4];
|
||||
enum insn_code icode;
|
||||
enum machine_mode mode = TYPE_MODE (type);
|
||||
rtx rtx_v0, rtx_mask;
|
||||
|
||||
gcc_assert (expand_vec_shuffle_expr_p (mode, v0, v1, mask));
|
||||
gcc_checking_assert (expand_vec_shuffle_expr_p (mode, v0, v1, mask));
|
||||
|
||||
if (TREE_CODE (mask) == VECTOR_CST)
|
||||
{
|
||||
@ -6675,24 +6674,23 @@ expand_vec_shuffle_expr (tree type, tree v0, tree v1, tree mask, rtx target)
|
||||
return expand_expr_real_1 (call, target, VOIDmode, EXPAND_NORMAL, NULL);
|
||||
}
|
||||
|
||||
vshuffle:
|
||||
vshuffle:
|
||||
icode = direct_optab_handler (vshuffle_optab, mode);
|
||||
|
||||
if (icode == CODE_FOR_nothing)
|
||||
return 0;
|
||||
|
||||
rtx_mask = expand_normal (mask);
|
||||
|
||||
create_output_operand (&ops[0], target, mode);
|
||||
create_input_operand (&ops[3], rtx_mask, mode);
|
||||
create_input_operand (&ops[3], expand_normal (mask),
|
||||
TYPE_MODE (TREE_TYPE (mask)));
|
||||
|
||||
if (operand_equal_p (v0, v1, 0))
|
||||
{
|
||||
rtx_v0 = expand_normal (v0);
|
||||
if (!insn_operand_matches(icode, 1, rtx_v0))
|
||||
rtx rtx_v0 = expand_normal (v0);
|
||||
if (!insn_operand_matches (icode, 1, rtx_v0))
|
||||
rtx_v0 = force_reg (mode, rtx_v0);
|
||||
|
||||
gcc_checking_assert(insn_operand_matches(icode, 2, rtx_v0));
|
||||
gcc_checking_assert (insn_operand_matches (icode, 2, rtx_v0));
|
||||
|
||||
create_fixed_operand (&ops[1], rtx_v0);
|
||||
create_fixed_operand (&ops[2], rtx_v0);
|
||||
|
Loading…
x
Reference in New Issue
Block a user