On Mon, Nov 29, 2021 at 1:57 AM Andrew Pinski via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > On Sun, Nov 28, 2021 at 12:25 PM Jeff Law via Gcc-patches > <gcc-patches@gcc.gnu.org> wrote: > > > > > > > > On 11/28/2021 10:56 AM, apinski--- via Gcc-patches wrote: > > > From: Andrew Pinski <apin...@marvell.com> > > > > > > This just adds a simplification to simplify_vector_constructor for > > > vector of 1 element to be VCE which should reduce memory usage in > > > the compiler and maybe allow for some more optimizations. > > > > > > OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions. > > > > > > PR tree-optimization/101540 > > > > > > gcc/ChangeLog: > > > > > > * tree-ssa-forwprop.c (simplify_vector_constructor): > > > Simplify constructor of vector of 1 element to just > > > be a VIEW_CONVERT_EXPR. > > > > > > gcc/testsuite/ChangeLog: > > > > > > * gcc.dg/tree-ssa/pr101540-1.c: New test. > > So why generate a VCE here if the type conversion is useless? Why not > > just a NOP_EXPR? Is there something special about converting between > > the element type and the outer vector type that requires VCE rather than > > NOP_EXR? Neither an ACK or NAK, just trying to understand it a bit better. > > > Because right now tree-cfg.c has this check for vector types for NOP_EXPR: > /* Allow conversions between vectors with the same number of elements, > provided that the conversion is OK for the element types too. */ > if (VECTOR_TYPE_P (lhs_type) > && VECTOR_TYPE_P (rhs1_type) > && known_eq (TYPE_VECTOR_SUBPARTS (lhs_type), > TYPE_VECTOR_SUBPARTS (rhs1_type))) > { > lhs_type = TREE_TYPE (lhs_type); > rhs1_type = TREE_TYPE (rhs1_type); > } > else if (VECTOR_TYPE_P (lhs_type) || VECTOR_TYPE_P (rhs1_type)) > { > error ("invalid vector types in nop conversion"); > debug_generic_expr (lhs_type); > debug_generic_expr (rhs1_type); > return true; > } > > We can change this check here for NOP_EXPR and vector types but VCE is > still a nop in most cases and handled as such really. But I wonder if > the rest of the compiler is ready for it though.
It's definitely not a NOP, I think the original patch is OK. Thanks, Richard. > > Thanks, > Andrew Pinski > > > > > Jeff > > > >