| ; 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 |
| } |