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