Dan Gohman | a2086b3 | 2010-05-19 23:43:12 +0000 | [diff] [blame] | 1 | ; RUN: llc -mtriple=thumbv7-apple-darwin10 -mcpu=cortex-a8 < %s | FileCheck %s |
| 2 | |
| 3 | ; LSR should recognize that this is an unrolled loop which can use |
| 4 | ; constant offset addressing, so that each of the following stores |
| 5 | ; uses the same register. |
| 6 | |
Evan Cheng | 529916c | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 7 | ; CHECK: vstr.32 s{{.*}}, [{{(r[0-9]+)|(lr)}}, #32] |
| 8 | ; CHECK: vstr.32 s{{.*}}, [{{(r[0-9]+)|(lr)}}, #64] |
| 9 | ; CHECK: vstr.32 s{{.*}}, [{{(r[0-9]+)|(lr)}}, #96] |
Dan Gohman | a2086b3 | 2010-05-19 23:43:12 +0000 | [diff] [blame] | 10 | |
| 11 | target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:32-f32:32:32-f64:32:32-v64:64:64-v128:128:128-a0:0:32-n32" |
| 12 | |
| 13 | %0 = type { %1*, %3*, %6*, i8*, i32, i32, %8*, i32, i32, i32, i32, i32, i32, i32, double, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i8**, i32, i32, i32, i32, i32, [64 x i32]*, [4 x %9*], [4 x %10*], [4 x %10*], i32, %11*, i32, i32, [16 x i8], [16 x i8], [16 x i8], i32, i32, i8, i8, i8, i16, i16, i32, i8, i32, %12*, i32, i32, i32, i32, i8*, i32, [4 x %11*], i32, i32, i32, [10 x i32], i32, i32, i32, i32, i32, %13*, %14*, %15*, %16*, %17*, %18*, %19*, %20*, %21*, %22*, %23* } |
| 14 | %1 = type { void (%2*)*, void (%2*, i32)*, void (%2*)*, void (%2*, i8*)*, void (%2*)*, i32, %7, i32, i32, i8**, i32, i8**, i32, i32 } |
| 15 | %2 = type { %1*, %3*, %6*, i8*, i32, i32 } |
| 16 | %3 = type { i8* (%2*, i32, i32)*, i8* (%2*, i32, i32)*, i8** (%2*, i32, i32, i32)*, [64 x i16]** (%2*, i32, i32, i32)*, %4* (%2*, i32, i32, i32, i32, i32)*, %5* (%2*, i32, i32, i32, i32, i32)*, void (%2*)*, i8** (%2*, %4*, i32, i32, i32)*, [64 x i16]** (%2*, %5*, i32, i32, i32)*, void (%2*, i32)*, void (%2*)*, i32, i32 } |
| 17 | %4 = type opaque |
| 18 | %5 = type opaque |
| 19 | %6 = type { void (%2*)*, i32, i32, i32, i32 } |
| 20 | %7 = type { [8 x i32], [12 x i32] } |
| 21 | %8 = type { i8*, i32, void (%0*)*, i32 (%0*)*, void (%0*, i32)*, i32 (%0*, i32)*, void (%0*)* } |
| 22 | %9 = type { [64 x i16], i32 } |
| 23 | %10 = type { [17 x i8], [256 x i8], i32 } |
| 24 | %11 = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, %9*, i8* } |
| 25 | %12 = type { %12*, i8, i32, i32, i8* } |
| 26 | %13 = type { void (%0*)*, void (%0*)*, i32 } |
| 27 | %14 = type { void (%0*, i32)*, void (%0*, i8**, i32*, i32)* } |
| 28 | %15 = type { void (%0*)*, i32 (%0*)*, void (%0*)*, i32 (%0*, i8***)*, %5** } |
| 29 | %16 = type { void (%0*, i32)*, void (%0*, i8***, i32*, i32, i8**, i32*, i32)* } |
| 30 | %17 = type { i32 (%0*)*, void (%0*)*, void (%0*)*, void (%0*)*, i32, i32 } |
| 31 | %18 = type { void (%0*)*, i32 (%0*)*, i32 (%0*)*, i32, i32, i32, i32 } |
| 32 | %19 = type { void (%0*)*, i32 (%0*, [64 x i16]**)*, i32 } |
| 33 | %20 = type { void (%0*)*, [10 x void (%0*, %11*, i16*, i8**, i32)*] } |
| 34 | %21 = type { void (%0*)*, void (%0*, i8***, i32*, i32, i8**, i32*, i32)*, i32 } |
| 35 | %22 = type { void (%0*)*, void (%0*, i8***, i32, i8**, i32)* } |
| 36 | %23 = type { void (%0*, i32)*, void (%0*, i8**, i8**, i32)*, void (%0*)*, void (%0*)* } |
| 37 | |
Rafael Espindola | 1e81966 | 2010-06-17 15:18:27 +0000 | [diff] [blame] | 38 | define void @test(%0* nocapture %a0, %11* nocapture %a1, i16* nocapture %a2, i8** nocapture %a3, i32 %a4) nounwind { |
Dan Gohman | a2086b3 | 2010-05-19 23:43:12 +0000 | [diff] [blame] | 39 | bb: |
| 40 | %t = alloca [64 x float], align 4 |
| 41 | %t5 = getelementptr inbounds %0* %a0, i32 0, i32 65 |
| 42 | %t6 = load i8** %t5, align 4 |
| 43 | %t7 = getelementptr inbounds %11* %a1, i32 0, i32 20 |
| 44 | %t8 = load i8** %t7, align 4 |
| 45 | br label %bb9 |
| 46 | |
| 47 | bb9: |
| 48 | %t10 = phi i32 [ 0, %bb ], [ %t157, %bb156 ] |
| 49 | %t11 = add i32 %t10, 8 |
| 50 | %t12 = getelementptr [64 x float]* %t, i32 0, i32 %t11 |
| 51 | %t13 = add i32 %t10, 16 |
| 52 | %t14 = getelementptr [64 x float]* %t, i32 0, i32 %t13 |
| 53 | %t15 = add i32 %t10, 24 |
| 54 | %t16 = getelementptr [64 x float]* %t, i32 0, i32 %t15 |
| 55 | %t17 = add i32 %t10, 32 |
| 56 | %t18 = getelementptr [64 x float]* %t, i32 0, i32 %t17 |
| 57 | %t19 = add i32 %t10, 40 |
| 58 | %t20 = getelementptr [64 x float]* %t, i32 0, i32 %t19 |
| 59 | %t21 = add i32 %t10, 48 |
| 60 | %t22 = getelementptr [64 x float]* %t, i32 0, i32 %t21 |
| 61 | %t23 = add i32 %t10, 56 |
| 62 | %t24 = getelementptr [64 x float]* %t, i32 0, i32 %t23 |
| 63 | %t25 = getelementptr [64 x float]* %t, i32 0, i32 %t10 |
| 64 | %t26 = shl i32 %t10, 5 |
| 65 | %t27 = or i32 %t26, 8 |
| 66 | %t28 = getelementptr i8* %t8, i32 %t27 |
| 67 | %t29 = bitcast i8* %t28 to float* |
| 68 | %t30 = or i32 %t26, 16 |
| 69 | %t31 = getelementptr i8* %t8, i32 %t30 |
| 70 | %t32 = bitcast i8* %t31 to float* |
| 71 | %t33 = or i32 %t26, 24 |
| 72 | %t34 = getelementptr i8* %t8, i32 %t33 |
| 73 | %t35 = bitcast i8* %t34 to float* |
| 74 | %t36 = or i32 %t26, 4 |
| 75 | %t37 = getelementptr i8* %t8, i32 %t36 |
| 76 | %t38 = bitcast i8* %t37 to float* |
| 77 | %t39 = or i32 %t26, 12 |
| 78 | %t40 = getelementptr i8* %t8, i32 %t39 |
| 79 | %t41 = bitcast i8* %t40 to float* |
| 80 | %t42 = or i32 %t26, 20 |
| 81 | %t43 = getelementptr i8* %t8, i32 %t42 |
| 82 | %t44 = bitcast i8* %t43 to float* |
| 83 | %t45 = or i32 %t26, 28 |
| 84 | %t46 = getelementptr i8* %t8, i32 %t45 |
| 85 | %t47 = bitcast i8* %t46 to float* |
| 86 | %t48 = getelementptr i8* %t8, i32 %t26 |
| 87 | %t49 = bitcast i8* %t48 to float* |
| 88 | %t50 = shl i32 %t10, 3 |
| 89 | %t51 = or i32 %t50, 1 |
| 90 | %t52 = getelementptr i16* %a2, i32 %t51 |
| 91 | %t53 = or i32 %t50, 2 |
| 92 | %t54 = getelementptr i16* %a2, i32 %t53 |
| 93 | %t55 = or i32 %t50, 3 |
| 94 | %t56 = getelementptr i16* %a2, i32 %t55 |
| 95 | %t57 = or i32 %t50, 4 |
| 96 | %t58 = getelementptr i16* %a2, i32 %t57 |
| 97 | %t59 = or i32 %t50, 5 |
| 98 | %t60 = getelementptr i16* %a2, i32 %t59 |
| 99 | %t61 = or i32 %t50, 6 |
| 100 | %t62 = getelementptr i16* %a2, i32 %t61 |
| 101 | %t63 = or i32 %t50, 7 |
| 102 | %t64 = getelementptr i16* %a2, i32 %t63 |
| 103 | %t65 = getelementptr i16* %a2, i32 %t50 |
| 104 | %t66 = load i16* %t52, align 2 |
| 105 | %t67 = icmp eq i16 %t66, 0 |
| 106 | %t68 = load i16* %t54, align 2 |
| 107 | %t69 = icmp eq i16 %t68, 0 |
| 108 | %t70 = and i1 %t67, %t69 |
| 109 | br i1 %t70, label %bb71, label %bb91 |
| 110 | |
| 111 | bb71: |
| 112 | %t72 = load i16* %t56, align 2 |
| 113 | %t73 = icmp eq i16 %t72, 0 |
| 114 | br i1 %t73, label %bb74, label %bb91 |
| 115 | |
| 116 | bb74: |
| 117 | %t75 = load i16* %t58, align 2 |
| 118 | %t76 = icmp eq i16 %t75, 0 |
| 119 | br i1 %t76, label %bb77, label %bb91 |
| 120 | |
| 121 | bb77: |
| 122 | %t78 = load i16* %t60, align 2 |
| 123 | %t79 = icmp eq i16 %t78, 0 |
| 124 | br i1 %t79, label %bb80, label %bb91 |
| 125 | |
| 126 | bb80: |
| 127 | %t81 = load i16* %t62, align 2 |
| 128 | %t82 = icmp eq i16 %t81, 0 |
| 129 | br i1 %t82, label %bb83, label %bb91 |
| 130 | |
| 131 | bb83: |
| 132 | %t84 = load i16* %t64, align 2 |
| 133 | %t85 = icmp eq i16 %t84, 0 |
| 134 | br i1 %t85, label %bb86, label %bb91 |
| 135 | |
| 136 | bb86: |
| 137 | %t87 = load i16* %t65, align 2 |
| 138 | %t88 = sitofp i16 %t87 to float |
| 139 | %t89 = load float* %t49, align 4 |
| 140 | %t90 = fmul float %t88, %t89 |
| 141 | store float %t90, float* %t25, align 4 |
| 142 | store float %t90, float* %t12, align 4 |
| 143 | store float %t90, float* %t14, align 4 |
| 144 | store float %t90, float* %t16, align 4 |
| 145 | store float %t90, float* %t18, align 4 |
| 146 | store float %t90, float* %t20, align 4 |
| 147 | store float %t90, float* %t22, align 4 |
| 148 | store float %t90, float* %t24, align 4 |
| 149 | br label %bb156 |
| 150 | |
| 151 | bb91: |
| 152 | %t92 = load i16* %t65, align 2 |
| 153 | %t93 = sitofp i16 %t92 to float |
| 154 | %t94 = load float* %t49, align 4 |
| 155 | %t95 = fmul float %t93, %t94 |
| 156 | %t96 = sitofp i16 %t68 to float |
| 157 | %t97 = load float* %t29, align 4 |
| 158 | %t98 = fmul float %t96, %t97 |
| 159 | %t99 = load i16* %t58, align 2 |
| 160 | %t100 = sitofp i16 %t99 to float |
| 161 | %t101 = load float* %t32, align 4 |
| 162 | %t102 = fmul float %t100, %t101 |
| 163 | %t103 = load i16* %t62, align 2 |
| 164 | %t104 = sitofp i16 %t103 to float |
| 165 | %t105 = load float* %t35, align 4 |
| 166 | %t106 = fmul float %t104, %t105 |
| 167 | %t107 = fadd float %t95, %t102 |
| 168 | %t108 = fsub float %t95, %t102 |
| 169 | %t109 = fadd float %t98, %t106 |
| 170 | %t110 = fsub float %t98, %t106 |
| 171 | %t111 = fmul float %t110, 0x3FF6A09E60000000 |
| 172 | %t112 = fsub float %t111, %t109 |
| 173 | %t113 = fadd float %t107, %t109 |
| 174 | %t114 = fsub float %t107, %t109 |
| 175 | %t115 = fadd float %t108, %t112 |
| 176 | %t116 = fsub float %t108, %t112 |
| 177 | %t117 = sitofp i16 %t66 to float |
| 178 | %t118 = load float* %t38, align 4 |
| 179 | %t119 = fmul float %t117, %t118 |
| 180 | %t120 = load i16* %t56, align 2 |
| 181 | %t121 = sitofp i16 %t120 to float |
| 182 | %t122 = load float* %t41, align 4 |
| 183 | %t123 = fmul float %t121, %t122 |
| 184 | %t124 = load i16* %t60, align 2 |
| 185 | %t125 = sitofp i16 %t124 to float |
| 186 | %t126 = load float* %t44, align 4 |
| 187 | %t127 = fmul float %t125, %t126 |
| 188 | %t128 = load i16* %t64, align 2 |
| 189 | %t129 = sitofp i16 %t128 to float |
| 190 | %t130 = load float* %t47, align 4 |
| 191 | %t131 = fmul float %t129, %t130 |
| 192 | %t132 = fadd float %t127, %t123 |
| 193 | %t133 = fsub float %t127, %t123 |
| 194 | %t134 = fadd float %t119, %t131 |
| 195 | %t135 = fsub float %t119, %t131 |
| 196 | %t136 = fadd float %t134, %t132 |
| 197 | %t137 = fsub float %t134, %t132 |
| 198 | %t138 = fmul float %t137, 0x3FF6A09E60000000 |
| 199 | %t139 = fadd float %t133, %t135 |
| 200 | %t140 = fmul float %t139, 0x3FFD906BC0000000 |
| 201 | %t141 = fmul float %t135, 0x3FF1517A80000000 |
| 202 | %t142 = fsub float %t141, %t140 |
| 203 | %t143 = fmul float %t133, 0xC004E7AEA0000000 |
| 204 | %t144 = fadd float %t143, %t140 |
| 205 | %t145 = fsub float %t144, %t136 |
| 206 | %t146 = fsub float %t138, %t145 |
| 207 | %t147 = fadd float %t142, %t146 |
| 208 | %t148 = fadd float %t113, %t136 |
| 209 | store float %t148, float* %t25, align 4 |
| 210 | %t149 = fsub float %t113, %t136 |
| 211 | store float %t149, float* %t24, align 4 |
| 212 | %t150 = fadd float %t115, %t145 |
| 213 | store float %t150, float* %t12, align 4 |
| 214 | %t151 = fsub float %t115, %t145 |
| 215 | store float %t151, float* %t22, align 4 |
| 216 | %t152 = fadd float %t116, %t146 |
| 217 | store float %t152, float* %t14, align 4 |
| 218 | %t153 = fsub float %t116, %t146 |
| 219 | store float %t153, float* %t20, align 4 |
| 220 | %t154 = fadd float %t114, %t147 |
| 221 | store float %t154, float* %t18, align 4 |
| 222 | %t155 = fsub float %t114, %t147 |
| 223 | store float %t155, float* %t16, align 4 |
| 224 | br label %bb156 |
| 225 | |
| 226 | bb156: |
| 227 | %t157 = add i32 %t10, 1 |
| 228 | %t158 = icmp eq i32 %t157, 8 |
| 229 | br i1 %t158, label %bb159, label %bb9 |
| 230 | |
| 231 | bb159: |
| 232 | %t160 = add i32 %a4, 7 |
| 233 | %t161 = add i32 %a4, 1 |
| 234 | %t162 = add i32 %a4, 6 |
| 235 | %t163 = add i32 %a4, 2 |
| 236 | %t164 = add i32 %a4, 5 |
| 237 | %t165 = add i32 %a4, 4 |
| 238 | %t166 = add i32 %a4, 3 |
| 239 | br label %bb167 |
| 240 | |
| 241 | bb167: |
| 242 | %t168 = phi i32 [ 0, %bb159 ], [ %t293, %bb167 ] |
| 243 | %t169 = getelementptr i8** %a3, i32 %t168 |
| 244 | %t170 = shl i32 %t168, 3 |
| 245 | %t171 = or i32 %t170, 4 |
| 246 | %t172 = getelementptr [64 x float]* %t, i32 0, i32 %t171 |
| 247 | %t173 = or i32 %t170, 2 |
| 248 | %t174 = getelementptr [64 x float]* %t, i32 0, i32 %t173 |
| 249 | %t175 = or i32 %t170, 6 |
| 250 | %t176 = getelementptr [64 x float]* %t, i32 0, i32 %t175 |
| 251 | %t177 = or i32 %t170, 5 |
| 252 | %t178 = getelementptr [64 x float]* %t, i32 0, i32 %t177 |
| 253 | %t179 = or i32 %t170, 3 |
| 254 | %t180 = getelementptr [64 x float]* %t, i32 0, i32 %t179 |
| 255 | %t181 = or i32 %t170, 1 |
| 256 | %t182 = getelementptr [64 x float]* %t, i32 0, i32 %t181 |
| 257 | %t183 = or i32 %t170, 7 |
| 258 | %t184 = getelementptr [64 x float]* %t, i32 0, i32 %t183 |
| 259 | %t185 = getelementptr [64 x float]* %t, i32 0, i32 %t170 |
| 260 | %t186 = load i8** %t169, align 4 |
| 261 | %t187 = getelementptr inbounds i8* %t186, i32 %a4 |
| 262 | %t188 = load float* %t185, align 4 |
| 263 | %t189 = load float* %t172, align 4 |
| 264 | %t190 = fadd float %t188, %t189 |
| 265 | %t191 = fsub float %t188, %t189 |
| 266 | %t192 = load float* %t174, align 4 |
| 267 | %t193 = load float* %t176, align 4 |
| 268 | %t194 = fadd float %t192, %t193 |
| 269 | %t195 = fsub float %t192, %t193 |
| 270 | %t196 = fmul float %t195, 0x3FF6A09E60000000 |
| 271 | %t197 = fsub float %t196, %t194 |
| 272 | %t198 = fadd float %t190, %t194 |
| 273 | %t199 = fsub float %t190, %t194 |
| 274 | %t200 = fadd float %t191, %t197 |
| 275 | %t201 = fsub float %t191, %t197 |
| 276 | %t202 = load float* %t178, align 4 |
| 277 | %t203 = load float* %t180, align 4 |
| 278 | %t204 = fadd float %t202, %t203 |
| 279 | %t205 = fsub float %t202, %t203 |
| 280 | %t206 = load float* %t182, align 4 |
| 281 | %t207 = load float* %t184, align 4 |
| 282 | %t208 = fadd float %t206, %t207 |
| 283 | %t209 = fsub float %t206, %t207 |
| 284 | %t210 = fadd float %t208, %t204 |
| 285 | %t211 = fsub float %t208, %t204 |
| 286 | %t212 = fmul float %t211, 0x3FF6A09E60000000 |
| 287 | %t213 = fadd float %t205, %t209 |
| 288 | %t214 = fmul float %t213, 0x3FFD906BC0000000 |
| 289 | %t215 = fmul float %t209, 0x3FF1517A80000000 |
| 290 | %t216 = fsub float %t215, %t214 |
| 291 | %t217 = fmul float %t205, 0xC004E7AEA0000000 |
| 292 | %t218 = fadd float %t217, %t214 |
| 293 | %t219 = fsub float %t218, %t210 |
| 294 | %t220 = fsub float %t212, %t219 |
| 295 | %t221 = fadd float %t216, %t220 |
| 296 | %t222 = fadd float %t198, %t210 |
| 297 | %t223 = fptosi float %t222 to i32 |
| 298 | %t224 = add nsw i32 %t223, 4 |
| 299 | %t225 = lshr i32 %t224, 3 |
| 300 | %t226 = and i32 %t225, 1023 |
| 301 | %t227 = add i32 %t226, 128 |
| 302 | %t228 = getelementptr inbounds i8* %t6, i32 %t227 |
| 303 | %t229 = load i8* %t228, align 1 |
| 304 | store i8 %t229, i8* %t187, align 1 |
| 305 | %t230 = fsub float %t198, %t210 |
| 306 | %t231 = fptosi float %t230 to i32 |
| 307 | %t232 = add nsw i32 %t231, 4 |
| 308 | %t233 = lshr i32 %t232, 3 |
| 309 | %t234 = and i32 %t233, 1023 |
| 310 | %t235 = add i32 %t234, 128 |
| 311 | %t236 = getelementptr inbounds i8* %t6, i32 %t235 |
| 312 | %t237 = load i8* %t236, align 1 |
| 313 | %t238 = getelementptr inbounds i8* %t186, i32 %t160 |
| 314 | store i8 %t237, i8* %t238, align 1 |
| 315 | %t239 = fadd float %t200, %t219 |
| 316 | %t240 = fptosi float %t239 to i32 |
| 317 | %t241 = add nsw i32 %t240, 4 |
| 318 | %t242 = lshr i32 %t241, 3 |
| 319 | %t243 = and i32 %t242, 1023 |
| 320 | %t244 = add i32 %t243, 128 |
| 321 | %t245 = getelementptr inbounds i8* %t6, i32 %t244 |
| 322 | %t246 = load i8* %t245, align 1 |
| 323 | %t247 = getelementptr inbounds i8* %t186, i32 %t161 |
| 324 | store i8 %t246, i8* %t247, align 1 |
| 325 | %t248 = fsub float %t200, %t219 |
| 326 | %t249 = fptosi float %t248 to i32 |
| 327 | %t250 = add nsw i32 %t249, 4 |
| 328 | %t251 = lshr i32 %t250, 3 |
| 329 | %t252 = and i32 %t251, 1023 |
| 330 | %t253 = add i32 %t252, 128 |
| 331 | %t254 = getelementptr inbounds i8* %t6, i32 %t253 |
| 332 | %t255 = load i8* %t254, align 1 |
| 333 | %t256 = getelementptr inbounds i8* %t186, i32 %t162 |
| 334 | store i8 %t255, i8* %t256, align 1 |
| 335 | %t257 = fadd float %t201, %t220 |
| 336 | %t258 = fptosi float %t257 to i32 |
| 337 | %t259 = add nsw i32 %t258, 4 |
| 338 | %t260 = lshr i32 %t259, 3 |
| 339 | %t261 = and i32 %t260, 1023 |
| 340 | %t262 = add i32 %t261, 128 |
| 341 | %t263 = getelementptr inbounds i8* %t6, i32 %t262 |
| 342 | %t264 = load i8* %t263, align 1 |
| 343 | %t265 = getelementptr inbounds i8* %t186, i32 %t163 |
| 344 | store i8 %t264, i8* %t265, align 1 |
| 345 | %t266 = fsub float %t201, %t220 |
| 346 | %t267 = fptosi float %t266 to i32 |
| 347 | %t268 = add nsw i32 %t267, 4 |
| 348 | %t269 = lshr i32 %t268, 3 |
| 349 | %t270 = and i32 %t269, 1023 |
| 350 | %t271 = add i32 %t270, 128 |
| 351 | %t272 = getelementptr inbounds i8* %t6, i32 %t271 |
| 352 | %t273 = load i8* %t272, align 1 |
| 353 | %t274 = getelementptr inbounds i8* %t186, i32 %t164 |
| 354 | store i8 %t273, i8* %t274, align 1 |
| 355 | %t275 = fadd float %t199, %t221 |
| 356 | %t276 = fptosi float %t275 to i32 |
| 357 | %t277 = add nsw i32 %t276, 4 |
| 358 | %t278 = lshr i32 %t277, 3 |
| 359 | %t279 = and i32 %t278, 1023 |
| 360 | %t280 = add i32 %t279, 128 |
| 361 | %t281 = getelementptr inbounds i8* %t6, i32 %t280 |
| 362 | %t282 = load i8* %t281, align 1 |
| 363 | %t283 = getelementptr inbounds i8* %t186, i32 %t165 |
| 364 | store i8 %t282, i8* %t283, align 1 |
| 365 | %t284 = fsub float %t199, %t221 |
| 366 | %t285 = fptosi float %t284 to i32 |
| 367 | %t286 = add nsw i32 %t285, 4 |
| 368 | %t287 = lshr i32 %t286, 3 |
| 369 | %t288 = and i32 %t287, 1023 |
| 370 | %t289 = add i32 %t288, 128 |
| 371 | %t290 = getelementptr inbounds i8* %t6, i32 %t289 |
| 372 | %t291 = load i8* %t290, align 1 |
| 373 | %t292 = getelementptr inbounds i8* %t186, i32 %t166 |
| 374 | store i8 %t291, i8* %t292, align 1 |
| 375 | %t293 = add nsw i32 %t168, 1 |
| 376 | %t294 = icmp eq i32 %t293, 8 |
| 377 | br i1 %t294, label %bb295, label %bb167 |
| 378 | |
| 379 | bb295: |
| 380 | ret void |
| 381 | } |
Dan Gohman | f182b23 | 2010-05-20 19:26:52 +0000 | [diff] [blame] | 382 | |
| 383 | %struct.ct_data_s = type { %union.anon, %union.anon } |
| 384 | %struct.gz_header = type { i32, i32, i32, i32, i8*, i32, i32, i8*, i32, i8*, i32, i32, i32 } |
| 385 | %struct.internal_state = type { %struct.z_stream*, i32, i8*, i32, i8*, i32, i32, %struct.gz_header*, i32, i8, i32, i32, i32, i32, i8*, i32, i16*, i16*, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, [573 x %struct.ct_data_s], [61 x %struct.ct_data_s], [39 x %struct.ct_data_s], %struct.tree_desc_s, %struct.tree_desc_s, %struct.tree_desc_s, [16 x i16], [573 x i32], i32, i32, [573 x i8], i8*, i32, i32, i16*, i32, i32, i32, i32, i16, i32 } |
| 386 | %struct.static_tree_desc = type { i32 } |
| 387 | %struct.tree_desc_s = type { %struct.ct_data_s*, i32, %struct.static_tree_desc* } |
| 388 | %struct.z_stream = type { i8*, i32, i32, i8*, i32, i32, i8*, %struct.internal_state*, i8* (i8*, i32, i32)*, void (i8*, i8*)*, i8*, i32, i32, i32 } |
| 389 | %union.anon = type { i16 } |
| 390 | |
Rafael Espindola | 1e81966 | 2010-06-17 15:18:27 +0000 | [diff] [blame] | 391 | define i32 @longest_match(%struct.internal_state* %s, i32 %cur_match) nounwind optsize { |
Dan Gohman | f182b23 | 2010-05-20 19:26:52 +0000 | [diff] [blame] | 392 | entry: |
| 393 | %0 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 31 ; <i32*> [#uses=1] |
| 394 | %1 = load i32* %0, align 4 ; <i32> [#uses=2] |
| 395 | %2 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 14 ; <i8**> [#uses=1] |
| 396 | %3 = load i8** %2, align 4 ; <i8*> [#uses=27] |
| 397 | %4 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 27 ; <i32*> [#uses=1] |
| 398 | %5 = load i32* %4, align 4 ; <i32> [#uses=17] |
| 399 | %6 = getelementptr inbounds i8* %3, i32 %5 ; <i8*> [#uses=1] |
| 400 | %7 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 30 ; <i32*> [#uses=1] |
| 401 | %8 = load i32* %7, align 4 ; <i32> [#uses=4] |
| 402 | %9 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 36 ; <i32*> [#uses=1] |
| 403 | %10 = load i32* %9, align 4 ; <i32> [#uses=2] |
| 404 | %11 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 11 ; <i32*> [#uses=1] |
| 405 | %12 = load i32* %11, align 4 ; <i32> [#uses=2] |
| 406 | %13 = add i32 %12, -262 ; <i32> [#uses=1] |
| 407 | %14 = icmp ugt i32 %5, %13 ; <i1> [#uses=1] |
| 408 | br i1 %14, label %bb, label %bb2 |
| 409 | |
| 410 | bb: ; preds = %entry |
| 411 | %15 = add i32 %5, 262 ; <i32> [#uses=1] |
| 412 | %16 = sub i32 %15, %12 ; <i32> [#uses=1] |
| 413 | br label %bb2 |
| 414 | |
| 415 | bb2: ; preds = %bb, %entry |
| 416 | %iftmp.48.0 = phi i32 [ %16, %bb ], [ 0, %entry ] ; <i32> [#uses=1] |
| 417 | %17 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 16 ; <i16**> [#uses=1] |
| 418 | %18 = load i16** %17, align 4 ; <i16*> [#uses=1] |
| 419 | %19 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 13 ; <i32*> [#uses=1] |
| 420 | %20 = load i32* %19, align 4 ; <i32> [#uses=1] |
| 421 | %.sum = add i32 %5, 258 ; <i32> [#uses=2] |
| 422 | %21 = getelementptr inbounds i8* %3, i32 %.sum ; <i8*> [#uses=1] |
| 423 | %22 = add nsw i32 %5, -1 ; <i32> [#uses=1] |
| 424 | %.sum30 = add i32 %22, %8 ; <i32> [#uses=1] |
| 425 | %23 = getelementptr inbounds i8* %3, i32 %.sum30 ; <i8*> [#uses=1] |
| 426 | %24 = load i8* %23, align 1 ; <i8> [#uses=1] |
| 427 | %.sum31 = add i32 %8, %5 ; <i32> [#uses=1] |
| 428 | %25 = getelementptr inbounds i8* %3, i32 %.sum31 ; <i8*> [#uses=1] |
| 429 | %26 = load i8* %25, align 1 ; <i8> [#uses=1] |
| 430 | %27 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 35 ; <i32*> [#uses=1] |
| 431 | %28 = load i32* %27, align 4 ; <i32> [#uses=1] |
| 432 | %29 = lshr i32 %1, 2 ; <i32> [#uses=1] |
| 433 | %30 = icmp ult i32 %8, %28 ; <i1> [#uses=1] |
| 434 | %. = select i1 %30, i32 %1, i32 %29 ; <i32> [#uses=1] |
| 435 | %31 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 29 ; <i32*> [#uses=1] |
| 436 | %32 = load i32* %31, align 4 ; <i32> [#uses=4] |
| 437 | %33 = icmp ugt i32 %10, %32 ; <i1> [#uses=1] |
| 438 | %nice_match.0.ph = select i1 %33, i32 %32, i32 %10 ; <i32> [#uses=1] |
| 439 | %34 = getelementptr inbounds %struct.internal_state* %s, i32 0, i32 28 ; <i32*> [#uses=1] |
| 440 | %35 = ptrtoint i8* %21 to i32 ; <i32> [#uses=1] |
| 441 | %36 = add nsw i32 %5, 257 ; <i32> [#uses=1] |
| 442 | %tmp81 = add i32 %., -1 ; <i32> [#uses=1] |
| 443 | br label %bb6 |
| 444 | |
| 445 | bb6: ; preds = %bb24, %bb2 |
| 446 | %indvar78 = phi i32 [ 0, %bb2 ], [ %indvar.next79, %bb24 ] ; <i32> [#uses=2] |
| 447 | %best_len.2 = phi i32 [ %8, %bb2 ], [ %best_len.0, %bb24 ] ; <i32> [#uses=8] |
| 448 | %scan_end1.1 = phi i8 [ %24, %bb2 ], [ %scan_end1.0, %bb24 ] ; <i8> [#uses=6] |
| 449 | %cur_match_addr.0 = phi i32 [ %cur_match, %bb2 ], [ %90, %bb24 ] ; <i32> [#uses=14] |
| 450 | %scan_end.1 = phi i8 [ %26, %bb2 ], [ %scan_end.0, %bb24 ] ; <i8> [#uses=6] |
| 451 | %37 = getelementptr inbounds i8* %3, i32 %cur_match_addr.0 ; <i8*> [#uses=1] |
| 452 | %.sum32 = add i32 %cur_match_addr.0, %best_len.2 ; <i32> [#uses=1] |
| 453 | %38 = getelementptr inbounds i8* %3, i32 %.sum32 ; <i8*> [#uses=1] |
| 454 | %39 = load i8* %38, align 1 ; <i8> [#uses=1] |
| 455 | %40 = icmp eq i8 %39, %scan_end.1 ; <i1> [#uses=1] |
| 456 | br i1 %40, label %bb7, label %bb23 |
| 457 | |
| 458 | bb7: ; preds = %bb6 |
| 459 | %41 = add nsw i32 %best_len.2, -1 ; <i32> [#uses=1] |
| 460 | %.sum33 = add i32 %41, %cur_match_addr.0 ; <i32> [#uses=1] |
| 461 | %42 = getelementptr inbounds i8* %3, i32 %.sum33 ; <i8*> [#uses=1] |
| 462 | %43 = load i8* %42, align 1 ; <i8> [#uses=1] |
| 463 | %44 = icmp eq i8 %43, %scan_end1.1 ; <i1> [#uses=1] |
| 464 | br i1 %44, label %bb8, label %bb23 |
| 465 | |
| 466 | bb8: ; preds = %bb7 |
| 467 | %45 = load i8* %37, align 1 ; <i8> [#uses=1] |
| 468 | %46 = load i8* %6, align 1 ; <i8> [#uses=1] |
| 469 | %47 = icmp eq i8 %45, %46 ; <i1> [#uses=1] |
| 470 | br i1 %47, label %bb9, label %bb23 |
| 471 | |
| 472 | bb9: ; preds = %bb8 |
| 473 | %.sum34 = add i32 %cur_match_addr.0, 1 ; <i32> [#uses=1] |
| 474 | %48 = getelementptr inbounds i8* %3, i32 %.sum34 ; <i8*> [#uses=1] |
| 475 | %49 = load i8* %48, align 1 ; <i8> [#uses=1] |
| 476 | %.sum88 = add i32 %5, 1 ; <i32> [#uses=1] |
| 477 | %50 = getelementptr inbounds i8* %3, i32 %.sum88 ; <i8*> [#uses=1] |
| 478 | %51 = load i8* %50, align 1 ; <i8> [#uses=1] |
| 479 | %52 = icmp eq i8 %49, %51 ; <i1> [#uses=1] |
| 480 | br i1 %52, label %bb10, label %bb23 |
| 481 | |
| 482 | bb10: ; preds = %bb9 |
| 483 | %tmp39 = add i32 %cur_match_addr.0, 10 ; <i32> [#uses=1] |
| 484 | %tmp41 = add i32 %cur_match_addr.0, 9 ; <i32> [#uses=1] |
| 485 | %tmp44 = add i32 %cur_match_addr.0, 8 ; <i32> [#uses=1] |
| 486 | %tmp47 = add i32 %cur_match_addr.0, 7 ; <i32> [#uses=1] |
| 487 | %tmp50 = add i32 %cur_match_addr.0, 6 ; <i32> [#uses=1] |
| 488 | %tmp53 = add i32 %cur_match_addr.0, 5 ; <i32> [#uses=1] |
| 489 | %tmp56 = add i32 %cur_match_addr.0, 4 ; <i32> [#uses=1] |
| 490 | %tmp59 = add i32 %cur_match_addr.0, 3 ; <i32> [#uses=1] |
| 491 | br label %bb11 |
| 492 | |
| 493 | bb11: ; preds = %bb18, %bb10 |
| 494 | %indvar = phi i32 [ %indvar.next, %bb18 ], [ 0, %bb10 ] ; <i32> [#uses=2] |
| 495 | %tmp = shl i32 %indvar, 3 ; <i32> [#uses=16] |
| 496 | %tmp40 = add i32 %tmp39, %tmp ; <i32> [#uses=1] |
| 497 | %scevgep = getelementptr i8* %3, i32 %tmp40 ; <i8*> [#uses=1] |
| 498 | %tmp42 = add i32 %tmp41, %tmp ; <i32> [#uses=1] |
| 499 | %scevgep43 = getelementptr i8* %3, i32 %tmp42 ; <i8*> [#uses=1] |
| 500 | %tmp45 = add i32 %tmp44, %tmp ; <i32> [#uses=1] |
| 501 | %scevgep46 = getelementptr i8* %3, i32 %tmp45 ; <i8*> [#uses=1] |
| 502 | %tmp48 = add i32 %tmp47, %tmp ; <i32> [#uses=1] |
| 503 | %scevgep49 = getelementptr i8* %3, i32 %tmp48 ; <i8*> [#uses=1] |
| 504 | %tmp51 = add i32 %tmp50, %tmp ; <i32> [#uses=1] |
| 505 | %scevgep52 = getelementptr i8* %3, i32 %tmp51 ; <i8*> [#uses=1] |
| 506 | %tmp54 = add i32 %tmp53, %tmp ; <i32> [#uses=1] |
| 507 | %scevgep55 = getelementptr i8* %3, i32 %tmp54 ; <i8*> [#uses=1] |
| 508 | %tmp60 = add i32 %tmp59, %tmp ; <i32> [#uses=1] |
| 509 | %scevgep61 = getelementptr i8* %3, i32 %tmp60 ; <i8*> [#uses=1] |
| 510 | %tmp62 = add i32 %tmp, 10 ; <i32> [#uses=1] |
| 511 | %.sum89 = add i32 %5, %tmp62 ; <i32> [#uses=2] |
| 512 | %scevgep63 = getelementptr i8* %3, i32 %.sum89 ; <i8*> [#uses=2] |
| 513 | %tmp64 = add i32 %tmp, 9 ; <i32> [#uses=1] |
| 514 | %.sum90 = add i32 %5, %tmp64 ; <i32> [#uses=1] |
| 515 | %scevgep65 = getelementptr i8* %3, i32 %.sum90 ; <i8*> [#uses=2] |
| 516 | %tmp66 = add i32 %tmp, 8 ; <i32> [#uses=1] |
| 517 | %.sum91 = add i32 %5, %tmp66 ; <i32> [#uses=1] |
| 518 | %scevgep67 = getelementptr i8* %3, i32 %.sum91 ; <i8*> [#uses=2] |
| 519 | %tmp6883 = or i32 %tmp, 7 ; <i32> [#uses=1] |
| 520 | %.sum92 = add i32 %5, %tmp6883 ; <i32> [#uses=1] |
| 521 | %scevgep69 = getelementptr i8* %3, i32 %.sum92 ; <i8*> [#uses=2] |
| 522 | %tmp7084 = or i32 %tmp, 6 ; <i32> [#uses=1] |
| 523 | %.sum93 = add i32 %5, %tmp7084 ; <i32> [#uses=1] |
| 524 | %scevgep71 = getelementptr i8* %3, i32 %.sum93 ; <i8*> [#uses=2] |
| 525 | %tmp7285 = or i32 %tmp, 5 ; <i32> [#uses=1] |
| 526 | %.sum94 = add i32 %5, %tmp7285 ; <i32> [#uses=1] |
| 527 | %scevgep73 = getelementptr i8* %3, i32 %.sum94 ; <i8*> [#uses=2] |
| 528 | %tmp7486 = or i32 %tmp, 4 ; <i32> [#uses=1] |
| 529 | %.sum95 = add i32 %5, %tmp7486 ; <i32> [#uses=1] |
| 530 | %scevgep75 = getelementptr i8* %3, i32 %.sum95 ; <i8*> [#uses=2] |
| 531 | %tmp7687 = or i32 %tmp, 3 ; <i32> [#uses=1] |
| 532 | %.sum96 = add i32 %5, %tmp7687 ; <i32> [#uses=1] |
| 533 | %scevgep77 = getelementptr i8* %3, i32 %.sum96 ; <i8*> [#uses=2] |
| 534 | %53 = load i8* %scevgep77, align 1 ; <i8> [#uses=1] |
| 535 | %54 = load i8* %scevgep61, align 1 ; <i8> [#uses=1] |
| 536 | %55 = icmp eq i8 %53, %54 ; <i1> [#uses=1] |
| 537 | br i1 %55, label %bb12, label %bb20 |
| 538 | |
| 539 | bb12: ; preds = %bb11 |
| 540 | %tmp57 = add i32 %tmp56, %tmp ; <i32> [#uses=1] |
| 541 | %scevgep58 = getelementptr i8* %3, i32 %tmp57 ; <i8*> [#uses=1] |
| 542 | %56 = load i8* %scevgep75, align 1 ; <i8> [#uses=1] |
| 543 | %57 = load i8* %scevgep58, align 1 ; <i8> [#uses=1] |
| 544 | %58 = icmp eq i8 %56, %57 ; <i1> [#uses=1] |
| 545 | br i1 %58, label %bb13, label %bb20 |
| 546 | |
| 547 | bb13: ; preds = %bb12 |
| 548 | %59 = load i8* %scevgep73, align 1 ; <i8> [#uses=1] |
| 549 | %60 = load i8* %scevgep55, align 1 ; <i8> [#uses=1] |
| 550 | %61 = icmp eq i8 %59, %60 ; <i1> [#uses=1] |
| 551 | br i1 %61, label %bb14, label %bb20 |
| 552 | |
| 553 | bb14: ; preds = %bb13 |
| 554 | %62 = load i8* %scevgep71, align 1 ; <i8> [#uses=1] |
| 555 | %63 = load i8* %scevgep52, align 1 ; <i8> [#uses=1] |
| 556 | %64 = icmp eq i8 %62, %63 ; <i1> [#uses=1] |
| 557 | br i1 %64, label %bb15, label %bb20 |
| 558 | |
| 559 | bb15: ; preds = %bb14 |
| 560 | %65 = load i8* %scevgep69, align 1 ; <i8> [#uses=1] |
| 561 | %66 = load i8* %scevgep49, align 1 ; <i8> [#uses=1] |
| 562 | %67 = icmp eq i8 %65, %66 ; <i1> [#uses=1] |
| 563 | br i1 %67, label %bb16, label %bb20 |
| 564 | |
| 565 | bb16: ; preds = %bb15 |
| 566 | %68 = load i8* %scevgep67, align 1 ; <i8> [#uses=1] |
| 567 | %69 = load i8* %scevgep46, align 1 ; <i8> [#uses=1] |
| 568 | %70 = icmp eq i8 %68, %69 ; <i1> [#uses=1] |
| 569 | br i1 %70, label %bb17, label %bb20 |
| 570 | |
| 571 | bb17: ; preds = %bb16 |
| 572 | %71 = load i8* %scevgep65, align 1 ; <i8> [#uses=1] |
| 573 | %72 = load i8* %scevgep43, align 1 ; <i8> [#uses=1] |
| 574 | %73 = icmp eq i8 %71, %72 ; <i1> [#uses=1] |
| 575 | br i1 %73, label %bb18, label %bb20 |
| 576 | |
| 577 | bb18: ; preds = %bb17 |
| 578 | %74 = load i8* %scevgep63, align 1 ; <i8> [#uses=1] |
| 579 | %75 = load i8* %scevgep, align 1 ; <i8> [#uses=1] |
| 580 | %76 = icmp eq i8 %74, %75 ; <i1> [#uses=1] |
| 581 | %77 = icmp slt i32 %.sum89, %.sum ; <i1> [#uses=1] |
| 582 | %or.cond = and i1 %76, %77 ; <i1> [#uses=1] |
| 583 | %indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1] |
| 584 | br i1 %or.cond, label %bb11, label %bb20 |
| 585 | |
| 586 | bb20: ; preds = %bb18, %bb17, %bb16, %bb15, %bb14, %bb13, %bb12, %bb11 |
| 587 | %scan.3 = phi i8* [ %scevgep77, %bb11 ], [ %scevgep75, %bb12 ], [ %scevgep73, %bb13 ], [ %scevgep71, %bb14 ], [ %scevgep69, %bb15 ], [ %scevgep67, %bb16 ], [ %scevgep65, %bb17 ], [ %scevgep63, %bb18 ] ; <i8*> [#uses=1] |
| 588 | %78 = ptrtoint i8* %scan.3 to i32 ; <i32> [#uses=1] |
| 589 | %79 = sub nsw i32 %78, %35 ; <i32> [#uses=2] |
| 590 | %80 = add i32 %79, 258 ; <i32> [#uses=5] |
| 591 | %81 = icmp sgt i32 %80, %best_len.2 ; <i1> [#uses=1] |
| 592 | br i1 %81, label %bb21, label %bb23 |
| 593 | |
| 594 | bb21: ; preds = %bb20 |
| 595 | store i32 %cur_match_addr.0, i32* %34, align 4 |
| 596 | %82 = icmp slt i32 %80, %nice_match.0.ph ; <i1> [#uses=1] |
| 597 | br i1 %82, label %bb22, label %bb25 |
| 598 | |
| 599 | bb22: ; preds = %bb21 |
| 600 | %.sum37 = add i32 %36, %79 ; <i32> [#uses=1] |
| 601 | %83 = getelementptr inbounds i8* %3, i32 %.sum37 ; <i8*> [#uses=1] |
| 602 | %84 = load i8* %83, align 1 ; <i8> [#uses=1] |
| 603 | %.sum38 = add i32 %80, %5 ; <i32> [#uses=1] |
| 604 | %85 = getelementptr inbounds i8* %3, i32 %.sum38 ; <i8*> [#uses=1] |
| 605 | %86 = load i8* %85, align 1 ; <i8> [#uses=1] |
| 606 | br label %bb23 |
| 607 | |
| 608 | bb23: ; preds = %bb22, %bb20, %bb9, %bb8, %bb7, %bb6 |
| 609 | %best_len.0 = phi i32 [ %best_len.2, %bb6 ], [ %best_len.2, %bb7 ], [ %best_len.2, %bb8 ], [ %best_len.2, %bb9 ], [ %80, %bb22 ], [ %best_len.2, %bb20 ] ; <i32> [#uses=3] |
| 610 | %scan_end1.0 = phi i8 [ %scan_end1.1, %bb6 ], [ %scan_end1.1, %bb7 ], [ %scan_end1.1, %bb8 ], [ %scan_end1.1, %bb9 ], [ %84, %bb22 ], [ %scan_end1.1, %bb20 ] ; <i8> [#uses=1] |
| 611 | %scan_end.0 = phi i8 [ %scan_end.1, %bb6 ], [ %scan_end.1, %bb7 ], [ %scan_end.1, %bb8 ], [ %scan_end.1, %bb9 ], [ %86, %bb22 ], [ %scan_end.1, %bb20 ] ; <i8> [#uses=1] |
| 612 | %87 = and i32 %cur_match_addr.0, %20 ; <i32> [#uses=1] |
| 613 | %88 = getelementptr inbounds i16* %18, i32 %87 ; <i16*> [#uses=1] |
| 614 | %89 = load i16* %88, align 2 ; <i16> [#uses=1] |
| 615 | %90 = zext i16 %89 to i32 ; <i32> [#uses=2] |
| 616 | %91 = icmp ugt i32 %90, %iftmp.48.0 ; <i1> [#uses=1] |
| 617 | br i1 %91, label %bb24, label %bb25 |
| 618 | |
| 619 | bb24: ; preds = %bb23 |
| 620 | |
| 621 | ; LSR should use count-down iteration to avoid requiring the trip count |
Jakob Stoklund Olesen | 7eb589d | 2010-09-30 20:51:52 +0000 | [diff] [blame] | 622 | ; in a register. |
Dan Gohman | f182b23 | 2010-05-20 19:26:52 +0000 | [diff] [blame] | 623 | |
Bill Wendling | 4b72210 | 2010-06-23 23:00:16 +0000 | [diff] [blame] | 624 | ; CHECK: @ %bb24 |
Evan Cheng | 529916c | 2010-11-12 20:32:20 +0000 | [diff] [blame] | 625 | ; CHECK: subs{{.*}} {{(r[0-9]+)|(lr)}}, #1 |
Jakob Stoklund Olesen | 7eb589d | 2010-09-30 20:51:52 +0000 | [diff] [blame] | 626 | ; CHECK: bne.w |
Dan Gohman | f182b23 | 2010-05-20 19:26:52 +0000 | [diff] [blame] | 627 | |
| 628 | %92 = icmp eq i32 %tmp81, %indvar78 ; <i1> [#uses=1] |
| 629 | %indvar.next79 = add i32 %indvar78, 1 ; <i32> [#uses=1] |
| 630 | br i1 %92, label %bb25, label %bb6 |
| 631 | |
| 632 | bb25: ; preds = %bb24, %bb23, %bb21 |
| 633 | %best_len.1 = phi i32 [ %best_len.0, %bb23 ], [ %best_len.0, %bb24 ], [ %80, %bb21 ] ; <i32> [#uses=2] |
| 634 | %93 = icmp ugt i32 %best_len.1, %32 ; <i1> [#uses=1] |
| 635 | %merge = select i1 %93, i32 %32, i32 %best_len.1 ; <i32> [#uses=1] |
| 636 | ret i32 %merge |
| 637 | } |