https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116041
Bug ID: 116041 Summary: aarch64 fallout from removing vcond{,u,eq} patterns Product: gcc Version: 15.0 Status: UNCONFIRMED Keywords: internal-improvement, missed-optimization Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Blocks: 114189 Target Milestone: --- >From PR 114189: aarch64 reports just `` FAIL: gcc.target/aarch64/if-compare_2.c check-function-bodies bar1 FAIL: gcc.target/aarch64/if-compare_2.c check-function-bodies bar2 ``` When I removed the vcond support from aarch64, these testcases fail. The reduced testcase is: ``` void bar1 (int * restrict a, int * restrict b, int * restrict c, int * restrict d, int * restrict res, int n) { for (int i = 0; i < (n & -4); i++) res[i] = ((a[i] < b[i]) & c[i]) | ((a[i] >= b[i]) & d[i]); } ``` This fails to vectorize even. >From the dump: t1.c:4:21: note: vect_is_simple_use: operand _4 < _6, type of def: internal t1.c:4:21: note: vect_is_simple_use: vectype vector(4) <signed-boolean:32> t1.c:4:21: note: vect_is_simple_use: operand 1, type of def: constant t1.c:4:21: note: vect_is_simple_use: operand 0, type of def: constant t1.c:1:6: missed: not vectorized: relevant stmt not supported: patt_72 = _7 ? 1 : 0; t1.c:4:21: missed: bad operation or unsupported loop bound. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114189 [Bug 114189] Target implements obsolete vcond{,u,eq} expanders