blob: 35dc786df1c4b438cce5a0e4f53043755e66dd38 [file] [edit]
; RUN: opt %loadNPMPolly -passes=polly -S %s | FileCheck %s
;
; https://github.com/llvm/llvm-project/issues/205732
; When DeLICM maps a scalar to an array element, the new access relation
; may only be valid within the DefinedBehaviorContext (i.e., for parameter
; values where the original program has no undefined behavior). Code
; generation must not assert failure for such partial-domain read accesses.
;
; CHECK: polly.start:
define void @foo(i32 %w, ptr %dst, i64 %n) {
entry:
br label %for.outer
for.outer:
%i = phi i64 [ %i.next, %for.mid.exit ], [ 0, %entry ]
br label %for.mid
for.mid:
br label %for.inner
for.inner:
%0 = phi i32 [ 0, %for.mid ], [ 1, %for.inner ]
%1 = load i16, ptr null, align 2
%cond1 = icmp eq i32 0, %w
br i1 %cond1, label %for.inner.exit, label %for.inner
for.inner.exit:
br i1 true, label %for.mid.exit, label %for.mid
for.mid.exit:
%ptr = getelementptr [4 x i8], ptr %dst, i64 %i
store i32 %0, ptr %ptr, align 4
%i.next = add i64 %i, 1
%cond2 = icmp eq i64 %i, %n
br i1 %cond2, label %for.outer.exit, label %for.outer
for.outer.exit:
ret void
}