[Hexagon] Generate more hardware loops

Refactored parts of the hardware loop pass to generate
more. Also, added more tests.

Differential Revision: http://reviews.llvm.org/D9568


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236896 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Brendon Cahoon
2015-05-08 20:18:21 +00:00
parent 5de9960136
commit 74b576041a
8 changed files with 655 additions and 221 deletions

View File

@@ -1,7 +1,6 @@
; RUN: llc -march=hexagon -mcpu=hexagonv4 -O3 < %s | FileCheck %s
; CHECK: test_pos1_ir_slt
; CHECK-LABEL: @test_pos1_ir_slt
; CHECK: loop0
; a < b
define void @test_pos1_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -9,10 +8,10 @@ entry:
%cmp3 = icmp slt i32 8531, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ 8531, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -24,13 +23,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos2_ir_slt
; CHECK-LABEL: @test_pos2_ir_slt
; CHECK: loop0
; a < b
define void @test_pos2_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -38,10 +35,10 @@ entry:
%cmp3 = icmp slt i32 9152, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ 9152, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -53,13 +50,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos4_ir_slt
; CHECK-LABEL: @test_pos4_ir_slt
; CHECK: loop0
; a < b
define void @test_pos4_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -67,10 +62,10 @@ entry:
%cmp3 = icmp slt i32 18851, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ 18851, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -82,13 +77,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos8_ir_slt
; CHECK-LABEL: @test_pos8_ir_slt
; CHECK: loop0
; a < b
define void @test_pos8_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -96,10 +89,10 @@ entry:
%cmp3 = icmp slt i32 25466, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ 25466, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -111,13 +104,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos16_ir_slt
; CHECK-LABEL: @test_pos16_ir_slt
; CHECK: loop0
; a < b
define void @test_pos16_ir_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -125,10 +116,10 @@ entry:
%cmp3 = icmp slt i32 9295, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ 9295, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -140,13 +131,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos1_ri_slt
; CHECK-LABEL: @test_pos1_ri_slt
; CHECK: loop0
; a < b
define void @test_pos1_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -154,10 +143,10 @@ entry:
%cmp3 = icmp slt i32 %a, 31236
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -169,13 +158,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, 31236
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos2_ri_slt
; CHECK-LABEL: @test_pos2_ri_slt
; CHECK: loop0
; a < b
define void @test_pos2_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -183,10 +170,10 @@ entry:
%cmp3 = icmp slt i32 %a, 22653
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -198,13 +185,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, 22653
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos4_ri_slt
; CHECK-LABEL: @test_pos4_ri_slt
; CHECK: loop0
; a < b
define void @test_pos4_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -212,10 +197,10 @@ entry:
%cmp3 = icmp slt i32 %a, 1431
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -227,13 +212,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, 1431
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos8_ri_slt
; CHECK-LABEL: @test_pos8_ri_slt
; CHECK: loop0
; a < b
define void @test_pos8_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -241,10 +224,10 @@ entry:
%cmp3 = icmp slt i32 %a, 22403
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -256,13 +239,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, 22403
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos16_ri_slt
; CHECK-LABEL: @test_pos16_ri_slt
; CHECK: loop0
; a < b
define void @test_pos16_ri_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -270,10 +251,10 @@ entry:
%cmp3 = icmp slt i32 %a, 21715
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -285,13 +266,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, 21715
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos1_rr_slt
; CHECK-LABEL: @test_pos1_rr_slt
; CHECK: loop0
; a < b
define void @test_pos1_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -299,10 +278,10 @@ entry:
%cmp3 = icmp slt i32 %a, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -314,13 +293,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos2_rr_slt
; CHECK-LABEL: @test_pos2_rr_slt
; CHECK: loop0
; a < b
define void @test_pos2_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -328,10 +305,10 @@ entry:
%cmp3 = icmp slt i32 %a, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -343,13 +320,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos4_rr_slt
; CHECK-LABEL: @test_pos4_rr_slt
; CHECK: loop0
; a < b
define void @test_pos4_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -357,10 +332,10 @@ entry:
%cmp3 = icmp slt i32 %a, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -372,13 +347,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos8_rr_slt
; CHECK-LABEL: @test_pos8_rr_slt
; CHECK: loop0
; a < b
define void @test_pos8_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -386,10 +359,10 @@ entry:
%cmp3 = icmp slt i32 %a, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -401,13 +374,11 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}
; CHECK: test_pos16_rr_slt
; CHECK-LABEL: @test_pos16_rr_slt
; CHECK: loop0
; a < b
define void @test_pos16_rr_slt(i8* nocapture %p, i32 %a, i32 %b) nounwind {
@@ -415,10 +386,10 @@ entry:
%cmp3 = icmp slt i32 %a, %b
br i1 %cmp3, label %for.body.lr.ph, label %for.end
for.body.lr.ph: ; preds = %entry
for.body.lr.ph:
br label %for.body
for.body: ; preds = %for.body.lr.ph, %for.body
for.body:
%i.04 = phi i32 [ %a, %for.body.lr.ph ], [ %inc, %for.body ]
%arrayidx = getelementptr inbounds i8, i8* %p, i32 %i.04
%0 = load i8, i8* %arrayidx, align 1
@@ -430,7 +401,7 @@ for.body: ; preds = %for.body.lr.ph, %fo
%cmp = icmp slt i32 %inc, %b
br i1 %cmp, label %for.body, label %for.end
for.end: ; preds = %for.body, %entry
for.end:
ret void
}