On Mon, Jun 7, 2021 at 7:59 PM Richard Biener <richard.guent...@gmail.com> wrote: > > On Mon, Jun 7, 2021 at 4:19 PM H.J. Lu <hjl.to...@gmail.com> wrote: > > > > On Mon, Jun 7, 2021 at 12:12 AM Richard Sandiford > > <richard.sandif...@arm.com> wrote: > > > > > > "H.J. Lu" <hjl.to...@gmail.com> writes: > > > > Update vec_duplicate to allow to fail so that backend can only allow > > > > broadcasting an integer constant to a vector when broadcast instruction > > > > is available. > > > > > > I'm not sure why we need this to fail though. Once the optab is defined > > > for target X, the optab should handle all duplicates for target X, > > > even if there are different strategies it can use. > > > > > > AIUI the case you want to make conditional is the constant case. > > > I guess the first question is: why don't we simplify those CONSTRUCTORs > > > to VECTOR_CSTs in gimple? I'm surprised we still see the constant case > > > as a constructor here. > > > > The particular testcase for vec_duplicate is gcc.dg/pr100239.c. > > > > > If we can't rely on that happening, then would it work to change: > > > > > > /* Try using vec_duplicate_optab for uniform vectors. */ > > > if (!TREE_SIDE_EFFECTS (exp) > > > && VECTOR_MODE_P (mode) > > > && eltmode == GET_MODE_INNER (mode) > > > && ((icode = optab_handler (vec_duplicate_optab, mode)) > > > != CODE_FOR_nothing) > > > && (elt = uniform_vector_p (exp))) > > > > > > to something like: > > > > > > /* Try using vec_duplicate_optab for uniform vectors. */ > > > if (!TREE_SIDE_EFFECTS (exp) > > > && VECTOR_MODE_P (mode) > > > && eltmode == GET_MODE_INNER (mode) > > > && (elt = uniform_vector_p (exp))) > > > { > > > if (TREE_CODE (elt) == INTEGER_CST > > > || TREE_CODE (elt) == POLY_INT_CST > > > || TREE_CODE (elt) == REAL_CST > > > || TREE_CODE (elt) == FIXED_CST) > > > { > > > rtx src = gen_const_vec_duplicate (mode, expand_normal > > > (node)); > > > emit_move_insn (target, src); > > > break; > > > } > > > … > > > } > > > > I will give it a try. > > I can confirm that veclower leaves us with an unfolded constant CTOR. > If you file a PR to remind me I'll fix that.
The attached untested patch fixes this for the testcase. Richard. > Richard. > > > Thanks. > > > > -- > > H.J.
p
Description: Binary data