xref: /aosp_15_r20/external/llvm/test/CodeGen/ARM/saxpy10-a9.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; 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
2*9880d681SAndroid Build Coastguard Worker;
3*9880d681SAndroid Build Coastguard Worker; Test MI-Sched suppory latency based stalls on in in-order pipeline
4*9880d681SAndroid Build Coastguard Worker; using the new machine model.
5*9880d681SAndroid Build Coastguard Worker
6*9880d681SAndroid Build Coastguard Workertarget 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*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; Don't be too strict with the top of the schedule, but most of it
9*9880d681SAndroid Build Coastguard Worker; should be nicely pipelined.
10*9880d681SAndroid Build Coastguard Worker;
11*9880d681SAndroid Build Coastguard Worker; CHECK: saxpy10:
12*9880d681SAndroid Build Coastguard Worker; CHECK: vldr
13*9880d681SAndroid Build Coastguard Worker; CHECK: vldr
14*9880d681SAndroid Build Coastguard Worker; CHECK: vldr
15*9880d681SAndroid Build Coastguard Worker; CHECK: vldr
16*9880d681SAndroid Build Coastguard Worker; CHECK: vldr
17*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
18*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
19*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
20*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
23*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
24*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
25*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
27*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
28*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
29*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
30*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
32*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
33*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
36*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
37*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
38*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
40*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
42*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
43*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
45*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
46*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
47*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
48*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
49*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
50*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
53*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
54*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmul
55*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
56*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vldr
57*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
58*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
59*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vadd
60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vmov
61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: bx
62*9880d681SAndroid Build Coastguard Worker;
63*9880d681SAndroid Build Coastguard Worker; This accumulates a sum rather than storing each result.
64*9880d681SAndroid Build Coastguard Workerdefine float @saxpy10(float* nocapture readonly %data1, float* nocapture readonly %data2, float %a) {
65*9880d681SAndroid Build Coastguard Workerentry:
66*9880d681SAndroid Build Coastguard Worker  %0 = load float, float* %data1, align 4
67*9880d681SAndroid Build Coastguard Worker  %mul = fmul float %0, %a
68*9880d681SAndroid Build Coastguard Worker  %1 = load float, float* %data2, align 4
69*9880d681SAndroid Build Coastguard Worker  %add = fadd float %mul, %1
70*9880d681SAndroid Build Coastguard Worker  %add2 = fadd float %add, 0.000000e+00
71*9880d681SAndroid Build Coastguard Worker  %arrayidx.1 = getelementptr inbounds float, float* %data1, i32 1
72*9880d681SAndroid Build Coastguard Worker  %2 = load float, float* %arrayidx.1, align 4
73*9880d681SAndroid Build Coastguard Worker  %mul.1 = fmul float %2, %a
74*9880d681SAndroid Build Coastguard Worker  %arrayidx1.1 = getelementptr inbounds float, float* %data2, i32 1
75*9880d681SAndroid Build Coastguard Worker  %3 = load float, float* %arrayidx1.1, align 4
76*9880d681SAndroid Build Coastguard Worker  %add.1 = fadd float %mul.1, %3
77*9880d681SAndroid Build Coastguard Worker  %add2.1 = fadd float %add2, %add.1
78*9880d681SAndroid Build Coastguard Worker  %arrayidx.2 = getelementptr inbounds float, float* %data1, i32 2
79*9880d681SAndroid Build Coastguard Worker  %4 = load float, float* %arrayidx.2, align 4
80*9880d681SAndroid Build Coastguard Worker  %mul.2 = fmul float %4, %a
81*9880d681SAndroid Build Coastguard Worker  %arrayidx1.2 = getelementptr inbounds float, float* %data2, i32 2
82*9880d681SAndroid Build Coastguard Worker  %5 = load float, float* %arrayidx1.2, align 4
83*9880d681SAndroid Build Coastguard Worker  %add.2 = fadd float %mul.2, %5
84*9880d681SAndroid Build Coastguard Worker  %add2.2 = fadd float %add2.1, %add.2
85*9880d681SAndroid Build Coastguard Worker  %arrayidx.3 = getelementptr inbounds float, float* %data1, i32 3
86*9880d681SAndroid Build Coastguard Worker  %6 = load float, float* %arrayidx.3, align 4
87*9880d681SAndroid Build Coastguard Worker  %mul.3 = fmul float %6, %a
88*9880d681SAndroid Build Coastguard Worker  %arrayidx1.3 = getelementptr inbounds float, float* %data2, i32 3
89*9880d681SAndroid Build Coastguard Worker  %7 = load float, float* %arrayidx1.3, align 4
90*9880d681SAndroid Build Coastguard Worker  %add.3 = fadd float %mul.3, %7
91*9880d681SAndroid Build Coastguard Worker  %add2.3 = fadd float %add2.2, %add.3
92*9880d681SAndroid Build Coastguard Worker  %arrayidx.4 = getelementptr inbounds float, float* %data1, i32 4
93*9880d681SAndroid Build Coastguard Worker  %8 = load float, float* %arrayidx.4, align 4
94*9880d681SAndroid Build Coastguard Worker  %mul.4 = fmul float %8, %a
95*9880d681SAndroid Build Coastguard Worker  %arrayidx1.4 = getelementptr inbounds float, float* %data2, i32 4
96*9880d681SAndroid Build Coastguard Worker  %9 = load float, float* %arrayidx1.4, align 4
97*9880d681SAndroid Build Coastguard Worker  %add.4 = fadd float %mul.4, %9
98*9880d681SAndroid Build Coastguard Worker  %add2.4 = fadd float %add2.3, %add.4
99*9880d681SAndroid Build Coastguard Worker  %arrayidx.5 = getelementptr inbounds float, float* %data1, i32 5
100*9880d681SAndroid Build Coastguard Worker  %10 = load float, float* %arrayidx.5, align 4
101*9880d681SAndroid Build Coastguard Worker  %mul.5 = fmul float %10, %a
102*9880d681SAndroid Build Coastguard Worker  %arrayidx1.5 = getelementptr inbounds float, float* %data2, i32 5
103*9880d681SAndroid Build Coastguard Worker  %11 = load float, float* %arrayidx1.5, align 4
104*9880d681SAndroid Build Coastguard Worker  %add.5 = fadd float %mul.5, %11
105*9880d681SAndroid Build Coastguard Worker  %add2.5 = fadd float %add2.4, %add.5
106*9880d681SAndroid Build Coastguard Worker  %arrayidx.6 = getelementptr inbounds float, float* %data1, i32 6
107*9880d681SAndroid Build Coastguard Worker  %12 = load float, float* %arrayidx.6, align 4
108*9880d681SAndroid Build Coastguard Worker  %mul.6 = fmul float %12, %a
109*9880d681SAndroid Build Coastguard Worker  %arrayidx1.6 = getelementptr inbounds float, float* %data2, i32 6
110*9880d681SAndroid Build Coastguard Worker  %13 = load float, float* %arrayidx1.6, align 4
111*9880d681SAndroid Build Coastguard Worker  %add.6 = fadd float %mul.6, %13
112*9880d681SAndroid Build Coastguard Worker  %add2.6 = fadd float %add2.5, %add.6
113*9880d681SAndroid Build Coastguard Worker  %arrayidx.7 = getelementptr inbounds float, float* %data1, i32 7
114*9880d681SAndroid Build Coastguard Worker  %14 = load float, float* %arrayidx.7, align 4
115*9880d681SAndroid Build Coastguard Worker  %mul.7 = fmul float %14, %a
116*9880d681SAndroid Build Coastguard Worker  %arrayidx1.7 = getelementptr inbounds float, float* %data2, i32 7
117*9880d681SAndroid Build Coastguard Worker  %15 = load float, float* %arrayidx1.7, align 4
118*9880d681SAndroid Build Coastguard Worker  %add.7 = fadd float %mul.7, %15
119*9880d681SAndroid Build Coastguard Worker  %add2.7 = fadd float %add2.6, %add.7
120*9880d681SAndroid Build Coastguard Worker  %arrayidx.8 = getelementptr inbounds float, float* %data1, i32 8
121*9880d681SAndroid Build Coastguard Worker  %16 = load float, float* %arrayidx.8, align 4
122*9880d681SAndroid Build Coastguard Worker  %mul.8 = fmul float %16, %a
123*9880d681SAndroid Build Coastguard Worker  %arrayidx1.8 = getelementptr inbounds float, float* %data2, i32 8
124*9880d681SAndroid Build Coastguard Worker  %17 = load float, float* %arrayidx1.8, align 4
125*9880d681SAndroid Build Coastguard Worker  %add.8 = fadd float %mul.8, %17
126*9880d681SAndroid Build Coastguard Worker  %add2.8 = fadd float %add2.7, %add.8
127*9880d681SAndroid Build Coastguard Worker  %arrayidx.9 = getelementptr inbounds float, float* %data1, i32 9
128*9880d681SAndroid Build Coastguard Worker  %18 = load float, float* %arrayidx.9, align 4
129*9880d681SAndroid Build Coastguard Worker  %mul.9 = fmul float %18, %a
130*9880d681SAndroid Build Coastguard Worker  %arrayidx1.9 = getelementptr inbounds float, float* %data2, i32 9
131*9880d681SAndroid Build Coastguard Worker  %19 = load float, float* %arrayidx1.9, align 4
132*9880d681SAndroid Build Coastguard Worker  %add.9 = fadd float %mul.9, %19
133*9880d681SAndroid Build Coastguard Worker  %add2.9 = fadd float %add2.8, %add.9
134*9880d681SAndroid Build Coastguard Worker  ret float %add2.9
135*9880d681SAndroid Build Coastguard Worker}
136