Issue 180409
Summary [AArch64] Wrong code at -O1
Labels backend:AArch64, miscompilation, generated by fuzzer
Assignees
Reporter XChy
    Reproducer: https://godbolt.org/z/WcKs34b95
Testcase:
```c
#include <stdint.h>
#include <stdio.h>
#define BS_VEC(type, num) type __attribute__((vector_size(num * sizeof(type))))
int main()
{
 BS_VEC(uint32_t, 4) BS_VAR_0 = {};
    uint64_t BS_CHECKSUM = 0;
BS_LABEL_0:
    BS_VAR_0 = __builtin_shufflevector(
 (BS_VEC(uint32_t, 16)){ 4, 4, 4, 4, 4 },
        (BS_VEC(uint32_t, 16)){ 0, 0, 0, 0, 0, 0, 0, 0, 4 }
            * __builtin_shufflevector(BS_VAR_0, BS_VAR_0, 4, 7, 0, 0, 3, 0, 1,
                                      7, 3, 0, 6, 2, 6, 2, 3, 4),
        2, 4, 31, 24);
    for (uint32_t i = 0; i < 4; i++) BS_CHECKSUM ^= BS_VAR_0[i];
    int volatile a = 0;
    if (a) goto BS_LABEL_0;
    printf("BackSmith Checksum = 0x%016llx\n", BS_CHECKSUM);
}
```

Output at -O0:
```
BackSmith Checksum = 0x0000000000000000
```
Output at -O1:
```
BackSmith Checksum = 0x0000000000000004
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to