| Issue |
113858
|
| Summary |
Wrong folding binary ops with PHI operands
|
| Labels |
|
| Assignees |
|
| Reporter |
bongjunj
|
https://github.com/llvm/llvm-project/blob/a1d31caa8c53082d12f580122dcf2b2ff8285e78/llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp#L2364-L2365
https://github.com/llvm/llvm-project/blob/c876d719ef5b10128eca6d8677068248b4831017/llvm/lib/Transforms/InstCombine/InstructionCombining.cpp#L2016-L2020
Alive2 report: https://alive2.llvm.org/ce/z/4_XyjS
```llvm
----------------------------------------
define i32 @phi1UndefInput.2(i1 %cond, i8 %arg0, i8 %arg1, i8 %arg2, i8 %arg3) {
entry:
br i1 %cond, label %bb2, label %bb3
bb2:
br label %bb3
bb3:
%phi0 = phi i8 [ %arg0, %bb2 ], [ 0, %entry ]
%phi1 = phi i8 [ %arg1, %bb2 ], [ 0, %entry ]
%phi2 = phi i8 [ %arg2, %bb2 ], [ 0, %entry ]
%phi3 = phi i8 [ %arg3, %bb2 ], [ undef, %entry ]
%zext0 = zext i8 %phi0 to i32
%zext1 = zext i8 %phi1 to i32
%zext2 = zext i8 %phi2 to i32
%zext3 = zext i8 %phi3 to i32
%or1 = or i32 %zext0, %zext1
%or2 = or i32 %or1, %zext2
%or3 = or i32 %or2, %zext3
ret i32 %or3
}
=>
define i32 @phi1UndefInput.2(i1 %cond, i8 %arg0, i8 %arg1, i8 %arg2, i8 %arg3) {
entry:
br i1 %cond, label %bb2, label %bb3
bb2:
%#0 = or i8 %arg0, %arg1
%#1 = or i8 %#0, %arg2
br label %bb3
bb3:
%or22 = phi i8 [ %#1, %bb2 ], [ 0, %entry ]
%or33 = or i8 %or22, %arg3
%or3 = zext i8 %or33 to i32
ret i32 %or3
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source
Example:
i1 %cond = #x0 (0)
i8 %arg0 = #x00 (0)
i8 %arg1 = #x00 (0)
i8 %arg2 = #x00 (0)
i8 %arg3 = poison
Source:
>> Jump to %bb3
i8 %phi0 = #x00 (0)
i8 %phi1 = #x00 (0)
i8 %phi2 = #x00 (0)
i8 %phi3 = #x00 (0) [based on undef value]
i32 %zext0 = #x00000000 (0)
i32 %zext1 = #x00000000 (0)
i32 %zext2 = #x00000000 (0)
i32 %zext3 = #x00000000 (0)
i32 %or1 = #x00000000 (0)
i32 %or2 = #x00000000 (0)
i32 %or3 = #x00000000 (0)
Target:
>> Jump to %bb3
i8 %or22 = #x00 (0)
i8 %or33 = poison
i32 %or3 = poison
Source value: #x00000000 (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