1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-19 19:12:56 +02:00
llvm-mirror/test/CodeGen/X86/avoid-loop-align-2.ll
Dan Gohman 27c126770a Make CodePlacementOpt align loops, rather than loop headers. The
header is just the entry block to the loop, and it needn't be at
the top of the loop in the code layout.

Remove the code that suppressed loop alignment for outer loops,
so that outer loops are aligned.

llvm-svn: 84158
2009-10-15 00:36:22 +00:00

50 lines
2.1 KiB
LLVM

; RUN: llc < %s -march=x86 | grep align | count 4
; TODO: Is it a good idea to align inner loops? It's hard to know without
; knowing what their trip counts are, or other dynamic information. For
; now, CodeGen aligns all loops.
@x = external global i32* ; <i32**> [#uses=1]
define i32 @t(i32 %a, i32 %b) nounwind readonly ssp {
entry:
%0 = icmp eq i32 %a, 0 ; <i1> [#uses=1]
br i1 %0, label %bb5, label %bb.nph12
bb.nph12: ; preds = %entry
%1 = icmp eq i32 %b, 0 ; <i1> [#uses=1]
%2 = load i32** @x, align 8 ; <i32*> [#uses=1]
br i1 %1, label %bb2.preheader, label %bb2.preheader.us
bb2.preheader.us: ; preds = %bb2.bb3_crit_edge.us, %bb.nph12
%indvar18 = phi i32 [ 0, %bb.nph12 ], [ %indvar.next19, %bb2.bb3_crit_edge.us ] ; <i32> [#uses=2]
%sum.111.us = phi i32 [ 0, %bb.nph12 ], [ %4, %bb2.bb3_crit_edge.us ] ; <i32> [#uses=0]
%tmp16 = mul i32 %indvar18, %a ; <i32> [#uses=1]
br label %bb1.us
bb1.us: ; preds = %bb1.us, %bb2.preheader.us
%indvar = phi i32 [ 0, %bb2.preheader.us ], [ %indvar.next, %bb1.us ] ; <i32> [#uses=2]
%tmp17 = add i32 %indvar, %tmp16 ; <i32> [#uses=1]
%tmp. = zext i32 %tmp17 to i64 ; <i64> [#uses=1]
%3 = getelementptr i32* %2, i64 %tmp. ; <i32*> [#uses=1]
%4 = load i32* %3, align 4 ; <i32> [#uses=2]
%indvar.next = add i32 %indvar, 1 ; <i32> [#uses=2]
%exitcond = icmp eq i32 %indvar.next, %b ; <i1> [#uses=1]
br i1 %exitcond, label %bb2.bb3_crit_edge.us, label %bb1.us
bb2.bb3_crit_edge.us: ; preds = %bb1.us
%indvar.next19 = add i32 %indvar18, 1 ; <i32> [#uses=2]
%exitcond22 = icmp eq i32 %indvar.next19, %a ; <i1> [#uses=1]
br i1 %exitcond22, label %bb5, label %bb2.preheader.us
bb2.preheader: ; preds = %bb2.preheader, %bb.nph12
%indvar24 = phi i32 [ %indvar.next25, %bb2.preheader ], [ 0, %bb.nph12 ] ; <i32> [#uses=1]
%indvar.next25 = add i32 %indvar24, 1 ; <i32> [#uses=2]
%exitcond28 = icmp eq i32 %indvar.next25, %a ; <i1> [#uses=1]
br i1 %exitcond28, label %bb5, label %bb2.preheader
bb5: ; preds = %bb2.preheader, %bb2.bb3_crit_edge.us, %entry
%sum.1.lcssa = phi i32 [ 0, %entry ], [ 0, %bb2.preheader ], [ %4, %bb2.bb3_crit_edge.us ] ; <i32> [#uses=1]
ret i32 %sum.1.lcssa
}