llvm-capstone/polly/test/Isl/CodeGen/region_exiting-domtree.ll
Michael Kruse f33c125dd2 Fix DomTree preservation for generated subregions.
The generated dedicated subregion exit block was assumed to have the same
dominance relation as the original exit block. This is incorrect if the exit
block receives other edges than only from the subregion, which results in that
e.g. the subregion's entry block does not dominate the exit block.

llvm-svn: 261865
2016-02-25 14:08:48 +00:00

46 lines
1.0 KiB
LLVM

; RUN: opt %loadPolly -polly-codegen -verify-dom-info -analyze < %s
; Verify that the DominatorTree is preserved correctly for the inserted
; %polly.stmt.exit.exit block, which serves as new exit block for the generated
; subregion. In particulat, it must be dominated by %polly.stmt.subregion.enter,
; the generated subregion's entry block.
define void @func(i32 %n, i32* noalias nonnull %A) {
entry:
br label %loop
loop:
%i = phi i32 [0, %entry], [%i.inc, %loop.inc]
%i.cmp = icmp slt i32 %i, %n
br i1 %i.cmp, label %body, label %return
body:
%skipcond = icmp slt i32 %i, 5
br i1 %skipcond, label %subregion.enter, label %subregion.skip
subregion.skip:
br label %exit
subregion.enter:
%sqr = mul i32 %i, %i
%cond = icmp eq i32 %sqr, 0
store i32 %i, i32* %A
br i1 %cond, label %subregion.true, label %subregion.false
subregion.true:
br label %exit
subregion.false:
br label %exit
exit:
br label %loop.inc
loop.inc:
%i.inc = add nuw nsw i32 %i, 1
br label %loop
return:
ret void
}