[llvm] 2c16c4a - [ValueTracking] update directlyImpliesPoison to look into select's condition

Juneyoung Lee via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 7 06:17:35 PST 2021


Author: Juneyoung Lee
Date: 2021-03-07T23:16:44+09:00
New Revision: 2c16c4a43c756dd0e6e11426badfd858040dd46a

URL: https://github.com/llvm/llvm-project/commit/2c16c4a43c756dd0e6e11426badfd858040dd46a
DIFF: https://github.com/llvm/llvm-project/commit/2c16c4a43c756dd0e6e11426badfd858040dd46a.diff

LOG: [ValueTracking] update directlyImpliesPoison to look into select's condition

This is a minor update in directlyImpliesPoison and makes it look into select's
condition.
Splitted from https://reviews.llvm.org/D96945

Added: 
    

Modified: 
    llvm/lib/Analysis/ValueTracking.cpp
    llvm/test/Transforms/InstCombine/select-safe-bool-transforms.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index c62cfafd02b8..6437a4aa49b8 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4852,6 +4852,10 @@ static bool directlyImpliesPoison(const Value *ValAssumedPoison,
         return directlyImpliesPoison(ValAssumedPoison, Op, Depth + 1);
       });
 
+    // 'select ValAssumedPoison, _, _' is poison.
+    if (const auto *SI = dyn_cast<SelectInst>(I))
+      return directlyImpliesPoison(ValAssumedPoison, SI->getCondition(),
+                                   Depth + 1);
     // V  = extractvalue V0, idx
     // V2 = extractvalue V0, idx2
     // V0's elements are all poison or not. (e.g., add_with_overflow)

diff  --git a/llvm/test/Transforms/InstCombine/select-safe-bool-transforms.ll b/llvm/test/Transforms/InstCombine/select-safe-bool-transforms.ll
index edfc6f126a82..709011a0c832 100644
--- a/llvm/test/Transforms/InstCombine/select-safe-bool-transforms.ll
+++ b/llvm/test/Transforms/InstCombine/select-safe-bool-transforms.ll
@@ -86,8 +86,7 @@ define i1 @merge_logical_and_and3(i1 %X, i1 %Y) {
 define i1 @merge_two_logical_ands3(i1 %X, i1 %Y) {
 ; CHECK-LABEL: @merge_two_logical_ands3(
 ; CHECK-NEXT:    [[C:%.*]] = select i1 [[X:%.*]], i1 [[Y:%.*]], i1 false
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[C]], i1 [[X]], i1 false
-; CHECK-NEXT:    ret i1 [[RES]]
+; CHECK-NEXT:    ret i1 [[C]]
 ;
   %c = select i1 %X, i1 %Y, i1 false
   %res = select i1 %c, i1 %X, i1 false
@@ -223,8 +222,7 @@ define i1 @merge_logical_or_or3(i1 %X, i1 %Y) {
 define i1 @merge_two_logical_ors3(i1 %X, i1 %Y) {
 ; CHECK-LABEL: @merge_two_logical_ors3(
 ; CHECK-NEXT:    [[C:%.*]] = select i1 [[X:%.*]], i1 true, i1 [[Y:%.*]]
-; CHECK-NEXT:    [[RES:%.*]] = select i1 [[C]], i1 true, i1 [[X]]
-; CHECK-NEXT:    ret i1 [[RES]]
+; CHECK-NEXT:    ret i1 [[C]]
 ;
   %c = select i1 %X, i1 true, i1 %Y
   %res = select i1 %c, i1 true, i1 %X


        


More information about the llvm-commits mailing list