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. Thanks, Andrew Pinski > > Jeff > >