https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103169

Tamar Christina <tnfchris at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Assignee|unassigned at gcc dot gnu.org      |tnfchris at gcc dot 
gnu.org

--- Comment #2 from Tamar Christina <tnfchris at gcc dot gnu.org> ---
looking at the tree it looks like with the new SLP layout the complex MUL is
detected but complex MUL re-arranges the nodes.  The nodes are

/app/example.c:6:7: note:   op: VEC_PERM_EXPR
/app/example.c:6:7: note:       { }
/app/example.c:6:7: note:       lane permutation { 0[0] 1[1] }
/app/example.c:6:7: note:       children 0x32b1ce0 0x32b2820
/app/example.c:6:7: note:   node 0x32b1ce0 (max_nunits=2, refcnt=1)
/app/example.c:6:7: note:   op template: _15 = PHI <_10(7), _13(3)>
/app/example.c:6:7: note:       stmt 0 _15 = PHI <_10(7), _13(3)>
/app/example.c:6:7: note:       stmt 1 _16 = PHI <_11(7), _14(3)>
/app/example.c:6:7: note:       children 0x32b1d70 0x32b2280

where 0x32b2820 is some externals.  By only selecting one of the phi nodes as
it re-orders it breaks the dominance. So I guess this transformation should
happen when any of the operands to the MUL is a phi node.

This I think happens because is_linear_load is punting for this node and we
return PERM_TOP where I think PERM_UNKNOWN is better here.

Reply via email to