mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
We used to return PartialAlias if *either* variable being queried interacted with arguments or globals. AFAICT, we can change this to only returning MayAlias iff *both* variables being queried interacted with arguments or globals. Also, adding some basic functionality tests: some basic IPA tests, checking that we give conservative responses with arguments/globals thrown in the mix, and ensuring that we trace values through stores and loads. Note that saying that 'x' interacted with arguments or globals means that the Attributes of the StratifiedSet that 'x' belongs to has any bits set. Patch by George Burgess IV, thanks! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219122 91177308-0d34-0410-b5e6-96231b3b80d8
32 lines
723 B
LLVM
32 lines
723 B
LLVM
; This testcase ensures that CFL AA responds conservatively when we union
|
|
; groups of pointers together through ternary/conditional operations
|
|
; Derived from:
|
|
; void foo(bool c) {
|
|
; char a, b;
|
|
; char *m = c ? &a : &b;
|
|
; *m;
|
|
; }
|
|
;
|
|
|
|
; RUN: opt < %s -cfl-aa -aa-eval -print-may-aliases -disable-output 2>&1 | FileCheck %s
|
|
|
|
%T = type { i32, [10 x i8] }
|
|
|
|
; CHECK: Function: test
|
|
|
|
define void @test(i1 %C) {
|
|
; CHECK: 10 Total Alias Queries Performed
|
|
; CHECK: 4 no alias responses
|
|
%M = alloca %T*, align 8 ; NoAlias with %A, %B, %MS, %AP
|
|
%A = alloca %T, align 8
|
|
%B = alloca %T, align 8
|
|
|
|
%MS = select i1 %C, %T* %B, %T* %A
|
|
|
|
store %T* %MS, %T** %M
|
|
|
|
%AP = load %T** %M ; PartialAlias with %A, %B
|
|
|
|
ret void
|
|
}
|