[llvm-commits] [llvm] r90304 - in /llvm/trunk: lib/Analysis/MemoryDependenceAnalysis.cpp lib/Transforms/Scalar/GVN.cpp test/Transforms/DeadStoreElimination/lifetime-simple.ll test/Transforms/GVN/lifetime-simple.ll
Chris Lattner
clattner at apple.com
Fri Dec 4 21:59:03 PST 2009
On Dec 1, 2009, at 11:35 PM, Owen Anderson wrote:
> Author: resistor
> Date: Wed Dec 2 01:35:19 2009
> New Revision: 90304
>
> URL: http://llvm.org/viewvc/llvm-project?rev=90304&view=rev
> Log:
> Cleanup/remove some parts of the lifetime region handling code in memdep and GVN,
> per Chris' comments. Adjust testcases to match.
Nice, thanks Owen,
-Chris
>
> Removed:
> llvm/trunk/test/Transforms/DeadStoreElimination/lifetime-simple.ll
> Modified:
> llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
> llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> llvm/trunk/test/Transforms/GVN/lifetime-simple.ll
>
> Modified: llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp?rev=90304&r1=90303&r2=90304&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp (original)
> +++ llvm/trunk/lib/Analysis/MemoryDependenceAnalysis.cpp Wed Dec 2 01:35:19 2009
> @@ -186,15 +186,17 @@
> }
>
> if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) {
> + // Debug intrinsics don't cause dependences.
> + if (isa<DbgInfoIntrinsic>(Inst)) continue;
> +
> // If we pass an invariant-end marker, then we've just entered an
> // invariant region and can start ignoring dependencies.
> if (II->getIntrinsicID() == Intrinsic::invariant_end) {
> - uint64_t InvariantSize = ~0ULL;
> - if (ConstantInt *CI = dyn_cast<ConstantInt>(II->getOperand(2)))
> - InvariantSize = CI->getZExtValue();
> -
> - AliasAnalysis::AliasResult R =
> - AA->alias(II->getOperand(3), InvariantSize, MemPtr, MemSize);
> + // FIXME: This only considers queries directly on the invariant-tagged
> + // pointer, not on query pointers that are indexed off of them. It'd
> + // be nice to handle that at some point.
> + AliasAnalysis::AliasResult R =
> + AA->alias(II->getOperand(3), ~0ULL, MemPtr, ~0ULL);
> if (R == AliasAnalysis::MustAlias) {
> InvariantTag = II->getOperand(1);
> continue;
> @@ -202,14 +204,12 @@
>
> // If we reach a lifetime begin or end marker, then the query ends here
> // because the value is undefined.
> - } else if (II->getIntrinsicID() == Intrinsic::lifetime_start ||
> - II->getIntrinsicID() == Intrinsic::lifetime_end) {
> - uint64_t InvariantSize = ~0ULL;
> - if (ConstantInt *CI = dyn_cast<ConstantInt>(II->getOperand(1)))
> - InvariantSize = CI->getZExtValue();
> -
> + } else if (II->getIntrinsicID() == Intrinsic::lifetime_start) {
> + // FIXME: This only considers queries directly on the invariant-tagged
> + // pointer, not on query pointers that are indexed off of them. It'd
> + // be nice to handle that at some point.
> AliasAnalysis::AliasResult R =
> - AA->alias(II->getOperand(2), InvariantSize, MemPtr, MemSize);
> + AA->alias(II->getOperand(2), ~0ULL, MemPtr, ~0ULL);
> if (R == AliasAnalysis::MustAlias)
> return MemDepResult::getDef(II);
> }
> @@ -219,9 +219,6 @@
> // at this point. Nothing a load depends on can live in an invariant region.
> if (isLoad && InvariantTag) continue;
>
> - // Debug intrinsics don't cause dependences.
> - if (isa<DbgInfoIntrinsic>(Inst)) continue;
> -
> // Values depend on loads if the pointers are must aliased. This means that
> // a load depends on another must aliased load from the same value.
> if (LoadInst *LI = dyn_cast<LoadInst>(Inst)) {
>
> Modified: llvm/trunk/lib/Transforms/Scalar/GVN.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/GVN.cpp?rev=90304&r1=90303&r2=90304&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Scalar/GVN.cpp (original)
> +++ llvm/trunk/lib/Transforms/Scalar/GVN.cpp Wed Dec 2 01:35:19 2009
> @@ -1187,10 +1187,9 @@
> return V;
> }
>
> -static bool isLifetimeStartOrEnd(Instruction *Inst) {
> +static bool isLifetimeStart(Instruction *Inst) {
> if (IntrinsicInst* II = dyn_cast<IntrinsicInst>(Inst))
> - return II->getIntrinsicID() == Intrinsic::lifetime_start ||
> - II->getIntrinsicID() == Intrinsic::lifetime_end;
> + return II->getIntrinsicID() == Intrinsic::lifetime_start;
> return false;
> }
>
> @@ -1262,8 +1261,8 @@
>
> // Loading the allocation -> undef.
> if (isa<AllocaInst>(DepInst) || isMalloc(DepInst) ||
> - // Loading immediately after lifetime begin or end -> undef.
> - isLifetimeStartOrEnd(DepInst)) {
> + // Loading immediately after lifetime begin -> undef.
> + isLifetimeStart(DepInst)) {
> ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
> UndefValue::get(LI->getType())));
> continue;
> @@ -1635,11 +1634,10 @@
> return true;
> }
>
> - // If this load occurs either right after a lifetime begin or a lifetime end,
> + // If this load occurs either right after a lifetime begin,
> // then the loaded value is undefined.
> if (IntrinsicInst* II = dyn_cast<IntrinsicInst>(DepInst)) {
> - if (II->getIntrinsicID() == Intrinsic::lifetime_start ||
> - II->getIntrinsicID() == Intrinsic::lifetime_end) {
> + if (II->getIntrinsicID() == Intrinsic::lifetime_start) {
> L->replaceAllUsesWith(UndefValue::get(L->getType()));
> toErase.push_back(L);
> NumGVNLoad++;
>
> Removed: llvm/trunk/test/Transforms/DeadStoreElimination/lifetime-simple.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/DeadStoreElimination/lifetime-simple.ll?rev=90303&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/DeadStoreElimination/lifetime-simple.ll (original)
> +++ llvm/trunk/test/Transforms/DeadStoreElimination/lifetime-simple.ll (removed)
> @@ -1,18 +0,0 @@
> -; RUN: opt < %s -dse -S | FileCheck %s
> -
> -target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-f80:128:128"
> -target triple = "i386-apple-darwin7"
> -
> -define i8 @test2(i8* %P) nounwind {
> -; CHECK: @test2
> -; CHECK-NOT: store i8 1
> -; CHECK: ret i8 0
> -entry:
> - call void @llvm.lifetime.start(i64 32, i8* %P)
> - call void @llvm.lifetime.end(i64 32, i8* %P)
> - store i8 1, i8* %P
> - ret i8 0
> -}
> -
> -declare {}* @llvm.lifetime.start(i64 %S, i8* nocapture %P) readonly
> -declare void @llvm.lifetime.end(i64 %S, i8* nocapture %P)
> \ No newline at end of file
>
> Modified: llvm/trunk/test/Transforms/GVN/lifetime-simple.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/GVN/lifetime-simple.ll?rev=90304&r1=90303&r2=90304&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Transforms/GVN/lifetime-simple.ll (original)
> +++ llvm/trunk/test/Transforms/GVN/lifetime-simple.ll Wed Dec 2 01:35:19 2009
> @@ -4,9 +4,9 @@
> target triple = "i386-apple-darwin7"
>
> define i8 @test(i8* %P) nounwind {
> -; CHECK: @test
> +; CHECK: lifetime.start
> ; CHECK-NOT: load
> -; CHECK: ret i8 undef
> +; CHECK: lifetime.end
> entry:
> call void @llvm.lifetime.start(i64 32, i8* %P)
> %0 = load i8* %P
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list