xref: /aosp_15_r20/external/llvm/test/Transforms/InstCombine/2012-06-06-LoadOfPHIs.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker; <rdar://problem/10889741>
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Workerdefine void @func(double %r, double %g, double %b, double* %outH, double* %outS, double* %outL) nounwind uwtable ssp {
5*9880d681SAndroid Build Coastguard Workerbb:
6*9880d681SAndroid Build Coastguard Worker  %tmp = alloca double, align 8
7*9880d681SAndroid Build Coastguard Worker  %tmp1 = alloca double, align 8
8*9880d681SAndroid Build Coastguard Worker  %tmp2 = alloca double, align 8
9*9880d681SAndroid Build Coastguard Worker  store double %r, double* %tmp, align 8
10*9880d681SAndroid Build Coastguard Worker  store double %g, double* %tmp1, align 8
11*9880d681SAndroid Build Coastguard Worker  store double %b, double* %tmp2, align 8
12*9880d681SAndroid Build Coastguard Worker  %tmp3 = fcmp ogt double %r, %g
13*9880d681SAndroid Build Coastguard Worker  br i1 %tmp3, label %bb4, label %bb8
14*9880d681SAndroid Build Coastguard Worker
15*9880d681SAndroid Build Coastguard Workerbb4:                                              ; preds = %bb
16*9880d681SAndroid Build Coastguard Worker  %tmp5 = fcmp ogt double %r, %b
17*9880d681SAndroid Build Coastguard Worker  br i1 %tmp5, label %bb6, label %bb7
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Workerbb6:                                              ; preds = %bb4
20*9880d681SAndroid Build Coastguard Worker  br label %bb12
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerbb7:                                              ; preds = %bb4
23*9880d681SAndroid Build Coastguard Worker  br label %bb12
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Workerbb8:                                              ; preds = %bb
26*9880d681SAndroid Build Coastguard Worker  %tmp9 = fcmp ogt double %g, %b
27*9880d681SAndroid Build Coastguard Worker  br i1 %tmp9, label %bb10, label %bb11
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Workerbb10:                                             ; preds = %bb8
30*9880d681SAndroid Build Coastguard Worker  br label %bb12
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerbb11:                                             ; preds = %bb8
33*9880d681SAndroid Build Coastguard Worker  br label %bb12
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerbb12:                                             ; preds = %bb11, %bb10, %bb7, %bb6
36*9880d681SAndroid Build Coastguard Worker  %max.0 = phi double* [ %tmp, %bb6 ], [ %tmp2, %bb7 ], [ %tmp1, %bb10 ], [ %tmp2, %bb11 ]
37*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp13 = load double, double* %tmp, align 8
38*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp14 = load double, double* %tmp1, align 8
39*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp15 = fcmp olt double %tmp13, %tmp14
40*9880d681SAndroid Build Coastguard Worker  %tmp13 = load double, double* %tmp, align 8
41*9880d681SAndroid Build Coastguard Worker  %tmp14 = load double, double* %tmp1, align 8
42*9880d681SAndroid Build Coastguard Worker  %tmp15 = fcmp olt double %tmp13, %tmp14
43*9880d681SAndroid Build Coastguard Worker  br i1 %tmp15, label %bb16, label %bb21
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Workerbb16:                                             ; preds = %bb12
46*9880d681SAndroid Build Coastguard Worker  %tmp17 = load double, double* %tmp2, align 8
47*9880d681SAndroid Build Coastguard Worker  %tmp18 = fcmp olt double %tmp13, %tmp17
48*9880d681SAndroid Build Coastguard Worker  br i1 %tmp18, label %bb19, label %bb20
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerbb19:                                             ; preds = %bb16
51*9880d681SAndroid Build Coastguard Worker  br label %bb26
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Workerbb20:                                             ; preds = %bb16
54*9880d681SAndroid Build Coastguard Worker  br label %bb26
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerbb21:                                             ; preds = %bb12
57*9880d681SAndroid Build Coastguard Worker  %tmp22 = load double, double* %tmp2, align 8
58*9880d681SAndroid Build Coastguard Worker  %tmp23 = fcmp olt double %tmp14, %tmp22
59*9880d681SAndroid Build Coastguard Worker  br i1 %tmp23, label %bb24, label %bb25
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerbb24:                                             ; preds = %bb21
62*9880d681SAndroid Build Coastguard Worker  br label %bb26
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Workerbb25:                                             ; preds = %bb21
65*9880d681SAndroid Build Coastguard Worker  br label %bb26
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Workerbb26:                                             ; preds = %bb25, %bb24, %bb20, %bb19
68*9880d681SAndroid Build Coastguard Worker  %min.0 = phi double* [ %tmp, %bb19 ], [ %tmp2, %bb20 ], [ %tmp1, %bb24 ], [ %tmp2, %bb25 ]
69*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp27 = load double, double* %min.0, align 8
70*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp28 = load double, double* %max.0
71*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp29 = fadd double %tmp27, %tmp28
72*9880d681SAndroid Build Coastguard Worker  %tmp27 = load double, double* %min.0, align 8
73*9880d681SAndroid Build Coastguard Worker  %tmp28 = load double, double* %max.0
74*9880d681SAndroid Build Coastguard Worker  %tmp29 = fadd double %tmp27, %tmp28
75*9880d681SAndroid Build Coastguard Worker  %tmp30 = fdiv double %tmp29, 2.000000e+00
76*9880d681SAndroid Build Coastguard Worker  store double %tmp30, double* %outL
77*9880d681SAndroid Build Coastguard Worker  %tmp31 = load double, double* %min.0
78*9880d681SAndroid Build Coastguard Worker  %tmp32 = load double, double* %max.0
79*9880d681SAndroid Build Coastguard Worker  %tmp33 = fcmp oeq double %tmp31, %tmp32
80*9880d681SAndroid Build Coastguard Worker  br i1 %tmp33, label %bb34, label %bb35
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerbb34:                                             ; preds = %bb26
83*9880d681SAndroid Build Coastguard Worker  store double 0.000000e+00, double* %outS
84*9880d681SAndroid Build Coastguard Worker  store double 0.000000e+00, double* %outH
85*9880d681SAndroid Build Coastguard Worker  br label %bb81
86*9880d681SAndroid Build Coastguard Worker
87*9880d681SAndroid Build Coastguard Workerbb35:                                             ; preds = %bb26
88*9880d681SAndroid Build Coastguard Worker  %tmp36 = fcmp olt double %tmp30, 5.000000e-01
89*9880d681SAndroid Build Coastguard Worker  %tmp37 = fsub double %tmp32, %tmp31
90*9880d681SAndroid Build Coastguard Worker  br i1 %tmp36, label %bb38, label %bb41
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Workerbb38:                                             ; preds = %bb35
93*9880d681SAndroid Build Coastguard Worker  %tmp39 = fadd double %tmp32, %tmp31
94*9880d681SAndroid Build Coastguard Worker  %tmp40 = fdiv double %tmp37, %tmp39
95*9880d681SAndroid Build Coastguard Worker  store double %tmp40, double* %outS
96*9880d681SAndroid Build Coastguard Worker  br label %bb45
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerbb41:                                             ; preds = %bb35
99*9880d681SAndroid Build Coastguard Worker  %tmp42 = fsub double 2.000000e+00, %tmp32
100*9880d681SAndroid Build Coastguard Worker  %tmp43 = fsub double %tmp42, %tmp31
101*9880d681SAndroid Build Coastguard Worker  %tmp44 = fdiv double %tmp37, %tmp43
102*9880d681SAndroid Build Coastguard Worker  store double %tmp44, double* %outS
103*9880d681SAndroid Build Coastguard Worker  br label %bb45
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerbb45:                                             ; preds = %bb41, %bb38
106*9880d681SAndroid Build Coastguard Worker  %tmp46 = icmp eq double* %max.0, %tmp
107*9880d681SAndroid Build Coastguard Worker  br i1 %tmp46, label %bb47, label %bb55
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Workerbb47:                                             ; preds = %bb45
110*9880d681SAndroid Build Coastguard Worker  %tmp48 = load double, double* %tmp1, align 8
111*9880d681SAndroid Build Coastguard Worker  %tmp49 = load double, double* %tmp2, align 8
112*9880d681SAndroid Build Coastguard Worker  %tmp50 = fsub double %tmp48, %tmp49
113*9880d681SAndroid Build Coastguard Worker  %tmp51 = load double, double* %max.0
114*9880d681SAndroid Build Coastguard Worker  %tmp52 = load double, double* %min.0
115*9880d681SAndroid Build Coastguard Worker  %tmp53 = fsub double %tmp51, %tmp52
116*9880d681SAndroid Build Coastguard Worker  %tmp54 = fdiv double %tmp50, %tmp53
117*9880d681SAndroid Build Coastguard Worker  store double %tmp54, double* %outH
118*9880d681SAndroid Build Coastguard Worker  br label %bb75
119*9880d681SAndroid Build Coastguard Worker
120*9880d681SAndroid Build Coastguard Workerbb55:                                             ; preds = %bb45
121*9880d681SAndroid Build Coastguard Worker  %tmp56 = icmp eq double* %max.0, %tmp1
122*9880d681SAndroid Build Coastguard Worker  br i1 %tmp56, label %bb57, label %bb66
123*9880d681SAndroid Build Coastguard Worker
124*9880d681SAndroid Build Coastguard Workerbb57:                                             ; preds = %bb55
125*9880d681SAndroid Build Coastguard Worker  %tmp58 = load double, double* %tmp2, align 8
126*9880d681SAndroid Build Coastguard Worker  %tmp59 = load double, double* %tmp, align 8
127*9880d681SAndroid Build Coastguard Worker  %tmp60 = fsub double %tmp58, %tmp59
128*9880d681SAndroid Build Coastguard Worker  %tmp61 = load double, double* %max.0
129*9880d681SAndroid Build Coastguard Worker  %tmp62 = load double, double* %min.0
130*9880d681SAndroid Build Coastguard Worker  %tmp63 = fsub double %tmp61, %tmp62
131*9880d681SAndroid Build Coastguard Worker  %tmp64 = fdiv double %tmp60, %tmp63
132*9880d681SAndroid Build Coastguard Worker  %tmp65 = fadd double 2.000000e+00, %tmp64
133*9880d681SAndroid Build Coastguard Worker  store double %tmp65, double* %outH
134*9880d681SAndroid Build Coastguard Worker  br label %bb75
135*9880d681SAndroid Build Coastguard Worker
136*9880d681SAndroid Build Coastguard Workerbb66:                                             ; preds = %bb55
137*9880d681SAndroid Build Coastguard Worker  %tmp67 = load double, double* %tmp, align 8
138*9880d681SAndroid Build Coastguard Worker  %tmp68 = load double, double* %tmp1, align 8
139*9880d681SAndroid Build Coastguard Worker  %tmp69 = fsub double %tmp67, %tmp68
140*9880d681SAndroid Build Coastguard Worker  %tmp70 = load double, double* %max.0
141*9880d681SAndroid Build Coastguard Worker  %tmp71 = load double, double* %min.0
142*9880d681SAndroid Build Coastguard Worker  %tmp72 = fsub double %tmp70, %tmp71
143*9880d681SAndroid Build Coastguard Worker  %tmp73 = fdiv double %tmp69, %tmp72
144*9880d681SAndroid Build Coastguard Worker  %tmp74 = fadd double 4.000000e+00, %tmp73
145*9880d681SAndroid Build Coastguard Worker  store double %tmp74, double* %outH
146*9880d681SAndroid Build Coastguard Worker  br label %bb75
147*9880d681SAndroid Build Coastguard Worker
148*9880d681SAndroid Build Coastguard Workerbb75:                                             ; preds = %bb66, %bb57, %bb47
149*9880d681SAndroid Build Coastguard Worker  %tmp76 = load double, double* %outH
150*9880d681SAndroid Build Coastguard Worker  %tmp77 = fdiv double %tmp76, 6.000000e+00
151*9880d681SAndroid Build Coastguard Worker  store double %tmp77, double* %outH
152*9880d681SAndroid Build Coastguard Worker  %tmp78 = fcmp olt double %tmp77, 0.000000e+00
153*9880d681SAndroid Build Coastguard Worker  br i1 %tmp78, label %bb79, label %bb81
154*9880d681SAndroid Build Coastguard Worker
155*9880d681SAndroid Build Coastguard Workerbb79:                                             ; preds = %bb75
156*9880d681SAndroid Build Coastguard Worker  %tmp80 = fadd double %tmp77, 1.000000e+00
157*9880d681SAndroid Build Coastguard Worker  store double %tmp80, double* %outH
158*9880d681SAndroid Build Coastguard Worker  br label %bb81
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerbb81:                                             ; preds = %bb79, %bb75, %bb34
161*9880d681SAndroid Build Coastguard Worker  ret void
162*9880d681SAndroid Build Coastguard Worker}
163