xref: /aosp_15_r20/external/llvm/test/CodeGen/PowerPC/ctrloops-softfloat.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=powerpc-unknown-linux-gnu -O1 < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Worker; double x, y;
4*9880d681SAndroid Build Coastguard Worker;
5*9880d681SAndroid Build Coastguard Worker; void foo1()
6*9880d681SAndroid Build Coastguard Worker; {
7*9880d681SAndroid Build Coastguard Worker;   x = y = 1.1;
8*9880d681SAndroid Build Coastguard Worker;   for (int i = 0; i < 175; i++)
9*9880d681SAndroid Build Coastguard Worker;     y = x + y;
10*9880d681SAndroid Build Coastguard Worker; }
11*9880d681SAndroid Build Coastguard Worker; void foo2()
12*9880d681SAndroid Build Coastguard Worker; {
13*9880d681SAndroid Build Coastguard Worker;   x = y = 1.1;
14*9880d681SAndroid Build Coastguard Worker;   for (int i = 0; i < 175; i++)
15*9880d681SAndroid Build Coastguard Worker;     y = x - y;
16*9880d681SAndroid Build Coastguard Worker; }
17*9880d681SAndroid Build Coastguard Worker; void foo3()
18*9880d681SAndroid Build Coastguard Worker; {
19*9880d681SAndroid Build Coastguard Worker;   x = y = 1.1;
20*9880d681SAndroid Build Coastguard Worker;   for (int i = 0; i < 175; i++)
21*9880d681SAndroid Build Coastguard Worker;     y = x * y;
22*9880d681SAndroid Build Coastguard Worker; }
23*9880d681SAndroid Build Coastguard Worker; void foo4()
24*9880d681SAndroid Build Coastguard Worker; {
25*9880d681SAndroid Build Coastguard Worker;   x = y = 1.1;
26*9880d681SAndroid Build Coastguard Worker;   for (int i = 0; i < 175; i++)
27*9880d681SAndroid Build Coastguard Worker;     y = x / y;
28*9880d681SAndroid Build Coastguard Worker; }
29*9880d681SAndroid Build Coastguard Worker
30*9880d681SAndroid Build Coastguard Workertarget datalayout = "E-m:e-p:32:32-i64:64-n32"
31*9880d681SAndroid Build Coastguard Workertarget triple = "powerpc-buildroot-linux-gnu"
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker@y = common global double 0.000000e+00, align 8
34*9880d681SAndroid Build Coastguard Worker@x = common global double 0.000000e+00, align 8
35*9880d681SAndroid Build Coastguard Worker
36*9880d681SAndroid Build Coastguard Workerdefine void @foo1() #0 {
37*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @y, align 8
38*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @x, align 8
39*9880d681SAndroid Build Coastguard Worker  br label %2
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; <label>:1                                       ; preds = %2
42*9880d681SAndroid Build Coastguard Worker  %.lcssa = phi double [ %4, %2 ]
43*9880d681SAndroid Build Coastguard Worker  store double %.lcssa, double* @y, align 8
44*9880d681SAndroid Build Coastguard Worker  ret void
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Worker; <label>:2                                       ; preds = %2, %0
47*9880d681SAndroid Build Coastguard Worker  %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ]
48*9880d681SAndroid Build Coastguard Worker  %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ]
49*9880d681SAndroid Build Coastguard Worker  %4 = fadd double %3, 1.100000e+00
50*9880d681SAndroid Build Coastguard Worker  %5 = add nuw nsw i32 %i.01, 1
51*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp eq i32 %5, 75
52*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %1, label %2
53*9880d681SAndroid Build Coastguard Worker  ; CHECK: bl __adddf3
54*9880d681SAndroid Build Coastguard Worker  ; CHECK: cmplwi
55*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: li [[REG1:[0-9]+]], 175
56*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: mtctr [[REG1]]
57*9880d681SAndroid Build Coastguard Worker}
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Workerdefine void @foo2() #0 {
60*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @y, align 8
61*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @x, align 8
62*9880d681SAndroid Build Coastguard Worker  br label %2
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker; <label>:1                                       ; preds = %2
65*9880d681SAndroid Build Coastguard Worker  %.lcssa = phi double [ %4, %2 ]
66*9880d681SAndroid Build Coastguard Worker  store double %.lcssa, double* @y, align 8
67*9880d681SAndroid Build Coastguard Worker  ret void
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Worker; <label>:2                                       ; preds = %2, %0
70*9880d681SAndroid Build Coastguard Worker  %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ]
71*9880d681SAndroid Build Coastguard Worker  %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ]
72*9880d681SAndroid Build Coastguard Worker  %4 = fsub double 1.100000e+00, %3
73*9880d681SAndroid Build Coastguard Worker  %5 = add nuw nsw i32 %i.01, 1
74*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp eq i32 %5, 75
75*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %1, label %2
76*9880d681SAndroid Build Coastguard Worker  ; CHECK: bl __subdf3
77*9880d681SAndroid Build Coastguard Worker  ; CHECK: cmplwi
78*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: li [[REG1:[0-9]+]], 175
79*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: mtctr [[REG1]]
80*9880d681SAndroid Build Coastguard Worker}
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerdefine void @foo3() #0 {
83*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @y, align 8
84*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @x, align 8
85*9880d681SAndroid Build Coastguard Worker  br label %2
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Worker; <label>:1                                       ; preds = %2
88*9880d681SAndroid Build Coastguard Worker  %.lcssa = phi double [ %4, %2 ]
89*9880d681SAndroid Build Coastguard Worker  store double %.lcssa, double* @y, align 8
90*9880d681SAndroid Build Coastguard Worker  ret void
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker; <label>:2                                       ; preds = %2, %0
93*9880d681SAndroid Build Coastguard Worker  %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ]
94*9880d681SAndroid Build Coastguard Worker  %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ]
95*9880d681SAndroid Build Coastguard Worker  %4 = fmul double %3, 1.100000e+00
96*9880d681SAndroid Build Coastguard Worker  %5 = add nuw nsw i32 %i.01, 1
97*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp eq i32 %5, 75
98*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %1, label %2
99*9880d681SAndroid Build Coastguard Worker  ; CHECK: bl __muldf3
100*9880d681SAndroid Build Coastguard Worker  ; CHECK: cmplwi
101*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: li [[REG1:[0-9]+]], 175
102*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: mtctr [[REG1]]
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerdefine void @foo4() #0 {
106*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @y, align 8
107*9880d681SAndroid Build Coastguard Worker  store double 1.100000e+00, double* @x, align 8
108*9880d681SAndroid Build Coastguard Worker  br label %2
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; <label>:1                                       ; preds = %2
111*9880d681SAndroid Build Coastguard Worker  %.lcssa = phi double [ %4, %2 ]
112*9880d681SAndroid Build Coastguard Worker  store double %.lcssa, double* @y, align 8
113*9880d681SAndroid Build Coastguard Worker  ret void
114*9880d681SAndroid Build Coastguard Worker
115*9880d681SAndroid Build Coastguard Worker; <label>:2                                       ; preds = %2, %0
116*9880d681SAndroid Build Coastguard Worker  %3 = phi double [ 1.100000e+00, %0 ], [ %4, %2 ]
117*9880d681SAndroid Build Coastguard Worker  %i.01 = phi i32 [ 0, %0 ], [ %5, %2 ]
118*9880d681SAndroid Build Coastguard Worker  %4 = fdiv double 1.100000e+00, %3
119*9880d681SAndroid Build Coastguard Worker  %5 = add nuw nsw i32 %i.01, 1
120*9880d681SAndroid Build Coastguard Worker  %exitcond = icmp eq i32 %5, 75
121*9880d681SAndroid Build Coastguard Worker  br i1 %exitcond, label %1, label %2
122*9880d681SAndroid Build Coastguard Worker  ; CHECK: bl __divdf3
123*9880d681SAndroid Build Coastguard Worker  ; CHECK: cmplwi
124*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: li [[REG1:[0-9]+]], 175
125*9880d681SAndroid Build Coastguard Worker  ; CHECK-NOT: mtctr [[REG1]]
126*9880d681SAndroid Build Coastguard Worker}
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Workerattributes #0 = { "use-soft-float"="true" }
129*9880d681SAndroid Build Coastguard Worker
130