[llvm] 887c766 - [BasicAA] Deoptimize intrinsics don't modify memory
Philip Reames via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 24 18:34:32 PST 2020
On 11/24/20 5:17 PM, Artur Pilipenko wrote:
> Do you mean the one which takes two calls as arguments?
> getModRefInfo(const CallBase *Call1,
> const CallBase *Call2,
> AAQueryInfo &AAQI)
Yes.
> 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.
Easier to fix while you're here than to reduce the next test case. :)
>
> 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