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
31 lines
941 B
LLVM
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
|
|
}
|