From: Chris Lattner Date: Sun, 20 Sep 2009 22:44:26 +0000 (+0000) Subject: Revert r82404, it is causing a bootstrap miscompile. This is very very X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=66364346e01601b3bcc97c707c030595ff6b60ec;p=oota-llvm.git Revert r82404, it is causing a bootstrap miscompile. This is very very 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 --- diff --git a/lib/Analysis/MemoryDependenceAnalysis.cpp b/lib/Analysis/MemoryDependenceAnalysis.cpp index d5db2ed651e..97b791caf92 100644 --- a/lib/Analysis/MemoryDependenceAnalysis.cpp +++ b/lib/Analysis/MemoryDependenceAnalysis.cpp @@ -521,13 +521,6 @@ getNonLocalPointerDependency(Value *Pointer, bool isLoad, BasicBlock *FromBB, const Type *EltTy = cast(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 &Result, DenseMap &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 diff --git a/test/Transforms/GVN/rle.ll b/test/Transforms/GVN/rle.ll index 1c5ab676f7d..503a5bbacd1 100644 --- a/test/Transforms/GVN/rle.ll +++ b/test/Transforms/GVN/rle.ll @@ -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*