From 8864db874baf1ad3e4604394ec49047f78dce6bb Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 6 Oct 2011 10:12:19 -0700 Subject: [PATCH] vshuffle: Use correct mode for mask operand. From-SVN: r179622 --- gcc/ChangeLog | 5 +++++ gcc/optabs.c | 16 +++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e67de1d..32e80ea 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2001-10-06 Richard Henderson + + * optabs.c (expand_vec_shuffle_expr): Use the proper mode for the + mask operand. Tidy the code. + 2011-10-06 Jakub Jelinek * tree-vect-patterns.c (vect_pattern_recog_1): Use diff --git a/gcc/optabs.c b/gcc/optabs.c index 3a52fb0..aa233d5 100644 --- a/gcc/optabs.c +++ b/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); -- 2.7.4