[llvm] 887c766 - [BasicAA] Deoptimize intrinsics don't modify memory
Artur Pilipenko via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 24 17:17:25 PST 2020
Do you mean the one which takes two calls as arguments?
getModRefInfo(const CallBase *Call1,
const CallBase *Call2,
AAQueryInfo &AAQI)
For the issue I had at hand my patch was enough, but it makes sense to fix this one as well for the sake of completeness.
Artur
> On Nov 24, 2020, at 9:16 AM, Philip Reames <listmail at philipreames.com> wrote:
>
> 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