| 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