mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-23 15:29:51 +00:00
cd2ae14ce3
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84158 91177308-0d34-0410-b5e6-96231b3b80d8
50 lines
2.1 KiB
LLVM
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
|
|
}
|