blob: 91610f1a232d398ebb84edf3b35d202dff38e447 [file] [log] [blame]
Eric Christophere035e262015-03-07 01:39:06 +00001; RUN: llc < %s -march=arm -mtriple=thumbv7-apple-ios7.0.0 -float-abi=hard -mcpu=cortex-a9 -misched-postra -enable-misched -pre-RA-sched=source -scheditins=false | FileCheck %s
Andrew Trick880e5732013-12-05 17:55:58 +00002;
3; Test MI-Sched suppory latency based stalls on in in-order pipeline
4; using the new machine model.
5
6target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
7
8; Don't be too strict with the top of the schedule, but most of it
9; should be nicely pipelined.
10;
11; CHECK: saxpy10:
12; CHECK: vldr
13; CHECK: vldr
14; CHECK: vldr
15; CHECK: vldr
16; CHECK: vldr
Andrew Trick880e5732013-12-05 17:55:58 +000017; CHECK-NEXT: vldr
Andrew Trick3ca67d62013-12-28 21:57:05 +000018; CHECK-NEXT: vmul
Andrew Trick43adfb32015-03-27 06:10:13 +000019; CHECK-NEXT: vadd
20; CHECK-NEXT: vadd
21; CHECK-NEXT: vldr
Andrew Trick3ca67d62013-12-28 21:57:05 +000022; CHECK-NEXT: vldr
23; CHECK-NEXT: vadd
24; CHECK-NEXT: vadd
25; CHECK-NEXT: vmul
26; CHECK-NEXT: vldr
27; CHECK-NEXT: vadd
28; CHECK-NEXT: vadd
29; CHECK-NEXT: vldr
Andrew Trick880e5732013-12-05 17:55:58 +000030; CHECK-NEXT: vmul
Andrew Trick43adfb32015-03-27 06:10:13 +000031; CHECK-NEXT: vldr
32; CHECK-NEXT: vadd
33; CHECK-NEXT: vldr
34; CHECK-NEXT: vadd
35; CHECK-NEXT: vldr
36; CHECK-NEXT: vmul
Andrew Trick880e5732013-12-05 17:55:58 +000037; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000038; CHECK-NEXT: vldr
Andrew Trick3ca67d62013-12-28 21:57:05 +000039; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000040; CHECK-NEXT: vldr
41; CHECK-NEXT: vmul
42; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000043; CHECK-NEXT: vldr
Andrew Trick3ca67d62013-12-28 21:57:05 +000044; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000045; CHECK-NEXT: vldr
46; CHECK-NEXT: vmul
47; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000048; CHECK-NEXT: vldr
Andrew Trick3ca67d62013-12-28 21:57:05 +000049; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000050; CHECK-NEXT: vldr
51; CHECK-NEXT: vmul
52; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000053; CHECK-NEXT: vldr
54; CHECK-NEXT: vmul
55; CHECK-NEXT: vadd
Andrew Trick880e5732013-12-05 17:55:58 +000056; CHECK-NEXT: vldr
Andrew Trick880e5732013-12-05 17:55:58 +000057; CHECK-NEXT: vadd
58; CHECK-NEXT: vadd
59; CHECK-NEXT: vadd
60; CHECK-NEXT: vmov
61; CHECK-NEXT: bx
62;
63; This accumulates a sum rather than storing each result.
64define float @saxpy10(float* nocapture readonly %data1, float* nocapture readonly %data2, float %a) {
65entry:
David Blaikiea79ac142015-02-27 21:17:42 +000066 %0 = load float, float* %data1, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000067 %mul = fmul float %0, %a
David Blaikiea79ac142015-02-27 21:17:42 +000068 %1 = load float, float* %data2, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000069 %add = fadd float %mul, %1
70 %add2 = fadd float %add, 0.000000e+00
David Blaikie79e6c742015-02-27 19:29:02 +000071 %arrayidx.1 = getelementptr inbounds float, float* %data1, i32 1
David Blaikiea79ac142015-02-27 21:17:42 +000072 %2 = load float, float* %arrayidx.1, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000073 %mul.1 = fmul float %2, %a
David Blaikie79e6c742015-02-27 19:29:02 +000074 %arrayidx1.1 = getelementptr inbounds float, float* %data2, i32 1
David Blaikiea79ac142015-02-27 21:17:42 +000075 %3 = load float, float* %arrayidx1.1, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000076 %add.1 = fadd float %mul.1, %3
77 %add2.1 = fadd float %add2, %add.1
David Blaikie79e6c742015-02-27 19:29:02 +000078 %arrayidx.2 = getelementptr inbounds float, float* %data1, i32 2
David Blaikiea79ac142015-02-27 21:17:42 +000079 %4 = load float, float* %arrayidx.2, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000080 %mul.2 = fmul float %4, %a
David Blaikie79e6c742015-02-27 19:29:02 +000081 %arrayidx1.2 = getelementptr inbounds float, float* %data2, i32 2
David Blaikiea79ac142015-02-27 21:17:42 +000082 %5 = load float, float* %arrayidx1.2, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000083 %add.2 = fadd float %mul.2, %5
84 %add2.2 = fadd float %add2.1, %add.2
David Blaikie79e6c742015-02-27 19:29:02 +000085 %arrayidx.3 = getelementptr inbounds float, float* %data1, i32 3
David Blaikiea79ac142015-02-27 21:17:42 +000086 %6 = load float, float* %arrayidx.3, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000087 %mul.3 = fmul float %6, %a
David Blaikie79e6c742015-02-27 19:29:02 +000088 %arrayidx1.3 = getelementptr inbounds float, float* %data2, i32 3
David Blaikiea79ac142015-02-27 21:17:42 +000089 %7 = load float, float* %arrayidx1.3, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000090 %add.3 = fadd float %mul.3, %7
91 %add2.3 = fadd float %add2.2, %add.3
David Blaikie79e6c742015-02-27 19:29:02 +000092 %arrayidx.4 = getelementptr inbounds float, float* %data1, i32 4
David Blaikiea79ac142015-02-27 21:17:42 +000093 %8 = load float, float* %arrayidx.4, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000094 %mul.4 = fmul float %8, %a
David Blaikie79e6c742015-02-27 19:29:02 +000095 %arrayidx1.4 = getelementptr inbounds float, float* %data2, i32 4
David Blaikiea79ac142015-02-27 21:17:42 +000096 %9 = load float, float* %arrayidx1.4, align 4
Andrew Trick880e5732013-12-05 17:55:58 +000097 %add.4 = fadd float %mul.4, %9
98 %add2.4 = fadd float %add2.3, %add.4
David Blaikie79e6c742015-02-27 19:29:02 +000099 %arrayidx.5 = getelementptr inbounds float, float* %data1, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000100 %10 = load float, float* %arrayidx.5, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000101 %mul.5 = fmul float %10, %a
David Blaikie79e6c742015-02-27 19:29:02 +0000102 %arrayidx1.5 = getelementptr inbounds float, float* %data2, i32 5
David Blaikiea79ac142015-02-27 21:17:42 +0000103 %11 = load float, float* %arrayidx1.5, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000104 %add.5 = fadd float %mul.5, %11
105 %add2.5 = fadd float %add2.4, %add.5
David Blaikie79e6c742015-02-27 19:29:02 +0000106 %arrayidx.6 = getelementptr inbounds float, float* %data1, i32 6
David Blaikiea79ac142015-02-27 21:17:42 +0000107 %12 = load float, float* %arrayidx.6, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000108 %mul.6 = fmul float %12, %a
David Blaikie79e6c742015-02-27 19:29:02 +0000109 %arrayidx1.6 = getelementptr inbounds float, float* %data2, i32 6
David Blaikiea79ac142015-02-27 21:17:42 +0000110 %13 = load float, float* %arrayidx1.6, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000111 %add.6 = fadd float %mul.6, %13
112 %add2.6 = fadd float %add2.5, %add.6
David Blaikie79e6c742015-02-27 19:29:02 +0000113 %arrayidx.7 = getelementptr inbounds float, float* %data1, i32 7
David Blaikiea79ac142015-02-27 21:17:42 +0000114 %14 = load float, float* %arrayidx.7, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000115 %mul.7 = fmul float %14, %a
David Blaikie79e6c742015-02-27 19:29:02 +0000116 %arrayidx1.7 = getelementptr inbounds float, float* %data2, i32 7
David Blaikiea79ac142015-02-27 21:17:42 +0000117 %15 = load float, float* %arrayidx1.7, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000118 %add.7 = fadd float %mul.7, %15
119 %add2.7 = fadd float %add2.6, %add.7
David Blaikie79e6c742015-02-27 19:29:02 +0000120 %arrayidx.8 = getelementptr inbounds float, float* %data1, i32 8
David Blaikiea79ac142015-02-27 21:17:42 +0000121 %16 = load float, float* %arrayidx.8, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000122 %mul.8 = fmul float %16, %a
David Blaikie79e6c742015-02-27 19:29:02 +0000123 %arrayidx1.8 = getelementptr inbounds float, float* %data2, i32 8
David Blaikiea79ac142015-02-27 21:17:42 +0000124 %17 = load float, float* %arrayidx1.8, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000125 %add.8 = fadd float %mul.8, %17
126 %add2.8 = fadd float %add2.7, %add.8
David Blaikie79e6c742015-02-27 19:29:02 +0000127 %arrayidx.9 = getelementptr inbounds float, float* %data1, i32 9
David Blaikiea79ac142015-02-27 21:17:42 +0000128 %18 = load float, float* %arrayidx.9, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000129 %mul.9 = fmul float %18, %a
David Blaikie79e6c742015-02-27 19:29:02 +0000130 %arrayidx1.9 = getelementptr inbounds float, float* %data2, i32 9
David Blaikiea79ac142015-02-27 21:17:42 +0000131 %19 = load float, float* %arrayidx1.9, align 4
Andrew Trick880e5732013-12-05 17:55:58 +0000132 %add.9 = fadd float %mul.9, %19
133 %add2.9 = fadd float %add2.8, %add.9
134 ret float %add2.9
135}