Revert r82404, it is causing a bootstrap miscompile. This is very very
authorChris Lattner <sabre@nondot.org>
Sun, 20 Sep 2009 22:44:26 +0000 (22:44 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 20 Sep 2009 22:44:26 +0000 (22:44 +0000)
scary, as it indicates a lurking bug. yay.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82411 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/MemoryDependenceAnalysis.cpp
test/Transforms/GVN/rle.ll

index d5db2ed651ee738b733d75338bef10b8c57ec7ee..97b791caf92befbd314fbd3f2d8faf71170a186d 100644 (file)
@@ -521,13 +521,6 @@ getNonLocalPointerDependency(Value *Pointer, bool isLoad, BasicBlock *FromBB,
   const Type *EltTy = cast<PointerType>(Pointer->getType())->getElementType();
   uint64_t PointeeSize = AA->getTypeStoreSize(EltTy);
   
-  // If Pointer is a bitcast instruction, chomp through to the pointee since
-  // they are must alias.  This increases the effectiveness of caching by
-  // finding more equivalences, avoids having to phi translate the bitcast, and
-  // avoids conflicts where we are looking for two "different" values in the
-  // same block when they are really just must aliases.
-  Pointer = Pointer->stripPointerCasts();
-  
   // This is the set of blocks we've inspected, and the pointer we consider in
   // each block.  Because of critical edges, we currently bail out if querying
   // a block with multiple different pointers.  This can happen during PHI
@@ -667,6 +660,7 @@ getNonLocalPointerDepFromBB(Value *Pointer, uint64_t PointeeSize,
                             SmallVectorImpl<NonLocalDepEntry> &Result,
                             DenseMap<BasicBlock*, Value*> &Visited,
                             bool SkipFirstBlock) {
+  
   // Look up the cached info for Pointer.
   ValueIsLoadPair CacheKey(Pointer, isLoad);
   
@@ -799,13 +793,6 @@ getNonLocalPointerDepFromBB(Value *Pointer, uint64_t PointeeSize,
         BasicBlock *Pred = *PI;
         Value *PredPtr = PtrPHI->getIncomingValueForBlock(Pred);
         
-        // If Pointer is a bitcast instruction, chomp through to the pointee since
-        // they are must alias.  This increases the effectiveness of caching by
-        // finding more equivalences, avoids having to phi translate the bitcast, and
-        // avoids conflicts where we are looking for two "different" values in the
-        // same block when they are really just must aliases.
-        PredPtr = PredPtr->stripPointerCasts();
-        
         // Check to see if we have already visited this pred block with another
         // pointer.  If so, we can't do this lookup.  This failure can occur
         // with PHI translation when a critical edge exists and the PHI node in
index 1c5ab676f7d25c6e7b9cb79194bafe80bf024ff9..503a5bbacd11fb67fc93664a3f9e6d0fdbcf500c 100644 (file)
@@ -141,32 +141,6 @@ Cont:
 ; CHECK: ret i8 %A
 }
 
-;; non-local i32/float -> i8 load forwarding.  This also tests that the "P3"
-;; bitcast equivalence can be properly phi translated.
-define i8 @coerce_mustalias_nonlocal1(i32* %P, i1 %cond) {
-  %P2 = bitcast i32* %P to float*
-  br i1 %cond, label %T, label %F
-T:
-  store i32 42, i32* %P
-  br label %Cont
-  
-F:
-  store float 1.0, float* %P2
-  br label %Cont
-
-Cont:
-  %P3 = bitcast i32* %P to i8*
-  %A = load i8* %P3
-  ret i8 %A
-
-; CHECK: @coerce_mustalias_nonlocal1
-; CHECK: Cont:
-; CHECK:   %A = phi i8 [
-; CHECK-NOT: load
-; CHECK: ret i8 %A
-}
-
-
 ;; non-local i32 -> i8 partial redundancy load forwarding.
 define i8 @coerce_mustalias_pre0(i32* %P, i1 %cond) {
   %P3 = bitcast i32* %P to i8*