We can do cast-add elimination even on casts that reinterpret
authorChris Lattner <sabre@nondot.org>
Thu, 6 Dec 2001 18:06:13 +0000 (18:06 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 6 Dec 2001 18:06:13 +0000 (18:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1427 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/LevelRaise.cpp

index 19325b065c2bf6b424cbc988fea3b3ae61e828fe..c35b5c67308bb76d61966a8a593fdc9435831d86 100644 (file)
@@ -51,7 +51,6 @@ static inline bool isReinterpretingCast(const CastInst *CI) {
 
 
 
-#if 0  // Unneccesary code, handled by convert exprs
 // Peephole optimize the following instructions:
 // %t1 = cast ? to x *
 // %t2 = add x * %SP, %t1              ;; Constant must be 2nd operand
@@ -117,8 +116,7 @@ static bool HandleCastToPointer(BasicBlock::iterator BI,
       OtherPtr = C;
     }
 
-    GetElementPtrInst *GEP = new GetElementPtrInst(OtherPtr, Indices,
-                                                   I->getName());
+    GetElementPtrInst *GEP = new GetElementPtrInst(OtherPtr, Indices);
 
     PRINT_PEEPHOLE1("cast-add-to-gep:i", I);
     
@@ -128,7 +126,6 @@ static bool HandleCastToPointer(BasicBlock::iterator BI,
   }
   return true;
 }
-#endif
 
 // Peephole optimize the following instructions:
 // %t1 = cast ulong <const int> to {<...>} *
@@ -269,16 +266,17 @@ static bool PeepholeOptimize(BasicBlock *BB, BasicBlock::iterator &BI) {
 #endif
         return true;
       }
-#if 0
-      // Otherwise find out it this cast is a cast to a pointer type, which is
-      // then added to some other pointer, then loaded or stored through.  If
-      // so, convert the add into a getelementptr instruction...
-      //
-      if (const PointerType *DestPTy = dyn_cast<PointerType>(DestTy)) {
-        if (HandleCastToPointer(BI, DestPTy))
-          return true;
+    }
+
+    // Otherwise find out it this cast is a cast to a pointer type, which is
+    // then added to some other pointer, then loaded or stored through.  If
+    // so, convert the add into a getelementptr instruction...
+    //
+    if (const PointerType *DestPTy = dyn_cast<PointerType>(DestTy)) {
+      if (HandleCastToPointer(BI, DestPTy)) {
+        BI = BB->begin();  // Rescan basic block.  BI might be invalidated.
+        return true;
       }
-#endif
     }
 
     // Check to see if we are casting from a structure pointer to a pointer to