[llvm] 887c766 - [BasicAA] Deoptimize intrinsics don't modify memory

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 24 09:16:32 PST 2020


Artur,

I suspect you want to add analogous handling in 
BasicAAResult::getModRefInfo.  If you're extending all the places which 
special case guards for deoptimize, that's another one.

Philip

On 11/19/20 12:08 PM, Artur Pilipenko via llvm-commits wrote:
> Author: Artur Pilipenko
> Date: 2020-11-19T12:08:33-08:00
> New Revision: 887c7660bdf3f300bd1997dcfd7ace91787c0584
>
> URL: https://github.com/llvm/llvm-project/commit/887c7660bdf3f300bd1997dcfd7ace91787c0584
> DIFF: https://github.com/llvm/llvm-project/commit/887c7660bdf3f300bd1997dcfd7ace91787c0584.diff
>
> LOG: [BasicAA] Deoptimize intrinsics don't modify memory
>
> Similarly to assumes and guards deoptimize intrinsics are
> marked as writing to ensure proper control dependencies
> but they never modify any particular memory location.
>
> Differential Revision: https://reviews.llvm.org/D91658
>
> Added:
>      llvm/test/Analysis/BasicAA/deoptimize.ll
>
> Modified:
>      llvm/lib/Analysis/BasicAliasAnalysis.cpp
>
> Removed:
>      
>
>
> ################################################################################
> diff  --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
> index bb2c66a36cff..c2ea4f5be9f7 100644
> --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
> +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
> @@ -958,6 +958,9 @@ ModRefInfo BasicAAResult::getModRefInfo(const CallBase *Call,
>     // the guard invokes the "deopt" continuation.
>     if (isIntrinsicCall(Call, Intrinsic::experimental_guard))
>       return ModRefInfo::Ref;
> +  // The same applies to deoptimize which is essentially a guard(false).
> +  if (isIntrinsicCall(Call, Intrinsic::experimental_deoptimize))
> +    return ModRefInfo::Ref;
>   
>     // Like assumes, invariant.start intrinsics were also marked as arbitrarily
>     // writing so that proper control dependencies are maintained but they never
>
> diff  --git a/llvm/test/Analysis/BasicAA/deoptimize.ll b/llvm/test/Analysis/BasicAA/deoptimize.ll
> new file mode 100644
> index 000000000000..927c0e03853f
> --- /dev/null
> +++ b/llvm/test/Analysis/BasicAA/deoptimize.ll
> @@ -0,0 +1,14 @@
> +; RUN: opt < %s -basic-aa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
> +target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:32:64-v128:32:128-a0:0:32-n32"
> +
> +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) #0
> +declare void @llvm.experimental.deoptimize.void(...)
> +declare void @unknown_but_readonly() readonly
> +
> +define void @test1(i8* %p) {
> +  call void(...) @llvm.experimental.deoptimize.void() [ "deopt"() ]
> +  ret void
> +
> +; CHECK-LABEL: Function: test1:
> +; CHECK:  Just Ref: Ptr: i8* %p <-> call void (...) @llvm.experimental.deoptimize.isVoid() [ "deopt"() ]
> +}
>
>
>          
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list