Files
clang-p2996/llvm/test/Analysis/LoopAccessAnalysis/nullptr.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

39 lines
1.5 KiB
LLVM

; RUN: opt -passes='print<access-info>' -disable-output < %s 2>&1 | FileCheck %s
; Test that the loop accesses are proven safe in this case.
; The analyzer uses to be confused by the "diamond" because getUnderlyingObjects
; is saying that the two pointers can both points to null. The loop analyzer
; needs to ignore null in the results returned by getUnderlyingObjects.
; CHECK: Memory dependences are safe with run-time checks
; ModuleID = 'bugpoint-reduced-simplified.bc'
target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-apple-macosx10.11.0"
; Function Attrs: ssp uwtable
define void @foo(i1 %cond, i32* %ptr1, i32* %ptr2) {
br i1 %cond, label %.preheader, label %diamond
diamond: ; preds = %.noexc.i.i
br label %.preheader
.preheader: ; preds = %diamond, %0
%ptr1_or_null = phi i32* [ null, %0 ], [ %ptr1, %diamond ]
%ptr2_or_null = phi i32* [ null, %0 ], [ %ptr2, %diamond ]
br label %.lr.ph
.lr.ph: ; preds = %.lr.ph, %.preheader
%indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ 10, %.preheader ]
%indvars.iv.next = add nsw i64 %indvars.iv, -1
%tmp4 = getelementptr inbounds i32, i32* %ptr2_or_null, i64 %indvars.iv.next
%tmp5 = load i32, i32* %tmp4, align 4
%tmp6 = getelementptr inbounds i32, i32* %ptr1_or_null, i64 %indvars.iv.next
store i32 undef, i32* %tmp6, align 4
br i1 false, label %.lr.ph, label %.end
.end:
ret void
}