Files
clang-p2996/llvm/test/Analysis/LoopAccessAnalysis/underlying-objects-1.ll
Florian Hahn 555e09c2b0 [LAA] Rename printing pass to print<access-info>.
This updates the naming for the LAA printing pass to be in line with
most other analysis printing passes.

The old name has come up as confusing multiple times already, e.g. in
D131924.
2022-08-26 11:00:09 +01:00

48 lines
1.4 KiB
LLVM

; RUN: opt -passes='print<access-info>' -disable-output < %s 2>&1 | FileCheck %s
; In:
;
; store_ptr = A;
; load_ptr = &A[2];
; for (i = 0; i < n; i++)
; *store_ptr++ = *load_ptr++ *10; // A[i] = A[i+2] * 10
;
; make sure, we look through the PHI to conclude that store_ptr and load_ptr
; both have A as their underlying object. The dependence is safe for
; vectorization requiring no memchecks.
;
; Otherwise we would try to prove independence with a memcheck that is going
; to always fail.
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.10.0"
; CHECK: Memory dependences are safe{{$}}
define void @f(i8* noalias %A, i64 %width) {
for.body.preheader:
%A_ahead = getelementptr inbounds i8, i8* %A, i64 2
br label %for.body
for.body:
%i = phi i64 [ %i.1, %for.body ], [ 0, %for.body.preheader ]
%load_ptr = phi i8* [ %load_ptr.1, %for.body ], [ %A_ahead, %for.body.preheader ]
%store_ptr = phi i8* [ %store_ptr.1, %for.body ], [ %A, %for.body.preheader ]
%loadA = load i8, i8* %load_ptr, align 1
%mul = mul i8 %loadA, 10
store i8 %mul, i8* %store_ptr, align 1
%load_ptr.1 = getelementptr inbounds i8, i8* %load_ptr, i64 1
%store_ptr.1 = getelementptr inbounds i8, i8* %store_ptr, i64 1
%i.1 = add nuw i64 %i, 1
%exitcond = icmp eq i64 %i.1, %width
br i1 %exitcond, label %for.end, label %for.body
for.end:
ret void
}