[PATCH] D33801: [InstSimplify][ConstantFolding] Teach constant folding how to handle icmp null, (inttoptr x) as well as it handles icmp (inttoptr x), null

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 2 09:18:01 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL304559: [InstSimplify][ConstantFolding] Teach constant folding how to handle icmp null… (authored by ctopper).

Changed prior to commit:
  https://reviews.llvm.org/D33801?vs=101124&id=101226#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33801

Files:
  llvm/trunk/lib/Analysis/ConstantFolding.cpp
  llvm/trunk/test/Transforms/InstSimplify/compare.ll


Index: llvm/trunk/test/Transforms/InstSimplify/compare.ll
===================================================================
--- llvm/trunk/test/Transforms/InstSimplify/compare.ll
+++ llvm/trunk/test/Transforms/InstSimplify/compare.ll
@@ -1289,7 +1289,7 @@
 
 define i1 @constant_fold_null_inttoptr() {
 ; CHECK-LABEL: @constant_fold_null_inttoptr(
-; CHECK-NEXT:    ret i1 icmp eq (i32* inttoptr (i64 32 to i32*), i32* null)
+; CHECK-NEXT:    ret i1 false
 ;
   %x = icmp eq i32* null, inttoptr (i64 32 to i32*)
   ret i1 %x
Index: llvm/trunk/lib/Analysis/ConstantFolding.cpp
===================================================================
--- llvm/trunk/lib/Analysis/ConstantFolding.cpp
+++ llvm/trunk/lib/Analysis/ConstantFolding.cpp
@@ -1170,7 +1170,9 @@
                                                 const DataLayout &DL,
                                                 const TargetLibraryInfo *TLI) {
   // fold: icmp (inttoptr x), null         -> icmp x, 0
+  // fold: icmp null, (inttoptr x)         -> icmp 0, x
   // fold: icmp (ptrtoint x), 0            -> icmp x, null
+  // fold: icmp 0, (ptrtoint x)            -> icmp null, x
   // fold: icmp (inttoptr x), (inttoptr y) -> icmp trunc/zext x, trunc/zext y
   // fold: icmp (ptrtoint x), (ptrtoint y) -> icmp x, y
   //
@@ -1240,6 +1242,11 @@
         Predicate == ICmpInst::ICMP_EQ ? Instruction::And : Instruction::Or;
       return ConstantFoldBinaryOpOperands(OpC, LHS, RHS, DL);
     }
+  } else if (isa<ConstantExpr>(Ops1)) {
+    // If RHS is a constant expression, but the left side isn't, swap the
+    // operands and try again.
+    Predicate = ICmpInst::getSwappedPredicate((ICmpInst::Predicate)Predicate);
+    return ConstantFoldCompareInstOperands(Predicate, Ops1, Ops0, DL, TLI);
   }
 
   return ConstantExpr::getCompare(Predicate, Ops0, Ops1);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33801.101226.patch
Type: text/x-patch
Size: 1834 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170602/19817bc2/attachment.bin>


More information about the llvm-commits mailing list