https://gcc.gnu.org/g:5f2ac8c5ea3ebbb8c48bfd4070b6cd8580395e85
commit r16-6572-g5f2ac8c5ea3ebbb8c48bfd4070b6cd8580395e85 Author: Jakub Jelinek <[email protected]> Date: Thu Jan 8 10:37:20 2026 +0100 testsuite: Fix up pr123319.c [PR123319] The testcase committed as gcc.dg/pr123319.c was x86_64 specific due to immintrin.h include and use of _mm_avg_pu8 & __m64. Furthermore, it failed even on ia32 due to using SSE ISA stuff without -msse. The following patch fixes that by moving that test to gcc.target/i386/, adding -msse, adding comment with PR number, adding -msse to dg-options and adding a new generic test written by Andrew Pinski as gcc.dg/pr123319.c. Tested on x86_64-linux with make check-gcc RUNTESTFLAGS='--target_board=unix\{-m32,-m32/-mno-sse,-m64\} dg.exp=pr123319.c i386.exp=pr123319.c' both with current cc1 and cc1 from 2 days ago where everything ICEd. 2026-01-08 Jakub Jelinek <[email protected]> Andrew Pinski <[email protected]> PR tree-optimization/123319 * gcc.dg/pr123319.c: Replace test with target independent one. Move previous test to ... * gcc.target/i386/pr123319.c: ... here. Add comment with PR number, add -msse to dg-options, move immintrin.h include right after stdint.h include. Diff: --- gcc/testsuite/gcc.dg/pr123319.c | 110 ++++++++----------------------- gcc/testsuite/gcc.target/i386/pr123319.c | 90 +++++++++++++++++++++++++ 2 files changed, 118 insertions(+), 82 deletions(-) diff --git a/gcc/testsuite/gcc.dg/pr123319.c b/gcc/testsuite/gcc.dg/pr123319.c index a60f2de22d6e..125216b89e43 100644 --- a/gcc/testsuite/gcc.dg/pr123319.c +++ b/gcc/testsuite/gcc.dg/pr123319.c @@ -1,89 +1,35 @@ -/* { dg-do compile } */ -/* { dg-options "-O3 -w -Wno-psabi" } */ +/* PR tree-optimization/123319 */ +/* { dg-do compile { target int32plus } } */ +/* { dg-options "-O3" } */ -#include <stdint.h> -#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type)))) -#define BITCAST(T, F, arg) \ - (union { \ - F src; \ - T dst \ - }){ arg } \ - .dst -#include <immintrin.h> -#define BARRIER_v8u8(x) (BS_VEC(uint8_t, 8)) _mm_avg_pu8((__m64)x, (__m64)x) -uint64_t BS_CHECKSUM_ARR[]; -BS_VEC(int8_t, 16) backsmith_pure_2(BS_VEC(int32_t, 8)); -BS_VEC(uint16_t, 4) -backsmith_pure_0(BS_VEC(uint8_t, 4), int16_t, int64_t BS_ARG_2) +signed char b, c[4]; +void foo (void); + +void +bar (long e) { - int8_t BS_VAR_1; - BS_VEC(uint8_t, 16) BS_VAR_4[7]; - if (BS_ARG_2) - { - if ((uint16_t)BS_ARG_2) - for (uint16_t BS_INC_0;;) - __builtin_convertvector( - __builtin_shufflevector(BS_VAR_4[BS_INC_0], - BS_VAR_4[BS_INC_0], 8, 4, 5, 8), - BS_VEC(uint16_t, 4)); - BS_VAR_1 = __builtin_convertvector( - __builtin_shufflevector((BS_VEC(uint8_t, 8)){}, BARRIER_v8u8({}), 4, - 10, 2, 1), - BS_VEC(int8_t, 4))[BS_ARG_2]; - uint16_t BS_TEMP_11 = BS_VAR_1; - return (BS_VEC(uint16_t, 4)){ BS_TEMP_11 }; - } - __builtin_convertvector(__builtin_shufflevector((BS_VEC(uint8_t, 8)){}, - (BS_VEC(uint8_t, 8)){}, 2, - 6, 4, 4), - BS_VEC(uint16_t, 4)); + if (e) { + if ((short) e) + for (;;) + ; + foo (); + b = c[e]; + } } -static int32_t *func_31(int32_t *, uint64_t); -uint16_t func_1() + +static void +baz (long e) { - BITCAST( - int64_t, BS_VEC(int16_t, 4), - (__builtin_convertvector( - __builtin_shufflevector((BS_VEC(uint32_t, 4)){}, - (BS_VEC(uint32_t, 4)){}, 0, 3, 3, 0, 2, 7, - 2, 5, 3, 5, 0, 4, 0, 1, 1, 7, 1, 0, 6, 7, - 6, 3, 4, 6, 3, 3, 1, 7, 3, 6, 0, 0), - BS_VEC(int16_t, 32)), - __builtin_convertvector( - __builtin_shufflevector( - backsmith_pure_0((BS_VEC(uint8_t, 4)){}, 0, - BITCAST(int64_t, BS_VEC(int32_t, 2), )), - backsmith_pure_0( - (BS_VEC(uint8_t, 4)){}, 0, - BITCAST(int64_t, BS_VEC(int32_t, 2), - __builtin_convertvector( - __builtin_shufflevector( - backsmith_pure_2(__builtin_convertvector( - (BS_VEC(int64_t, 8)){}, - BS_VEC(int32_t, 8))), - backsmith_pure_2(__builtin_convertvector( - (BS_VEC(int64_t, 8)){}, - BS_VEC(int32_t, 8))), - 9, 2), - BS_VEC(int32_t, 2)))), - 3, 7, 5, 5, 1, 0, 2, 1, 1, 4, 6, 4, 5, 1, 5, 6, 1, 0, 1, 6, 4, - 1, 2, 3, 1, 1, 1, 0, 7, 2, 5, 1), - BS_VEC(int16_t, 32)), - 1)); - int32_t l_969; - int8_t l_1016 = 1; - func_31(&l_969, l_1016); - __builtin_convertvector((BS_VEC(int32_t, 32)){}, BS_VEC(int16_t, 32)), - __builtin_convertvector((BS_VEC(int32_t, 2)){}, BS_VEC(uint8_t, 2)); - int l_572 = 2558744285; - func_31(0, l_572); + bar (e); } -int32_t *func_31(int32_t *, uint64_t p_33) + +int g; + +void +qux () { - uint64_t LOCAL_CHECKSUM; - backsmith_pure_0( - __builtin_convertvector((BS_VEC(int32_t, 4)){}, BS_VEC(uint8_t, 4)), - 20966, p_33); - for (uint32_t BS_TEMP_215; BS_TEMP_215;) - BS_CHECKSUM_ARR[6] += LOCAL_CHECKSUM; + bar (g); + baz (1); + int h = 2558744285; + baz (h); } diff --git a/gcc/testsuite/gcc.target/i386/pr123319.c b/gcc/testsuite/gcc.target/i386/pr123319.c new file mode 100644 index 000000000000..b43cfc0f484b --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr123319.c @@ -0,0 +1,90 @@ +/* PR tree-optimization/123319 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -w -Wno-psabi -msse" } */ + +#include <stdint.h> +#include <immintrin.h> +#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type)))) +#define BITCAST(T, F, arg) \ + (union { \ + F src; \ + T dst \ + }){ arg } \ + .dst +#define BARRIER_v8u8(x) (BS_VEC(uint8_t, 8)) _mm_avg_pu8((__m64)x, (__m64)x) +uint64_t BS_CHECKSUM_ARR[]; +BS_VEC(int8_t, 16) backsmith_pure_2(BS_VEC(int32_t, 8)); +BS_VEC(uint16_t, 4) +backsmith_pure_0(BS_VEC(uint8_t, 4), int16_t, int64_t BS_ARG_2) +{ + int8_t BS_VAR_1; + BS_VEC(uint8_t, 16) BS_VAR_4[7]; + if (BS_ARG_2) + { + if ((uint16_t)BS_ARG_2) + for (uint16_t BS_INC_0;;) + __builtin_convertvector( + __builtin_shufflevector(BS_VAR_4[BS_INC_0], + BS_VAR_4[BS_INC_0], 8, 4, 5, 8), + BS_VEC(uint16_t, 4)); + BS_VAR_1 = __builtin_convertvector( + __builtin_shufflevector((BS_VEC(uint8_t, 8)){}, BARRIER_v8u8({}), 4, + 10, 2, 1), + BS_VEC(int8_t, 4))[BS_ARG_2]; + uint16_t BS_TEMP_11 = BS_VAR_1; + return (BS_VEC(uint16_t, 4)){ BS_TEMP_11 }; + } + __builtin_convertvector(__builtin_shufflevector((BS_VEC(uint8_t, 8)){}, + (BS_VEC(uint8_t, 8)){}, 2, + 6, 4, 4), + BS_VEC(uint16_t, 4)); +} +static int32_t *func_31(int32_t *, uint64_t); +uint16_t func_1() +{ + BITCAST( + int64_t, BS_VEC(int16_t, 4), + (__builtin_convertvector( + __builtin_shufflevector((BS_VEC(uint32_t, 4)){}, + (BS_VEC(uint32_t, 4)){}, 0, 3, 3, 0, 2, 7, + 2, 5, 3, 5, 0, 4, 0, 1, 1, 7, 1, 0, 6, 7, + 6, 3, 4, 6, 3, 3, 1, 7, 3, 6, 0, 0), + BS_VEC(int16_t, 32)), + __builtin_convertvector( + __builtin_shufflevector( + backsmith_pure_0((BS_VEC(uint8_t, 4)){}, 0, + BITCAST(int64_t, BS_VEC(int32_t, 2), )), + backsmith_pure_0( + (BS_VEC(uint8_t, 4)){}, 0, + BITCAST(int64_t, BS_VEC(int32_t, 2), + __builtin_convertvector( + __builtin_shufflevector( + backsmith_pure_2(__builtin_convertvector( + (BS_VEC(int64_t, 8)){}, + BS_VEC(int32_t, 8))), + backsmith_pure_2(__builtin_convertvector( + (BS_VEC(int64_t, 8)){}, + BS_VEC(int32_t, 8))), + 9, 2), + BS_VEC(int32_t, 2)))), + 3, 7, 5, 5, 1, 0, 2, 1, 1, 4, 6, 4, 5, 1, 5, 6, 1, 0, 1, 6, 4, + 1, 2, 3, 1, 1, 1, 0, 7, 2, 5, 1), + BS_VEC(int16_t, 32)), + 1)); + int32_t l_969; + int8_t l_1016 = 1; + func_31(&l_969, l_1016); + __builtin_convertvector((BS_VEC(int32_t, 32)){}, BS_VEC(int16_t, 32)), + __builtin_convertvector((BS_VEC(int32_t, 2)){}, BS_VEC(uint8_t, 2)); + int l_572 = 2558744285; + func_31(0, l_572); +} +int32_t *func_31(int32_t *, uint64_t p_33) +{ + uint64_t LOCAL_CHECKSUM; + backsmith_pure_0( + __builtin_convertvector((BS_VEC(int32_t, 4)){}, BS_VEC(uint8_t, 4)), + 20966, p_33); + for (uint32_t BS_TEMP_215; BS_TEMP_215;) + BS_CHECKSUM_ARR[6] += LOCAL_CHECKSUM; +}
