2020-06-27 11:55:44 +08:00
|
|
|
; RUN: opt < %s -disable-basic-aa -cfl-steens-aa -aa-eval -print-may-aliases -disable-output 2>&1 | FileCheck %s
|
2016-07-06 08:26:41 +08:00
|
|
|
; RUN: opt < %s -aa-pipeline=cfl-steens-aa -passes=aa-eval -print-may-aliases -disable-output 2>&1 | FileCheck %s
|
[CFLAA] Fix PR27213; incorrect tagging of args/globals
Prior to this patch, CFLAA wouldn't tag arguments/globals properly if
it didn't find any "interesting" edges on them. This means that, if all
you do is store constants to a global or argument, we would never
actually treat it as a global/argument.
Test case:
define void @foo(i32* %A, i32* %B) #0 {
entry:
store i32 0, i32* %A, align 4
store i32 0, i32* %B, align 4
ret void
}
CFLAA would say that %A can't alias %B, because neither pointer was
used in an interesting way. This patch makes us note whether something
is an argument, global, ... regardless of how interesting CFLAA thinks
its uses are.
(For the record, using a value in an interesting way means loading
from it, using it in a GEP, ...)
llvm-svn: 265474
2016-04-06 05:40:45 +08:00
|
|
|
|
|
|
|
; CHECK-LABEL: Function: foo
|
|
|
|
; CHECK: MayAlias: i32* %A, i32* %B
|
|
|
|
define void @foo(i32* %A, i32* %B) {
|
|
|
|
entry:
|
|
|
|
store i32 0, i32* %A, align 4
|
|
|
|
store i32 0, i32* %B, align 4
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
; CHECK-LABEL: Function: bar
|
|
|
|
; CHECK: MayAlias: i32* %A, i32* %B
|
|
|
|
; CHECK: MayAlias: i32* %A, i32* %arrayidx
|
|
|
|
; CHECK: MayAlias: i32* %B, i32* %arrayidx
|
|
|
|
define void @bar(i32* %A, i32* %B) {
|
|
|
|
entry:
|
|
|
|
store i32 0, i32* %A, align 4
|
|
|
|
%arrayidx = getelementptr inbounds i32, i32* %B, i64 1
|
|
|
|
store i32 0, i32* %arrayidx, align 4
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
@G = global i32 0
|
|
|
|
|
|
|
|
; CHECK-LABEL: Function: baz
|
|
|
|
; CHECK: MayAlias: i32* %A, i32* @G
|
|
|
|
define void @baz(i32* %A) {
|
|
|
|
entry:
|
|
|
|
store i32 0, i32* %A, align 4
|
|
|
|
store i32 0, i32* @G, align 4
|
|
|
|
ret void
|
|
|
|
}
|
|
|
|
|
|
|
|
; CHECK-LABEL: Alias Analysis Evaluator Report
|
|
|
|
; CHECK: 5 Total Alias Queries Performed
|
|
|
|
; CHECK: 0 no alias responses
|
|
|
|
; CHECK: 5 may alias responses
|