| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- ; RUN: opt < %s -instcombine -S | FileCheck %s
- ; <rdar://problem/10889741>
- define void @func(double %r, double %g, double %b, double* %outH, double* %outS, double* %outL) nounwind uwtable ssp {
- bb:
- %tmp = alloca double, align 8
- %tmp1 = alloca double, align 8
- %tmp2 = alloca double, align 8
- store double %r, double* %tmp, align 8
- store double %g, double* %tmp1, align 8
- store double %b, double* %tmp2, align 8
- %tmp3 = fcmp ogt double %r, %g
- br i1 %tmp3, label %bb4, label %bb8
- bb4: ; preds = %bb
- %tmp5 = fcmp ogt double %r, %b
- br i1 %tmp5, label %bb6, label %bb7
- bb6: ; preds = %bb4
- br label %bb12
- bb7: ; preds = %bb4
- br label %bb12
- bb8: ; preds = %bb
- %tmp9 = fcmp ogt double %g, %b
- br i1 %tmp9, label %bb10, label %bb11
- bb10: ; preds = %bb8
- br label %bb12
- bb11: ; preds = %bb8
- br label %bb12
- bb12: ; preds = %bb11, %bb10, %bb7, %bb6
- %max.0 = phi double* [ %tmp, %bb6 ], [ %tmp2, %bb7 ], [ %tmp1, %bb10 ], [ %tmp2, %bb11 ]
- ; CHECK: %tmp13 = load double, double* %tmp, align 8
- ; CHECK: %tmp14 = load double, double* %tmp1, align 8
- ; CHECK: %tmp15 = fcmp olt double %tmp13, %tmp14
- %tmp13 = load double, double* %tmp, align 8
- %tmp14 = load double, double* %tmp1, align 8
- %tmp15 = fcmp olt double %tmp13, %tmp14
- br i1 %tmp15, label %bb16, label %bb21
- bb16: ; preds = %bb12
- %tmp17 = load double, double* %tmp2, align 8
- %tmp18 = fcmp olt double %tmp13, %tmp17
- br i1 %tmp18, label %bb19, label %bb20
- bb19: ; preds = %bb16
- br label %bb26
- bb20: ; preds = %bb16
- br label %bb26
- bb21: ; preds = %bb12
- %tmp22 = load double, double* %tmp2, align 8
- %tmp23 = fcmp olt double %tmp14, %tmp22
- br i1 %tmp23, label %bb24, label %bb25
- bb24: ; preds = %bb21
- br label %bb26
- bb25: ; preds = %bb21
- br label %bb26
- bb26: ; preds = %bb25, %bb24, %bb20, %bb19
- %min.0 = phi double* [ %tmp, %bb19 ], [ %tmp2, %bb20 ], [ %tmp1, %bb24 ], [ %tmp2, %bb25 ]
- ; CHECK: %tmp27 = load double, double* %min.0, align 8
- ; CHECK: %tmp28 = load double, double* %max.0
- ; CHECK: %tmp29 = fadd double %tmp27, %tmp28
- %tmp27 = load double, double* %min.0, align 8
- %tmp28 = load double, double* %max.0
- %tmp29 = fadd double %tmp27, %tmp28
- %tmp30 = fdiv double %tmp29, 2.000000e+00
- store double %tmp30, double* %outL
- %tmp31 = load double, double* %min.0
- %tmp32 = load double, double* %max.0
- %tmp33 = fcmp oeq double %tmp31, %tmp32
- br i1 %tmp33, label %bb34, label %bb35
- bb34: ; preds = %bb26
- store double 0.000000e+00, double* %outS
- store double 0.000000e+00, double* %outH
- br label %bb81
- bb35: ; preds = %bb26
- %tmp36 = fcmp olt double %tmp30, 5.000000e-01
- %tmp37 = fsub double %tmp32, %tmp31
- br i1 %tmp36, label %bb38, label %bb41
- bb38: ; preds = %bb35
- %tmp39 = fadd double %tmp32, %tmp31
- %tmp40 = fdiv double %tmp37, %tmp39
- store double %tmp40, double* %outS
- br label %bb45
- bb41: ; preds = %bb35
- %tmp42 = fsub double 2.000000e+00, %tmp32
- %tmp43 = fsub double %tmp42, %tmp31
- %tmp44 = fdiv double %tmp37, %tmp43
- store double %tmp44, double* %outS
- br label %bb45
- bb45: ; preds = %bb41, %bb38
- %tmp46 = icmp eq double* %max.0, %tmp
- br i1 %tmp46, label %bb47, label %bb55
- bb47: ; preds = %bb45
- %tmp48 = load double, double* %tmp1, align 8
- %tmp49 = load double, double* %tmp2, align 8
- %tmp50 = fsub double %tmp48, %tmp49
- %tmp51 = load double, double* %max.0
- %tmp52 = load double, double* %min.0
- %tmp53 = fsub double %tmp51, %tmp52
- %tmp54 = fdiv double %tmp50, %tmp53
- store double %tmp54, double* %outH
- br label %bb75
- bb55: ; preds = %bb45
- %tmp56 = icmp eq double* %max.0, %tmp1
- br i1 %tmp56, label %bb57, label %bb66
- bb57: ; preds = %bb55
- %tmp58 = load double, double* %tmp2, align 8
- %tmp59 = load double, double* %tmp, align 8
- %tmp60 = fsub double %tmp58, %tmp59
- %tmp61 = load double, double* %max.0
- %tmp62 = load double, double* %min.0
- %tmp63 = fsub double %tmp61, %tmp62
- %tmp64 = fdiv double %tmp60, %tmp63
- %tmp65 = fadd double 2.000000e+00, %tmp64
- store double %tmp65, double* %outH
- br label %bb75
- bb66: ; preds = %bb55
- %tmp67 = load double, double* %tmp, align 8
- %tmp68 = load double, double* %tmp1, align 8
- %tmp69 = fsub double %tmp67, %tmp68
- %tmp70 = load double, double* %max.0
- %tmp71 = load double, double* %min.0
- %tmp72 = fsub double %tmp70, %tmp71
- %tmp73 = fdiv double %tmp69, %tmp72
- %tmp74 = fadd double 4.000000e+00, %tmp73
- store double %tmp74, double* %outH
- br label %bb75
- bb75: ; preds = %bb66, %bb57, %bb47
- %tmp76 = load double, double* %outH
- %tmp77 = fdiv double %tmp76, 6.000000e+00
- store double %tmp77, double* %outH
- %tmp78 = fcmp olt double %tmp77, 0.000000e+00
- br i1 %tmp78, label %bb79, label %bb81
- bb79: ; preds = %bb75
- %tmp80 = fadd double %tmp77, 1.000000e+00
- store double %tmp80, double* %outH
- br label %bb81
- bb81: ; preds = %bb79, %bb75, %bb34
- ret void
- }
|