https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118727
Bug ID: 118727 Summary: [15 Regression] gcc.dg/pr108692.c fails on LoongArch Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: xry111 at gcc dot gnu.org Target Milestone: --- FAIL: gcc.dg/pr108692.c execution test To satisfy the general policy of the GCC BugZilla, the test case is pasted: /* PR tree-optimization/108692 */ /* { dg-do run } */ /* { dg-options "-O2 -ftree-vectorize" } */ __attribute__((noipa)) int foo (signed char *x, signed char *y, int n) { int i, r = 0; signed char a, b; for (i = 0; i < n; i++) { a = x[i]; b = y[i]; int c = (unsigned char) a - (unsigned char) b; r = r + (c < 0 ? -c : c); } return r; } int main () { signed char x[64] = {}, y[64] = {}; if (__CHAR_BIT__ != 8 || __SIZEOF_INT__ != 4) return 0; x[32] = -128; y[32] = 1; if (foo (x, y, 64) != 127) __builtin_abort (); return 0; } Things start to go wrong at 182t.vect: vect_b_16.19_88 = MEM <vector(16) signed char> [(signed char *)vectp_y.17_86]; vectp_y.17_89 = vectp_y.17_86 + 16; vect_b_16.20_90 = MEM <vector(16) signed char> [(signed char *)vectp_y.17_89]; vectp_y.17_91 = vectp_y.17_86 + 32; vect_b_16.21_92 = MEM <vector(16) signed char> [(signed char *)vectp_y.17_91]; vectp_y.17_93 = vectp_y.17_86 + 48; vect_b_16.22_94 = MEM <vector(16) signed char> [(signed char *)vectp_y.17_93]; vect_patt_41.24_111 = SAD_EXPR <vect_a_14.13_79, vect_b_16.19_88, vect_r_23.23_95>; vect_patt_41.24_112 = SAD_EXPR <vect_a_14.14_81, vect_b_16.20_90, vect_r_23.23_96>; vect_patt_41.24_113 = SAD_EXPR <vect_a_14.15_83, vect_b_16.21_92, vect_r_23.23_97>; vect_patt_41.24_114 = SAD_EXPR <vect_a_14.16_85, vect_b_16.22_94, vect_r_23.23_98>; so it's doing signed SAD operation, as unsigned SAD operation should be done. In GCC 14.2 the result is correct, and 179t.vect is correctly doing unsigned SAD operation: vect_a.18_84 = VIEW_CONVERT_EXPR<vector(16) unsigned char>(vect_a_14.14_80); a.0_4 = (unsigned char) a_14; _5 = (int) a.0_4; vect_b.19_85 = VIEW_CONVERT_EXPR<vector(16) unsigned char>(vect_b_16.17_83); b.1_6 = (unsigned char) b_16; _7 = (int) b.1_6; c_17 = _5 - _7; _8 = ABS_EXPR <c_17>; vect_patt_29.20_86 = SAD_EXPR <vect_a.18_84, vect_b.19_85, vect_r_23.11_77>;