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