mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-21 18:54:02 +00:00

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
46 lines
1.0 KiB
LLVM
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
|
|
}
|