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

            Bug ID: 126765
           Summary: [15/16/17 Regression] wrong code with -O2
           Product: gcc
           Version: 17.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: tree-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: xxs_chy at outlook dot com
  Target Milestone: ---

Reproducer: https://godbolt.org/z/PEj386crx
Reduced case:
#include <stdint.h>
#include <stdio.h>
#define BITCAST(DST_TYPE, SRC_TYPE, VALUE)                                    
\
    (union {                                                                  
\
        SRC_TYPE src;                                                         
\
        DST_TYPE dst                                                          
\
    }){ VALUE }                                                               
\
        .dst
typedef int8_t v2i8 __attribute__((vector_size(2)));
typedef uint8_t v2u8 __attribute__((vector_size(2)));
typedef uint64_t v16u64 __attribute__((vector_size(128)));
uint64_t __chk;
v16u64 g14 = { 5096067849,
               1020276268854195167,
               4044591831107781041,
               50030156385817,
               0,
               0,
               407226543889204245,
               3061507383067879,
               0,
               702615430303539,
               0,
               107291660716,
               4,
               7,
               50983068812403358,
               9068252662333504 };
uint16_t g23;
int main()
{
    g14 = g14 > (v16u64){};
    v2u8 bc4 = BITCAST(v2u8, uint16_t, g23 / 32879);
    bc4 = (v2i8)bc4 < (v2i8){};
    __chk = BITCAST(uint16_t, v2u8, bc4);
    printf("checksum=0x%016llx\n", (unsigned long long)__chk);
}

This case outputs checksum=0x000000000000ff00 at -O2, and outputs
checksum=0x0000000000000000 at -O0.

Reply via email to