-
Notifications
You must be signed in to change notification settings - Fork 15k
Closed
Labels
llvm:instcombineCovers the InstCombine, InstSimplify and AggressiveInstCombine passesCovers the InstCombine, InstSimplify and AggressiveInstCombine passesmiscompilation
Description
llvm-project/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
Lines 3582 to 3585 in 7eae9bb
if (Value *S = simplifyWithOpReplaced(FalseVal, CondVal, | |
ConstantInt::getFalse(CondType), SQ, | |
/* AllowRefinement */ true)) | |
return replaceOperand(SI, 2, S); |
Alive2 report: https://alive2.llvm.org/ce/z/Qtu72J
----------------------------------------
define <2 x i1> @fun0(<2 x i1> %val0, <2 x i1> %val1) {
#0:
%val2 = select <2 x i1> %val0, <2 x i1> %val0, <2 x i1> %val0
%val3 = select <2 x i1> { undef, 1 }, <2 x i1> { 1, 1 }, <2 x i1> %val2
ret <2 x i1> %val3
}
=>
define <2 x i1> @fun0(<2 x i1> %val0, <2 x i1> %val1) {
#0:
ret <2 x i1> { poison, 1 }
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source
Example:
<2 x i1> %val0 = < #x0 (0), #x0 (0) >
<2 x i1> %val1 = < #x0 (0), #x0 (0) >
Source:
<2 x i1> %val2 = < #x0 (0), #x0 (0) >
<2 x i1> %val3 = < #x0 (0) [based on undef value], #x1 (1) >
Target:
Source value: < #x0 (0), #x1 (1) >
Target value: < poison, #x1 (1) >
Summary:
0 correct transformations
1 incorrect transformations
0 failed-to-prove transformations
0 Alive2 errors
Metadata
Metadata
Assignees
Labels
llvm:instcombineCovers the InstCombine, InstSimplify and AggressiveInstCombine passesCovers the InstCombine, InstSimplify and AggressiveInstCombine passesmiscompilation