Files
clang-p2996/llvm/test/Analysis/LoopAccessAnalysis/select-dependence.ll
Nikita Popov 4de3184f07 [LAA] Use cross-iteration alias analysis
LAA analyzes cross-iteration memory dependencies, as such AA should
not make assumptions about equality of values inside the loop, as
they may come from different iterations.

Fix this by exposing the MayBeCrossIteration AA flag and enabling
it for LAA.

Differential Revision: https://reviews.llvm.org/D137958
2022-12-05 09:27:13 +01:00

31 lines
941 B
LLVM

; RUN: opt -passes='print<access-info>' -disable-output 2>&1 < %s | FileCheck %s
; CHECK: Dependences:
; CHECK-NEXT: Unknown:
; CHECK-NEXT: %t63 = load double, ptr %t62, align 8 ->
; CHECK-NEXT: store double %t63, ptr %t64, align 8
define i32 @test() {
%a1 = alloca [128 x double], align 8
%a2 = alloca [128 x double], align 8
%a3 = alloca [128 x double], align 8
%t30 = getelementptr double, ptr %a2, i64 -32
br label %loop
loop:
%t58 = phi i64 [ %t65, %loop ], [ 0, %0 ]
%t59 = icmp ule i64 %t58, 32
%t60 = select i1 %t59, ptr %a1, ptr %t30
%t62 = getelementptr inbounds double, ptr %t60, i64 %t58
%t63 = load double, ptr %t62, align 8
%t61 = select i1 %t59, ptr %a2, ptr %a3
%t64 = getelementptr inbounds double, ptr %t61, i64 %t58
store double %t63, ptr %t64, align 8
%t65 = add nuw nsw i64 %t58, 1
%t66 = icmp eq i64 %t65, 94
br i1 %t66, label %exit, label %loop
exit:
ret i32 0
}