Open Quuxplusone opened 6 years ago
Attached tc_domtree.ll
(6362 bytes, text/plain): reduced testcase
Reduced:
$ ./opt red.ll -loop-unroll -unroll-runtime-multi-exit -o /dev/null
DominatorTree is not up to date!
$ cat red.ll
target triple = "s390x-ibm-linux"
define void @patatino() {
bb:
br label %tailrecurse.i
tailrecurse.i: ; preds = %bb32.i, %bb
%indvars.iv.i = phi i64 [ %indvars.iv.next.i, %bb32.i ], [ undef, %bb ]
switch i8 undef, label %bb27.i [
i8 1, label %bb19.i
]
bb19.i: ; preds = %tailrecurse.i,
%tailrecurse.i
br label %wobble.exit
bb27.i: ; preds = %tailrecurse.i
br label %bb32.i
bb32.i: ; preds = %bb27.i
%tmp34.i = icmp slt i64 %indvars.iv.i, 1
%indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1
br i1 %tmp34.i, label %bb11.loopexit, label %tailrecurse.i
wobble.exit: ; preds = %bb19.i
br label %bb11
bb11.loopexit: ; preds = %bb32.i
br label %bb11
bb11: ; preds = %bb11.loopexit,
%wobble.exit
unreachable
}
Further reduced:
target triple = "s390x-ibm-linux"
define void @patatino() {
bb:
br label %tailrecurse.i
tailrecurse.i:
%indvars.iv.i = phi i64 [ %indvars.iv.next.i, %bb32.i ], [ undef, %bb ]
switch i8 undef, label %bb32.i [
i8 1, label %bb19.i
]
bb19.i:
br label %wobble.exit
bb32.i:
%tmp34.i = icmp slt i64 %indvars.iv.i, 1
%indvars.iv.next.i = add nsw i64 %indvars.iv.i, -1
br i1 %tmp34.i, label %bb11.loopexit, label %tailrecurse.i
wobble.exit:
br label %bb11
bb11.loopexit:
br label %bb11
bb11:
ret void
}
The stopgap solution to this could be just fixing this very instance, but it
makes me very nervous. I think LoopUnroll should migrate to the new incremental
dominator API.
This may be a little controversial because updating the dominator locally in
place might end up being slightly faster than deferring the work to a generic
API, but, even if it's the case (and it needs to be proven :) I'm willing to
take the performance hit to avoid future bugs :)
I cannot reproduce the bug on on any of the reduced testaces with r318246. Does llvm have to be compiled with expensive checks or some other flag?
(In reply to Jakub Kuderski from comment #4)
> I cannot reproduce the bug on on any of the reduced testaces with r318246.
> Does llvm have to be compiled with expensive checks or some other flag?
This was observable yesterday on 318138. I hope you're not forgetting the -
unroll-runtime-multi-exit flag, which is needed (see top of page for full line
to opt).
Expensive checks /special build options are not needed.
tc_domtree.ll
(6362 bytes, text/plain)