[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