Index: lib/Transforms/Scalar/LoopStrengthReduce.cpp =================================================================== --- lib/Transforms/Scalar/LoopStrengthReduce.cpp +++ lib/Transforms/Scalar/LoopStrengthReduce.cpp @@ -3485,7 +3485,16 @@ LU.AccessTy, InnerAddOps[0], Base.getNumRegs() > 1)) continue; - const SCEV *InnerSum = SE.getAddExpr(InnerAddOps); + // In case if InnerAddOps has a lot of operands, and if they are huge, SCEV + // may spend a really long time trying to simplify it. Here we compromise + // between the number of operands and depth of recursive simplification to + // be done for them. In most real cases, the starting Depth is effectively + // zero, and nothing changes for them. But in corner cases (with hundreds of + // operands in InnerAddOps) it may save us from being stalled. + // Function 'Depth = InnerAddOps.size() / 4' is chosen arbitrarily and may + // be reconsidered in future. + unsigned Depth = InnerAddOps.size() / 4; + const SCEV *InnerSum = SE.getAddExpr(InnerAddOps, SCEV::FlagAnyWrap, Depth); if (InnerSum->isZero()) continue; Formula F = Base; Index: test/Transforms/LoopStrengthReduce/2017-12-01-long_compilation_corner_case.ll =================================================================== --- /dev/null +++ test/Transforms/LoopStrengthReduce/2017-12-01-long_compilation_corner_case.ll @@ -0,0 +1,398 @@ +; RUN: opt < %s -loop-reduce -S | FileCheck %s + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128-ni:1" +target triple = "x86_64-unknown-linux-gnu" + +; Just make sure that this test can be compiled within reasonable timeframe. +; If it stalls, then we have an exponential behavior with huge SCEVs. + +define void @test(i8* %p) { + +; CHECK-LABEL: @test( + +entry: + %var.addr37 = getelementptr inbounds i8, i8* %p, i64 136 + %var.addr.typed38 = bitcast i8* %var.addr37 to i32* + %var39 = load i32, i32* %var.addr.typed38, align 4 + %var.addr115 = getelementptr inbounds i8, i8* %p, i64 392 + %var.addr.typed116 = bitcast i8* %var.addr115 to i32* + %var117 = load i32, i32* %var.addr.typed116, align 4 + %var.addr118 = getelementptr inbounds i8, i8* %p, i64 400 + %var.addr.typed119 = bitcast i8* %var.addr118 to i32* + %var120 = load i32, i32* %var.addr.typed119, align 4 + %var.addr130 = getelementptr inbounds i8, i8* %p, i64 432 + %var.addr.typed131 = bitcast i8* %var.addr130 to i32* + %var132 = load i32, i32* %var.addr.typed131, align 4 + %var.addr139 = getelementptr inbounds i8, i8* %p, i64 456 + %tmp0 = bitcast i8* %var.addr139 to i32* + %var1411 = load i32, i32* %tmp0, align 4 + %var.addr145 = getelementptr inbounds i8, i8* %p, i64 472 + %var.addr.typed146 = bitcast i8* %var.addr145 to i32* + %var147 = load i32, i32* %var.addr.typed146, align 4 + %var.addr148 = getelementptr inbounds i8, i8* %p, i64 488 + %var.addr.typed149 = bitcast i8* %var.addr148 to i64* + %var150 = load i64, i64* %var.addr.typed149, align 8 + %var.addr151 = getelementptr inbounds i8, i8* %p, i64 496 + %var.addr.typed152 = bitcast i8* %var.addr151 to i32* + %var153 = load i32, i32* %var.addr.typed152, align 4 + %var.addr154 = getelementptr inbounds i8, i8* %p, i64 512 + %var.addr.typed155 = bitcast i8* %var.addr154 to i64* + %var156 = load i64, i64* %var.addr.typed155, align 8 + %var.addr157 = getelementptr inbounds i8, i8* %p, i64 528 + %var.addr.typed158 = bitcast i8* %var.addr157 to i64* + %var159 = load i64, i64* %var.addr.typed158, align 8 + %var.addr160 = getelementptr inbounds i8, i8* %p, i64 536 + %var.addr.typed161 = bitcast i8* %var.addr160 to i32* + %var162 = load i32, i32* %var.addr.typed161, align 4 + %var.addr163 = getelementptr inbounds i8, i8* %p, i64 544 + %var.addr.typed164 = bitcast i8* %var.addr163 to i32* + %var165 = load i32, i32* %var.addr.typed164, align 4 + %var.addr169 = getelementptr inbounds i8, i8* %p, i64 568 + %tmp1 = bitcast i8* %var.addr169 to i64* + %var1712 = load i64, i64* %tmp1, align 8 + %var.addr172 = getelementptr inbounds i8, i8* %p, i64 584 + %var.addr.typed173 = bitcast i8* %var.addr172 to i64* + %var174 = load i64, i64* %var.addr.typed173, align 8 + %var.addr175 = getelementptr inbounds i8, i8* %p, i64 592 + %var.addr.typed176 = bitcast i8* %var.addr175 to i32* + %var177 = load i32, i32* %var.addr.typed176, align 4 + %var.addr178 = getelementptr inbounds i8, i8* %p, i64 600 + %var.addr.typed179 = bitcast i8* %var.addr178 to i32* + %var180 = load i32, i32* %var.addr.typed179, align 4 + %var.addr181 = getelementptr inbounds i8, i8* %p, i64 608 + %var.addr.typed182 = bitcast i8* %var.addr181 to i32* + %var183 = load i32, i32* %var.addr.typed182, align 4 + %var.addr184 = getelementptr inbounds i8, i8* %p, i64 616 + %tmp2 = bitcast i8* %var.addr184 to i32* + %var1863 = load i32, i32* %tmp2, align 4 + %var.addr187 = getelementptr inbounds i8, i8* %p, i64 632 + %var.addr.typed188 = bitcast i8* %var.addr187 to i64* + %var189 = load i64, i64* %var.addr.typed188, align 8 + %var.addr190 = getelementptr inbounds i8, i8* %p, i64 640 + %var.addr.typed191 = bitcast i8* %var.addr190 to i32* + %var192 = load i32, i32* %var.addr.typed191, align 4 + %var.addr193 = getelementptr inbounds i8, i8* %p, i64 656 + %var.addr.typed194 = bitcast i8* %var.addr193 to i64* + %var195 = load i64, i64* %var.addr.typed194, align 8 + %var.addr196 = getelementptr inbounds i8, i8* %p, i64 664 + %var.addr.typed197 = bitcast i8* %var.addr196 to i32* + %var198 = load i32, i32* %var.addr.typed197, align 4 + %var.addr199 = getelementptr inbounds i8, i8* %p, i64 680 + %var.addr.typed200 = bitcast i8* %var.addr199 to i64* + %var201 = load i64, i64* %var.addr.typed200, align 8 + %var.addr202 = getelementptr inbounds i8, i8* %p, i64 688 + %var.addr.typed203 = bitcast i8* %var.addr202 to i32* + %var204 = load i32, i32* %var.addr.typed203, align 4 + %var.addr205 = getelementptr inbounds i8, i8* %p, i64 696 + %var.addr.typed206 = bitcast i8* %var.addr205 to i32* + %var207 = load i32, i32* %var.addr.typed206, align 4 + %var.addr208 = getelementptr inbounds i8, i8* %p, i64 704 + %var.addr.typed209 = bitcast i8* %var.addr208 to i32* + %var210 = load i32, i32* %var.addr.typed209, align 4 + %var.addr211 = getelementptr inbounds i8, i8* %p, i64 720 + %tmp3 = bitcast i8* %var.addr211 to i64* + %var2134 = load i64, i64* %tmp3, align 8 + %var.addr217 = getelementptr inbounds i8, i8* %p, i64 736 + %tmp4 = bitcast i8* %var.addr217 to i32* + %var2195 = load i32, i32* %tmp4, align 4 + %var.addr220 = getelementptr inbounds i8, i8* %p, i64 744 + %var.addr.typed221 = bitcast i8* %var.addr220 to i32* + %var222 = load i32, i32* %var.addr.typed221, align 4 + %var.addr223 = getelementptr inbounds i8, i8* %p, i64 752 + %var.addr.typed224 = bitcast i8* %var.addr223 to i32* + %var225 = load i32, i32* %var.addr.typed224, align 4 + %var.addr226 = getelementptr inbounds i8, i8* %p, i64 760 + %var.addr.typed227 = bitcast i8* %var.addr226 to i32* + %var228 = load i32, i32* %var.addr.typed227, align 4 + %var.addr229 = getelementptr inbounds i8, i8* %p, i64 768 + %var.addr.typed230 = bitcast i8* %var.addr229 to i32* + %var231 = load i32, i32* %var.addr.typed230, align 4 + %var.addr232 = getelementptr inbounds i8, i8* %p, i64 776 + %var.addr.typed233 = bitcast i8* %var.addr232 to i32* + %var234 = load i32, i32* %var.addr.typed233, align 4 + %var.addr235 = getelementptr inbounds i8, i8* %p, i64 792 + %tmp5 = bitcast i8* %var.addr235 to i64* + %var2376 = load i64, i64* %tmp5, align 8 + %var.addr238 = getelementptr inbounds i8, i8* %p, i64 800 + %var.addr.typed239 = bitcast i8* %var.addr238 to i32* + %var240 = load i32, i32* %var.addr.typed239, align 4 + %var.addr241 = getelementptr inbounds i8, i8* %p, i64 808 + %var.addr.typed242 = bitcast i8* %var.addr241 to i32* + %var243 = load i32, i32* %var.addr.typed242, align 4 + %var.addr244 = getelementptr inbounds i8, i8* %p, i64 824 + %var.addr.typed245 = bitcast i8* %var.addr244 to i64* + %var246 = load i64, i64* %var.addr.typed245, align 8 + %var.addr247 = getelementptr inbounds i8, i8* %p, i64 832 + %var.addr.typed248 = bitcast i8* %var.addr247 to i32* + %var249 = load i32, i32* %var.addr.typed248, align 4 + %var.addr250 = getelementptr inbounds i8, i8* %p, i64 840 + %var.addr.typed251 = bitcast i8* %var.addr250 to i32* + %var252 = load i32, i32* %var.addr.typed251, align 4 + %var.addr253 = getelementptr inbounds i8, i8* %p, i64 848 + %var.addr.typed254 = bitcast i8* %var.addr253 to i32* + %var255 = load i32, i32* %var.addr.typed254, align 4 + %var.addr256 = getelementptr inbounds i8, i8* %p, i64 856 + %tmp6 = bitcast i8* %var.addr256 to i32* + %var2587 = load i32, i32* %tmp6, align 4 + %var.addr259 = getelementptr inbounds i8, i8* %p, i64 864 + %var.addr.typed260 = bitcast i8* %var.addr259 to i32* + %var261 = load i32, i32* %var.addr.typed260, align 4 + %var.addr265 = getelementptr inbounds i8, i8* %p, i64 888 + %tmp7 = bitcast i8* %var.addr265 to i64* + %var2678 = load i64, i64* %tmp7, align 8 + %var.addr268 = getelementptr inbounds i8, i8* %p, i64 904 + %var.addr.typed269 = bitcast i8* %var.addr268 to i64* + %var270 = load i64, i64* %var.addr.typed269, align 8 + %var.addr271 = getelementptr inbounds i8, i8* %p, i64 912 + %var.addr.typed272 = bitcast i8* %var.addr271 to i32* + %var273 = load i32, i32* %var.addr.typed272, align 4 + %var.addr277 = getelementptr inbounds i8, i8* %p, i64 928 + %var.addr.typed278 = bitcast i8* %var.addr277 to i32* + %var279 = load i32, i32* %var.addr.typed278, align 4 + %var.addr280 = getelementptr inbounds i8, i8* %p, i64 936 + %tmp8 = bitcast i8* %var.addr280 to i32* + %var2829 = load i32, i32* %tmp8, align 4 + %var.addr283 = getelementptr inbounds i8, i8* %p, i64 944 + %var.addr.typed284 = bitcast i8* %var.addr283 to i32* + %var285 = load i32, i32* %var.addr.typed284, align 4 + %var.addr286 = getelementptr inbounds i8, i8* %p, i64 952 + %var.addr.typed287 = bitcast i8* %var.addr286 to i32* + %var288 = load i32, i32* %var.addr.typed287, align 4 + %var.addr289 = getelementptr inbounds i8, i8* %p, i64 960 + %var.addr.typed290 = bitcast i8* %var.addr289 to i32* + %var291 = load i32, i32* %var.addr.typed290, align 4 + %var.addr295 = getelementptr inbounds i8, i8* %p, i64 976 + %var.addr.typed296 = bitcast i8* %var.addr295 to i32* + %var297 = load i32, i32* %var.addr.typed296, align 4 + %var.addr298 = getelementptr inbounds i8, i8* %p, i64 984 + %tmp9 = bitcast i8* %var.addr298 to i32* + %var30010 = load i32, i32* %tmp9, align 4 + %var.addr301 = getelementptr inbounds i8, i8* %p, i64 992 + %var.addr.typed302 = bitcast i8* %var.addr301 to i32* + %var303 = load i32, i32* %var.addr.typed302, align 4 + %var.addr307 = getelementptr inbounds i8, i8* %p, i64 1008 + %var.addr.typed308 = bitcast i8* %var.addr307 to i32* + %var309 = load i32, i32* %var.addr.typed308, align 4 + %var.addr310 = getelementptr inbounds i8, i8* %p, i64 1016 + %var.addr.typed311 = bitcast i8* %var.addr310 to i32* + %var312 = load i32, i32* %var.addr.typed311, align 4 + %var.addr313 = getelementptr inbounds i8, i8* %p, i64 1024 + %var.addr.typed314 = bitcast i8* %var.addr313 to i32* + %var315 = load i32, i32* %var.addr.typed314, align 4 + %var.addr316 = getelementptr inbounds i8, i8* %p, i64 1032 + %var.addr.typed317 = bitcast i8* %var.addr316 to i32* + %var318 = load i32, i32* %var.addr.typed317, align 4 + %var.addr319 = getelementptr inbounds i8, i8* %p, i64 1040 + %var.addr.typed320 = bitcast i8* %var.addr319 to i32* + %var321 = load i32, i32* %var.addr.typed320, align 4 + %var.addr322 = getelementptr inbounds i8, i8* %p, i64 1048 + %var.addr.typed323 = bitcast i8* %var.addr322 to i32* + %var324 = load i32, i32* %var.addr.typed323, align 4 + %var.addr325 = getelementptr inbounds i8, i8* %p, i64 1056 + %var.addr.typed326 = bitcast i8* %var.addr325 to i32* + %var327 = load i32, i32* %var.addr.typed326, align 4 + %var.addr328 = getelementptr inbounds i8, i8* %p, i64 1064 + %var.addr.typed329 = bitcast i8* %var.addr328 to i32* + %var330 = load i32, i32* %var.addr.typed329, align 4 + %var.addr331 = getelementptr inbounds i8, i8* %p, i64 1072 + %var.addr.typed332 = bitcast i8* %var.addr331 to i32* + %var333 = load i32, i32* %var.addr.typed332, align 4 + %var.addr334 = getelementptr inbounds i8, i8* %p, i64 1080 + %var.addr.typed335 = bitcast i8* %var.addr334 to i32* + %var336 = load i32, i32* %var.addr.typed335, align 4 + %var.addr337 = getelementptr inbounds i8, i8* %p, i64 1088 + %var.addr.typed338 = bitcast i8* %var.addr337 to i32* + %var339 = load i32, i32* %var.addr.typed338, align 4 + %var.addr340 = getelementptr inbounds i8, i8* %p, i64 1096 + %var.addr.typed341 = bitcast i8* %var.addr340 to i32* + %var342 = load i32, i32* %var.addr.typed341, align 4 + %var.addr343 = getelementptr inbounds i8, i8* %p, i64 1104 + %var.addr.typed344 = bitcast i8* %var.addr343 to i32* + %var345 = load i32, i32* %var.addr.typed344, align 4 + %var.addr346 = getelementptr inbounds i8, i8* %p, i64 1112 + %var.addr.typed347 = bitcast i8* %var.addr346 to i32* + %var348 = load i32, i32* %var.addr.typed347, align 4 + %var.addr349 = getelementptr inbounds i8, i8* %p, i64 1120 + %var.addr.typed350 = bitcast i8* %var.addr349 to i32* + %var351 = load i32, i32* %var.addr.typed350, align 4 + %var.addr352 = getelementptr inbounds i8, i8* %p, i64 1136 + %var.addr.typed353 = bitcast i8* %var.addr352 to i64* + %var354 = load i64, i64* %var.addr.typed353, align 8 + %var.addr355 = getelementptr inbounds i8, i8* %p, i64 1152 + %var.addr.typed356 = bitcast i8* %var.addr355 to i64* + %var357 = load i64, i64* %var.addr.typed356, align 8 + %var.addr358 = getelementptr inbounds i8, i8* %p, i64 1168 + %var.addr.typed359 = bitcast i8* %var.addr358 to i64* + %var360 = load i64, i64* %var.addr.typed359, align 8 + %var.addr361 = getelementptr inbounds i8, i8* %p, i64 1184 + %var.addr.typed362 = bitcast i8* %var.addr361 to i64* + %var363 = load i64, i64* %var.addr.typed362, align 8 + %var.addr370 = getelementptr inbounds i8, i8* %p, i64 1208 + %tmp10 = bitcast i8* %var.addr370 to i32* + %var37211 = load i32, i32* %tmp10, align 4 + %var.addr373 = getelementptr inbounds i8, i8* %p, i64 1216 + %tmp11 = bitcast i8* %var.addr373 to i32* + %var37512 = load i32, i32* %tmp11, align 4 + %var.addr376 = getelementptr inbounds i8, i8* %p, i64 1224 + %tmp12 = bitcast i8* %var.addr376 to i32* + %var3782 = load i32, i32* %tmp12, align 4 + %var.addr382 = getelementptr inbounds i8, i8* %p, i64 1240 + %var.addr.typed383 = bitcast i8* %var.addr382 to i32* + %var384 = load i32, i32* %var.addr.typed383, align 4 + br label %loop + +loop: ; preds = %backedge, %entry + %phi_124_486 = phi i32 [ %var303, %entry ], [ %tmp13, %backedge ] + %phi_125_487 = phi i64 [ 0, %entry ], [ 2, %backedge ] + %tmp13 = add i32 %phi_124_486, 1 + %tmp14 = icmp sgt i32 %tmp13, 117 + br i1 %tmp14, label %exit, label %backedge + +exit: ; preds = %loop + %tmp15 = sext i32 %var39 to i64 + %tmp16 = sext i32 %var117 to i64 + %tmp17 = sext i32 %var120 to i64 + %tmp18 = sext i32 %var132 to i64 + %tmp19 = sext i32 %var1411 to i64 + %tmp20 = sext i32 %var147 to i64 + %tmp21 = sext i32 %var153 to i64 + %tmp22 = sext i32 %var162 to i64 + %tmp23 = sext i32 %var165 to i64 + %tmp24 = sext i32 %var177 to i64 + %tmp25 = sext i32 %var180 to i64 + %tmp26 = sext i32 %var183 to i64 + %tmp27 = sext i32 %var1863 to i64 + %tmp28 = sext i32 %var192 to i64 + %tmp29 = sext i32 %var198 to i64 + %tmp30 = sext i32 %var204 to i64 + %tmp31 = sext i32 %var207 to i64 + %tmp32 = sext i32 %var210 to i64 + %tmp33 = sext i32 %var2195 to i64 + %tmp34 = sext i32 %var222 to i64 + %tmp35 = icmp ne i32 %var225, 0 + %.42831 = zext i1 %tmp35 to i64 + %tmp36 = sext i32 %var228 to i64 + %tmp37 = sext i32 %var231 to i64 + %tmp38 = sext i32 %var234 to i64 + %tmp39 = sext i32 %var240 to i64 + %tmp40 = sext i32 %var243 to i64 + %tmp41 = sext i32 %var249 to i64 + %tmp42 = sext i32 %var252 to i64 + %tmp43 = sext i32 %var255 to i64 + %tmp44 = sext i32 %var2587 to i64 + %tmp45 = sext i32 %var261 to i64 + %tmp46 = sext i32 %var273 to i64 + %tmp47 = sext i32 %var279 to i64 + %phitmp42823 = sext i32 %var2829 to i64 + %tmp48 = sext i32 %var285 to i64 + %tmp49 = sext i32 %var288 to i64 + %tmp50 = sext i32 %var291 to i64 + %tmp51 = sext i32 %var297 to i64 + %phitmp42824 = sext i32 %var30010 to i64 + %tmp52 = sext i32 %tmp13 to i64 + %tmp53 = sext i32 %var309 to i64 + %tmp54 = icmp ne i32 %var348, 0 + %.42832 = zext i1 %tmp54 to i64 + %tmp55 = sext i32 %var312 to i64 + %tmp56 = sext i32 %var315 to i64 + %tmp57 = sext i32 %var318 to i64 + %tmp58 = sext i32 %var321 to i64 + %tmp59 = sext i32 %var324 to i64 + %tmp60 = sext i32 %var327 to i64 + %tmp61 = sext i32 %var330 to i64 + %phitmp42825 = sext i32 %var37211 to i64 + %tmp62 = icmp ne i32 %var351, 0 + %.42833 = zext i1 %tmp62 to i64 + %tmp63 = sext i32 %var333 to i64 + %phitmp42826 = sext i32 %var37512 to i64 + %tmp64 = sext i32 %var336 to i64 + %tmp65 = sext i32 %var339 to i64 + %tmp66 = sext i32 %var342 to i64 + %tmp67 = sext i32 %var345 to i64 + %tmp68 = sext i32 %var384 to i64 + %phitmp42827 = sext i32 %var3782 to i64 + %.op = shl nsw i64 %tmp19, 1 + %tmp69 = add i64 %.op, %var150 + %tmp70 = add i64 %tmp69, %tmp21 + %tmp71 = add i64 %tmp70, %var156 + %tmp72 = add i64 %tmp71, %var159 + %tmp73 = add i64 %tmp72, %tmp22 + %tmp74 = add i64 %tmp73, %tmp23 + %tmp75 = add i64 %tmp74, %var1712 + %tmp76 = add i64 %tmp75, %tmp25 + %tmp77 = add i64 %tmp76, %tmp26 + %tmp78 = add i64 %tmp77, %var189 + %tmp79 = add i64 %tmp78, %tmp27 + %tmp80 = add i64 %tmp79, %tmp28 + %tmp81 = add i64 %tmp80, %var195 + %tmp82 = add i64 %tmp81, %tmp29 + %tmp83 = add i64 %tmp82, %var201 + %tmp84 = add i64 %tmp83, %tmp30 + %tmp85 = add i64 %tmp84, %tmp31 + %tmp86 = add i64 %tmp85, %tmp32 + %tmp87 = add i64 %tmp86, %var2134 + %tmp88 = add i64 %tmp87, 216 + %tmp89 = add i64 %tmp88, %tmp34 + %tmp90 = add i64 %tmp89, %tmp33 + %tmp91 = add i64 %tmp90, %.42831 + %tmp92 = add i64 %tmp91, %tmp36 + %tmp93 = add i64 %tmp92, %tmp37 + %tmp94 = add i64 %tmp93, %tmp38 + %tmp95 = add i64 %tmp94, %var2376 + %tmp96 = add i64 %tmp95, %tmp39 + %tmp97 = add i64 %tmp96, %tmp40 + %tmp98 = add i64 %tmp97, %var246 + %tmp99 = add i64 %tmp98, %tmp41 + %tmp100 = add i64 %tmp99, %tmp42 + %tmp101 = add i64 %tmp100, %tmp43 + %tmp102 = add i64 %tmp101, %tmp45 + %tmp103 = add i64 %tmp102, %tmp44 + %tmp104 = add i64 %tmp103, %var270 + %tmp105 = add i64 %tmp104, %tmp46 + %tmp106 = add i64 %tmp105, %tmp47 + %tmp107 = add i64 %tmp106, %tmp48 + %tmp108 = add i64 %tmp107, %phitmp42823 + %tmp109 = add i64 %tmp108, %tmp49 + %tmp110 = add i64 %tmp109, %tmp50 + %tmp111 = add i64 %tmp110, %tmp51 + %tmp112 = add i64 %tmp111, %phitmp42824 + %tmp113 = add i64 %tmp112, %tmp53 + %tmp114 = add i64 %tmp113, %tmp56 + %tmp115 = add i64 %tmp114, %tmp58 + %tmp116 = add i64 %tmp115, %tmp59 + %tmp117 = add i64 %tmp116, %tmp60 + %tmp118 = add i64 %tmp117, %tmp61 + %tmp119 = add i64 %tmp118, %tmp63 + %tmp120 = add i64 %tmp119, %tmp64 + %tmp121 = add i64 %tmp120, %tmp65 + %tmp122 = add i64 %tmp121, %tmp66 + %tmp123 = add i64 %tmp122, %tmp67 + %tmp124 = add i64 %tmp123, %.42833 + %tmp125 = add i64 %tmp124, %var357 + %tmp126 = add i64 %tmp125, %var360 + %tmp127 = add i64 %tmp126, %var363 + %tmp128 = add i64 %tmp127, %phitmp42825 + %tmp129 = add i64 %tmp128, %phitmp42826 + %tmp130 = add i64 %tmp129, %tmp68 + %tmp131 = add i64 %tmp130, %phitmp42827 + %tmp132 = add i64 %tmp131, %tmp16 + %tmp133 = add i64 %tmp132, %tmp17 + %tmp134 = add i64 %tmp133, %tmp18 + %tmp135 = add i64 %tmp134, %tmp20 + %tmp136 = add i64 %tmp135, %tmp24 + %tmp137 = add i64 %tmp136, %var2678 + %tmp138 = add i64 %tmp137, %tmp55 + %tmp139 = add i64 %tmp138, %tmp57 + %tmp140 = add i64 %tmp139, %.42832 + %tmp141 = add i64 %tmp140, 2143289440 + %tmp142 = add i64 %tmp141, %var174 + %tmp143 = add i64 %tmp142, %tmp15 + %tmp144 = add i64 %tmp143, %var354 + %tmp145 = add i64 %tmp144, %tmp52 + %tmp146 = add i64 %tmp145, %phi_125_487 + store volatile i64 %tmp146, i64* null, align 536870912 + ret void + +backedge: ; preds = %loop + br label %loop +}