[llvm] r293293 - Fix BasicAA incorrect assumption on GEP
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 27 09:08:55 PST 2017
Thanks! I see this landed as r293294 on the branch.
On Fri, Jan 27, 2017 at 8:24 AM, Mehdi Amini <mehdi.amini at apple.com> wrote:
> Has been approved for 4.0 in Phabricator by Hal (Code owner for AA).
>
> Will cherry-pick.
>
> —
> Mehdi
>
>
>> On Jan 27, 2017, at 8:12 AM, Mehdi Amini via llvm-commits <llvm-commits at lists.llvm.org> wrote:
>>
>> Author: mehdi_amini
>> Date: Fri Jan 27 10:12:22 2017
>> New Revision: 293293
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=293293&view=rev
>> Log:
>> Fix BasicAA incorrect assumption on GEP
>>
>> This is fixing pr31761: BasicAA is deducing NoAlias
>> on the result of the GEP if the base pointer is itself NoAlias.
>>
>> This is possible only if the NoAlias on the base pointer is
>> deduced with a non-sized query: this should guarantee that
>> the pointers are belonging to different memory allocation
>> and that the GEP can't legally jump from one to another.
>>
>> Differential Revision: https://reviews.llvm.org/D29216
>>
>> Added:
>> llvm/trunk/test/Analysis/BasicAA/pr31761.ll
>> Modified:
>> llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
>>
>> Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=293293&r1=293292&r2=293293&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
>> +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Fri Jan 27 10:12:22 2017
>> @@ -1191,14 +1191,14 @@ AliasResult BasicAAResult::aliasGEP(cons
>> return MayAlias;
>>
>> AliasResult R = aliasCheck(UnderlyingV1, MemoryLocation::UnknownSize,
>> - AAMDNodes(), V2, V2Size, V2AAInfo,
>> - nullptr, UnderlyingV2);
>> + AAMDNodes(), V2, MemoryLocation::UnknownSize,
>> + V2AAInfo, nullptr, UnderlyingV2);
>> if (R != MustAlias)
>> // If V2 may alias GEP base pointer, conservatively returns MayAlias.
>> // If V2 is known not to alias GEP base pointer, then the two values
>> - // cannot alias per GEP semantics: "A pointer value formed from a
>> - // getelementptr instruction is associated with the addresses associated
>> - // with the first operand of the getelementptr".
>> + // cannot alias per GEP semantics: "Any memory access must be done through
>> + // a pointer value associated with an address range of the memory access,
>> + // otherwise the behavior is undefined.".
>> return R;
>>
>> // If the max search depth is reached the result is undefined
>>
>> Added: llvm/trunk/test/Analysis/BasicAA/pr31761.ll
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Analysis/BasicAA/pr31761.ll?rev=293293&view=auto
>> ==============================================================================
>> --- llvm/trunk/test/Analysis/BasicAA/pr31761.ll (added)
>> +++ llvm/trunk/test/Analysis/BasicAA/pr31761.ll Fri Jan 27 10:12:22 2017
>> @@ -0,0 +1,19 @@
>> +; RUN: opt < %s -basicaa -aa-eval -print-all-alias-modref-info -disable-output 2>&1 | FileCheck %s
>> +
>> +
>> +target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
>> +target triple = "x86_64-apple-macosx10.12.0"
>> +
>> +%struct.blam = type { i32, i32 }
>> +
>> +
>> +; CHECK-DAG: MayAlias: i32* %tmp, i32* %tmp3
>> +
>> +define i1 @ham(%struct.blam* %arg) {
>> + %isNull = icmp eq %struct.blam* %arg, null
>> + %tmp = getelementptr %struct.blam, %struct.blam* %arg, i64 0, i32 0
>> + %tmp2 = getelementptr %struct.blam, %struct.blam* %arg, i64 0, i32 1
>> + %select = select i1 %isNull, i32* null, i32* %tmp2
>> + %tmp3 = getelementptr i32, i32* %select, i32 -1
>> + ret i1 true
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
More information about the llvm-commits
mailing list