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.