[llvm-commits] CVS: llvm/lib/Transforms/Scalar/InstructionCombining.cpp

Chris Lattner lattner at cs.uiuc.edu
Sat Nov 13 23:33:28 PST 2004



Changes in directory llvm/lib/Transforms/Scalar:

InstructionCombining.cpp updated: 1.281 -> 1.282
---
Log message:

Transform this:
  %X = alloca ...
  %Y = alloca ...
    X == Y

into false.  This allows us to simplify some stuff in eon (and probably
many other C++ programs) where operator= was checking for self assignment.
Folding this allows us to SROA several additional structs.


---
Diffs of the changes:  (+6 -4)

Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp
diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.281 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.282
--- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.281	Sat Nov 13 13:50:12 2004
+++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp	Sun Nov 14 01:33:16 2004
@@ -1870,12 +1870,14 @@
   if (isa<UndefValue>(Op1))                  // X setcc undef -> undef
     return ReplaceInstUsesWith(I, UndefValue::get(Type::BoolTy));
 
-  // setcc <global/alloca*>, 0 - Global/Stack value addresses are never null!
-  if (isa<ConstantPointerNull>(Op1) && 
-      (isa<GlobalValue>(Op0) || isa<AllocaInst>(Op0)))
+  // setcc <global/alloca*/null>, <global/alloca*/null> - Global/Stack value
+  // addresses never equal each other!  We already know that Op0 != Op1.
+  if ((isa<GlobalValue>(Op0) || isa<AllocaInst>(Op0) || 
+       isa<ConstantPointerNull>(Op0)) && 
+      (isa<GlobalValue>(Op1) || isa<AllocaInst>(Op1) || 
+       isa<ConstantPointerNull>(Op1)))
     return ReplaceInstUsesWith(I, ConstantBool::get(!isTrueWhenEqual(I)));
 
-
   // setcc's with boolean values can always be turned into bitwise operations
   if (Ty == Type::BoolTy) {
     switch (I.getOpcode()) {






More information about the llvm-commits mailing list