forked from OSchip/llvm-project
49 lines
1.2 KiB
LLVM
49 lines
1.2 KiB
LLVM
; RUN: opt %loadPolly -polly-codegen -S < %s | FileCheck %s
|
|
;
|
|
; llvm.org/PR25438
|
|
; After loop versioning, a dominance check of a non-affine subregion's exit node
|
|
; causes the dominance check to always fail any block in the scop. The
|
|
; subregion's exit block has become polly_merge_new_and_old, which also receives
|
|
; the control flow of the generated code. This would cause that any value for
|
|
; implicit stores is assumed to be not from the scop.
|
|
;
|
|
; This checks that the stored value is indeed from the generated code.
|
|
;
|
|
; CHECK-LABEL: polly.stmt.do.body.entry:
|
|
; CHECK: a.phiops.reload = load i32, i32* %a.phiops
|
|
;
|
|
; CHECK-LABEL: polly.stmt.polly.merge_new_and_old.exit:
|
|
; CHECK: store i32 %polly.a, i32* %a.s2a
|
|
|
|
define void @func() {
|
|
entry:
|
|
br label %while.body
|
|
|
|
while.body:
|
|
br label %do.body
|
|
|
|
do.body:
|
|
%a = phi i32 [ undef, %while.body ], [ %b, %end_b ]
|
|
%cond = or i1 undef, undef
|
|
br i1 %cond, label %end_a, label %if_a
|
|
|
|
if_a:
|
|
br label %end_a
|
|
|
|
end_a:
|
|
br i1 undef, label %if_b, label %end_b
|
|
|
|
if_b:
|
|
br label %end_b
|
|
|
|
end_b:
|
|
%b = phi i32 [ undef, %if_b ], [ %a, %end_a ]
|
|
br i1 false, label %do.body, label %do.end
|
|
|
|
do.end:
|
|
br label %return
|
|
|
|
return:
|
|
ret void
|
|
}
|