[PATCH] D19730: [BasicAA] Treat llvm.assume as not accessing memory in getModRefBehavior(Function)

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 29 10:24:09 PDT 2016


----- Original Message -----
> From: "Daniel Berlin" <dberlin at dberlin.org>
> To: reviews+D19730+public+66d50dddcf8372b8 at reviews.llvm.org
> Cc: "Geoff Berry" <gberry at codeaurora.org>, "Chandler Carruth" <chandlerc at gmail.com>, "Hal Finkel" <hfinkel at anl.gov>,
> "Philip Reames" <listmail at philipreames.com>, "Sanjoy Das" <sanjoy at playingwithpointers.com>, mcrosier at codeaurora.org,
> "llvm-commits" <llvm-commits at lists.llvm.org>, "Junbum Lim" <junbuml at codeaurora.org>
> Sent: Friday, April 29, 2016 12:15:21 PM
> Subject: Re: [PATCH] D19730: [BasicAA] Treat llvm.assume as not accessing memory in getModRefBehavior(Function)
> 
> 
> LGTM

I'm not sure this is a good idea. As the comment says, they "never aliases any particular memory location". This, however, is not comparing against any particular location. It is asking for general behavior. AA should probably be constant with the function attributes here.

 -Hal

> 
> 
> On Fri, Apr 29, 2016 at 10:15 AM, Geoff Berry < gberry at codeaurora.org
> > wrote:
> 
> 
> gberry created this revision.
> gberry added reviewers: dberlin, chandlerc, hfinkel, reames, sanjoy.
> gberry added a subscriber: llvm-commits.
> Herald added a subscriber: mcrosier.
> 
> http://reviews.llvm.org/D19730
> 
> Files:
> lib/Analysis/BasicAliasAnalysis.cpp
> test/Transforms/Util/MemorySSA/assume.ll
> 
> Index: test/Transforms/Util/MemorySSA/assume.ll
> ===================================================================
> --- /dev/null
> +++ test/Transforms/Util/MemorySSA/assume.ll
> @@ -0,0 +1,17 @@
> +; RUN: opt -basicaa -print-memoryssa -verify-memoryssa -analyze < %s
> 2>&1 | FileCheck %s
> +;
> +; Ensures that assumes are treated as not reading or writing memory.
> +
> +declare void @llvm.assume(i1)
> +
> +define i32 @foo(i32* %a, i32* %b, i1 %c) {
> +; CHECK: 1 = MemoryDef(liveOnEntry)
> +; CHECK-NEXT: store i32 4
> + store i32 4, i32* %a, align 4
> +; CHECK: call void @llvm.assume
> + call void @llvm.assume(i1 %c)
> +; CHECK: MemoryUse(1)
> +; CHECK-NEXT: %1 = load i32
> + %1 = load i32, i32* %a, align 4
> + ret i32 %1
> +}
> Index: lib/Analysis/BasicAliasAnalysis.cpp
> ===================================================================
> --- lib/Analysis/BasicAliasAnalysis.cpp
> +++ lib/Analysis/BasicAliasAnalysis.cpp
> @@ -575,6 +575,12 @@
> if (F->doesNotAccessMemory())
> return FMRB_DoesNotAccessMemory;
> 
> + // While the assume intrinsic is marked as arbitrarily writing so
> that
> + // proper control dependencies will be maintained, it never aliases
> any
> + // particular memory location.
> + if (F->getIntrinsicID() == Intrinsic::assume)
> + return FMRB_DoesNotAccessMemory;
> +
> FunctionModRefBehavior Min = FMRB_UnknownModRefBehavior;
> 
> // If the function declares it only reads memory, go with that.
> 
> 
> 
> 

-- 
Hal Finkel
Assistant Computational Scientist
Leadership Computing Facility
Argonne National Laboratory


More information about the llvm-commits mailing list