| Issue |
114905
|
| Summary |
wrong folding of `select`s in slp-vectorizer
|
| Labels |
new issue
|
| Assignees |
|
| Reporter |
bongjunj
|
Alive2 report: https://alive2.llvm.org/ce/z/jEopx9
```llvm
----------------------------------------
define i1 @logical_and_icmp_diff_preds.2(<4 x i32> %x) {
#0:
%x0 = extractelement <4 x i32> %x, i32 0
%x1 = extractelement <4 x i32> %x, i32 4294967295
%x3 = extractelement <4 x i32> %x, i32 3
%#1 = icmp ugt i32 %x0, 0
%c1 = icmp slt i32 %x1, 0
%c3 = icmp slt i32 %x3, 0
%s1 = select i1 %#1, i1 %c1, i1 0
%s2 = select i1 %s1, i1 %c3, i1 0
%s3 = select i1 %s2, i1 %c3, i1 0
ret i1 %s3
}
=>
define i1 @logical_and_icmp_diff_preds.2(<4 x i32> %x) {
#0:
%x0 = extractelement <4 x i32> %x, i32 0
%x1 = extractelement <4 x i32> %x, i32 4294967295
%x3 = extractelement <4 x i32> %x, i32 3
%#1 = icmp ugt i32 %x0, 0
%c1 = icmp slt i32 %x1, 0
%c3 = icmp slt i32 %x3, 0
%op.rdx = select i1 %c3, i1 %c1, i1 0
%op.rdx1 = select i1 %op.rdx, i1 %#1, i1 0
ret i1 %op.rdx1
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source
Example:
<4 x i32> %x = < #x00000000 (0), #x00000000 (0), #x00000000 (0), #xffffffff (4294967295, -1) >
Source:
i32 %x0 = #x00000000 (0)
i32 %x1 = poison
i32 %x3 = #xffffffff (4294967295, -1)
i1 %#1 = #x0 (0)
i1 %c1 = poison
i1 %c3 = #x1 (1)
i1 %s1 = #x0 (0)
i1 %s2 = #x0 (0)
i1 %s3 = #x0 (0)
Target:
i32 %x0 = #x00000000 (0)
i32 %x1 = poison
i32 %x3 = #xffffffff (4294967295, -1)
i1 %#1 = #x0 (0)
i1 %c1 = poison
i1 %c3 = #x1 (1)
i1 %op.rdx = poison
i1 %op.rdx1 = poison
Source value: #x0 (0)
Target value: poison
Summary:
0 correct transformations
1 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs