; RUN: llc -mtriple=i686-linux < %s | FileCheck %s | |
define i32 @bar(i32 %count) { | |
; Test checks that basic block backedge2 is not moved before header, | |
; because it can't reduce taken branches. | |
; Later backedge1 and backedge2 is rotated before loop header. | |
; CHECK-LABEL: bar | |
; CHECK: %.entry | |
; CHECK: %.header | |
; CHECK: %.backedge1 | |
; CHECK: %.backedge2 | |
; CHECK: %.exit | |
.entry: | |
%c = shl nsw i32 %count, 2 | |
br label %.header | |
.header: | |
%val1 = call i32 @foo() | |
%cond1 = icmp sgt i32 %val1, 1 | |
br i1 %cond1, label %.exit, label %.backedge1 | |
.backedge1: | |
%val2 = call i32 @foo() | |
%cond2 = icmp sgt i32 %val2, 1 | |
br i1 %cond2, label %.header, label %.backedge2 | |
.backedge2: | |
%val3 = call i32 @foo() | |
br label %.header | |
.exit: | |
ret i32 %c | |
} | |
declare i32 @foo() |