@sum = global i32 0 @array = global [20 x i32] zeroinitializer declare i32 @getint() declare float @getfloat() declare i32 @getarray(i32* %arg.a) declare i32 @getfarray(float* %arg.a) declare i32 @getch() declare void @putint(i32 %arg.x) declare void @putfloat(float %arg.x) declare void @putarray(i32 %arg.n, i32* %arg.a) declare void @putfarray(i32 %arg.n, float* %arg.a) declare void @putch(i32 %arg.x) declare void @starttime() declare void @stoptime() define i32 @f(i32 %arg.i, i32 %arg.j) { entry: %t0 = alloca i32 store i32 %arg.i, i32* %t0 %t1 = alloca i32 store i32 %arg.j, i32* %t1 %t2 = load i32, i32* @sum %t3 = add i32 %t2, 1 store i32 %t3, i32* @sum %t4 = load i32, i32* %t0 %t5 = load i32, i32* %t1 %t6 = icmp sge i32 %t4, %t5 %t7 = zext i1 %t6 to i32 %t8 = icmp ne i32 %t7, 0 br i1 %t8, label %if.then.1, label %lor.rhs.3 if.then.1: ret i32 0 if.end.2: %t13 = load i32, i32* %t0 %t14 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 %t13 store i32 1, i32* %t14 %t15 = load i32, i32* %t0 %t16 = icmp eq i32 %t15, 0 %t17 = zext i1 %t16 to i32 %t18 = icmp ne i32 %t17, 0 br i1 %t18, label %if.then.4, label %if.else.5 lor.rhs.3: %t9 = load i32, i32* %t0 %t10 = icmp sge i32 %t9, 20 %t11 = zext i1 %t10 to i32 %t12 = icmp ne i32 %t11, 0 br i1 %t12, label %if.then.1, label %if.end.2 if.then.4: %t19 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 0 %t20 = load i32, i32* %t19 ret i32 %t20 if.else.5: %t21 = load i32, i32* %t0 %t22 = sub i32 %t21, 1 %t23 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 %t22 %t24 = load i32, i32* %t23 ret i32 %t24 if.end.6: ret i32 0 } define i32 @g(i32 %arg.i, i32 %arg.j) { entry: %t25 = alloca i32 store i32 %arg.i, i32* %t25 %t26 = alloca i32 store i32 %arg.j, i32* %t26 %t27 = load i32, i32* @sum %t28 = add i32 %t27, 2 store i32 %t28, i32* @sum %t29 = load i32, i32* %t25 %t30 = load i32, i32* %t26 %t31 = icmp sge i32 %t29, %t30 %t32 = zext i1 %t31 to i32 %t33 = icmp ne i32 %t32, 0 br i1 %t33, label %if.then.7, label %lor.rhs.9 if.then.7: ret i32 1 if.end.8: %t38 = load i32, i32* %t25 %t39 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 %t38 store i32 0, i32* %t39 %t40 = load i32, i32* %t25 %t41 = icmp eq i32 %t40, 0 %t42 = zext i1 %t41 to i32 %t43 = icmp ne i32 %t42, 0 br i1 %t43, label %if.then.10, label %if.else.11 lor.rhs.9: %t34 = load i32, i32* %t25 %t35 = icmp sge i32 %t34, 20 %t36 = zext i1 %t35 to i32 %t37 = icmp ne i32 %t36, 0 br i1 %t37, label %if.then.7, label %if.end.8 if.then.10: %t44 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 0 %t45 = load i32, i32* %t44 ret i32 %t45 if.else.11: %t46 = load i32, i32* %t25 %t47 = sub i32 %t46, 1 %t48 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 %t47 %t49 = load i32, i32* %t48 ret i32 %t49 if.end.12: ret i32 0 } define i32 @h(i32 %arg.i) { entry: %t50 = alloca i32 store i32 %arg.i, i32* %t50 %t51 = load i32, i32* @sum %t52 = add i32 %t51, 3 store i32 %t52, i32* @sum %t53 = load i32, i32* %t50 %t54 = icmp slt i32 %t53, 0 %t55 = zext i1 %t54 to i32 %t56 = icmp ne i32 %t55, 0 br i1 %t56, label %if.then.13, label %lor.rhs.15 if.then.13: ret i32 0 if.end.14: %t61 = load i32, i32* %t50 %t62 = getelementptr inbounds [20 x i32], [20 x i32]* @array, i32 0, i32 %t61 %t63 = load i32, i32* %t62 ret i32 %t63 lor.rhs.15: %t57 = load i32, i32* %t50 %t58 = icmp sge i32 %t57, 20 %t59 = zext i1 %t58 to i32 %t60 = icmp ne i32 %t59, 0 br i1 %t60, label %if.then.13, label %if.end.14 } define i32 @main() { entry: %t64 = alloca i32 %t208 = alloca i32 store i32 0, i32* %t64 br label %while.cond.16 while.cond.16: %t65 = load i32, i32* %t64 %t66 = icmp slt i32 %t65, 20 %t67 = zext i1 %t66 to i32 %t68 = icmp ne i32 %t67, 0 br i1 %t68, label %while.body.17, label %while.end.18 while.body.17: %t69 = load i32, i32* %t64 %t70 = call i32 @f(i32 0, i32 %t69) %t71 = icmp ne i32 %t70, 0 br i1 %t71, label %land.rhs.39, label %if.end.20 while.end.18: store i32 0, i32* %t64 br label %while.cond.40 if.then.19: br label %if.end.20 if.end.20: %t129 = load i32, i32* %t64 %t130 = add i32 %t129, 1 store i32 %t130, i32* %t64 br label %while.cond.16 land.rhs.21: %t126 = load i32, i32* %t64 %t127 = call i32 @f(i32 19, i32 %t126) %t128 = icmp ne i32 %t127, 0 br i1 %t128, label %if.then.19, label %if.end.20 land.rhs.22: %t123 = load i32, i32* %t64 %t124 = call i32 @f(i32 18, i32 %t123) %t125 = icmp ne i32 %t124, 0 br i1 %t125, label %land.rhs.21, label %if.end.20 land.rhs.23: %t120 = load i32, i32* %t64 %t121 = call i32 @f(i32 17, i32 %t120) %t122 = icmp ne i32 %t121, 0 br i1 %t122, label %land.rhs.22, label %if.end.20 land.rhs.24: %t117 = load i32, i32* %t64 %t118 = call i32 @f(i32 16, i32 %t117) %t119 = icmp ne i32 %t118, 0 br i1 %t119, label %land.rhs.23, label %if.end.20 land.rhs.25: %t114 = load i32, i32* %t64 %t115 = call i32 @f(i32 15, i32 %t114) %t116 = icmp ne i32 %t115, 0 br i1 %t116, label %land.rhs.24, label %if.end.20 land.rhs.26: %t111 = load i32, i32* %t64 %t112 = call i32 @f(i32 14, i32 %t111) %t113 = icmp ne i32 %t112, 0 br i1 %t113, label %land.rhs.25, label %if.end.20 land.rhs.27: %t108 = load i32, i32* %t64 %t109 = call i32 @f(i32 13, i32 %t108) %t110 = icmp ne i32 %t109, 0 br i1 %t110, label %land.rhs.26, label %if.end.20 land.rhs.28: %t105 = load i32, i32* %t64 %t106 = call i32 @f(i32 12, i32 %t105) %t107 = icmp ne i32 %t106, 0 br i1 %t107, label %land.rhs.27, label %if.end.20 land.rhs.29: %t102 = load i32, i32* %t64 %t103 = call i32 @f(i32 11, i32 %t102) %t104 = icmp ne i32 %t103, 0 br i1 %t104, label %land.rhs.28, label %if.end.20 land.rhs.30: %t99 = load i32, i32* %t64 %t100 = call i32 @f(i32 10, i32 %t99) %t101 = icmp ne i32 %t100, 0 br i1 %t101, label %land.rhs.29, label %if.end.20 land.rhs.31: %t96 = load i32, i32* %t64 %t97 = call i32 @f(i32 9, i32 %t96) %t98 = icmp ne i32 %t97, 0 br i1 %t98, label %land.rhs.30, label %if.end.20 land.rhs.32: %t93 = load i32, i32* %t64 %t94 = call i32 @f(i32 8, i32 %t93) %t95 = icmp ne i32 %t94, 0 br i1 %t95, label %land.rhs.31, label %if.end.20 land.rhs.33: %t90 = load i32, i32* %t64 %t91 = call i32 @f(i32 7, i32 %t90) %t92 = icmp ne i32 %t91, 0 br i1 %t92, label %land.rhs.32, label %if.end.20 land.rhs.34: %t87 = load i32, i32* %t64 %t88 = call i32 @f(i32 6, i32 %t87) %t89 = icmp ne i32 %t88, 0 br i1 %t89, label %land.rhs.33, label %if.end.20 land.rhs.35: %t84 = load i32, i32* %t64 %t85 = call i32 @f(i32 5, i32 %t84) %t86 = icmp ne i32 %t85, 0 br i1 %t86, label %land.rhs.34, label %if.end.20 land.rhs.36: %t81 = load i32, i32* %t64 %t82 = call i32 @f(i32 4, i32 %t81) %t83 = icmp ne i32 %t82, 0 br i1 %t83, label %land.rhs.35, label %if.end.20 land.rhs.37: %t78 = load i32, i32* %t64 %t79 = call i32 @f(i32 3, i32 %t78) %t80 = icmp ne i32 %t79, 0 br i1 %t80, label %land.rhs.36, label %if.end.20 land.rhs.38: %t75 = load i32, i32* %t64 %t76 = call i32 @f(i32 2, i32 %t75) %t77 = icmp ne i32 %t76, 0 br i1 %t77, label %land.rhs.37, label %if.end.20 land.rhs.39: %t72 = load i32, i32* %t64 %t73 = call i32 @f(i32 1, i32 %t72) %t74 = icmp ne i32 %t73, 0 br i1 %t74, label %land.rhs.38, label %if.end.20 while.cond.40: %t131 = load i32, i32* %t64 %t132 = icmp slt i32 %t131, 20 %t133 = zext i1 %t132 to i32 %t134 = icmp ne i32 %t133, 0 br i1 %t134, label %while.body.41, label %while.end.42 while.body.41: %t135 = load i32, i32* %t64 %t136 = call i32 @g(i32 0, i32 %t135) %t137 = icmp ne i32 %t136, 0 br i1 %t137, label %if.then.43, label %lor.rhs.63 while.end.42: store i32 1, i32* %t64 br label %while.cond.64 if.then.43: br label %if.end.44 if.end.44: %t195 = load i32, i32* %t64 %t196 = add i32 %t195, 1 store i32 %t196, i32* %t64 br label %while.cond.40 lor.rhs.45: %t192 = load i32, i32* %t64 %t193 = call i32 @g(i32 19, i32 %t192) %t194 = icmp ne i32 %t193, 0 br i1 %t194, label %if.then.43, label %if.end.44 lor.rhs.46: %t189 = load i32, i32* %t64 %t190 = call i32 @g(i32 18, i32 %t189) %t191 = icmp ne i32 %t190, 0 br i1 %t191, label %if.then.43, label %lor.rhs.45 lor.rhs.47: %t186 = load i32, i32* %t64 %t187 = call i32 @g(i32 17, i32 %t186) %t188 = icmp ne i32 %t187, 0 br i1 %t188, label %if.then.43, label %lor.rhs.46 lor.rhs.48: %t183 = load i32, i32* %t64 %t184 = call i32 @g(i32 16, i32 %t183) %t185 = icmp ne i32 %t184, 0 br i1 %t185, label %if.then.43, label %lor.rhs.47 lor.rhs.49: %t180 = load i32, i32* %t64 %t181 = call i32 @g(i32 15, i32 %t180) %t182 = icmp ne i32 %t181, 0 br i1 %t182, label %if.then.43, label %lor.rhs.48 lor.rhs.50: %t177 = load i32, i32* %t64 %t178 = call i32 @g(i32 14, i32 %t177) %t179 = icmp ne i32 %t178, 0 br i1 %t179, label %if.then.43, label %lor.rhs.49 lor.rhs.51: %t174 = load i32, i32* %t64 %t175 = call i32 @g(i32 13, i32 %t174) %t176 = icmp ne i32 %t175, 0 br i1 %t176, label %if.then.43, label %lor.rhs.50 lor.rhs.52: %t171 = load i32, i32* %t64 %t172 = call i32 @g(i32 12, i32 %t171) %t173 = icmp ne i32 %t172, 0 br i1 %t173, label %if.then.43, label %lor.rhs.51 lor.rhs.53: %t168 = load i32, i32* %t64 %t169 = call i32 @g(i32 11, i32 %t168) %t170 = icmp ne i32 %t169, 0 br i1 %t170, label %if.then.43, label %lor.rhs.52 lor.rhs.54: %t165 = load i32, i32* %t64 %t166 = call i32 @g(i32 10, i32 %t165) %t167 = icmp ne i32 %t166, 0 br i1 %t167, label %if.then.43, label %lor.rhs.53 lor.rhs.55: %t162 = load i32, i32* %t64 %t163 = call i32 @g(i32 9, i32 %t162) %t164 = icmp ne i32 %t163, 0 br i1 %t164, label %if.then.43, label %lor.rhs.54 lor.rhs.56: %t159 = load i32, i32* %t64 %t160 = call i32 @g(i32 8, i32 %t159) %t161 = icmp ne i32 %t160, 0 br i1 %t161, label %if.then.43, label %lor.rhs.55 lor.rhs.57: %t156 = load i32, i32* %t64 %t157 = call i32 @g(i32 7, i32 %t156) %t158 = icmp ne i32 %t157, 0 br i1 %t158, label %if.then.43, label %lor.rhs.56 lor.rhs.58: %t153 = load i32, i32* %t64 %t154 = call i32 @g(i32 6, i32 %t153) %t155 = icmp ne i32 %t154, 0 br i1 %t155, label %if.then.43, label %lor.rhs.57 lor.rhs.59: %t150 = load i32, i32* %t64 %t151 = call i32 @g(i32 5, i32 %t150) %t152 = icmp ne i32 %t151, 0 br i1 %t152, label %if.then.43, label %lor.rhs.58 lor.rhs.60: %t147 = load i32, i32* %t64 %t148 = call i32 @g(i32 4, i32 %t147) %t149 = icmp ne i32 %t148, 0 br i1 %t149, label %if.then.43, label %lor.rhs.59 lor.rhs.61: %t144 = load i32, i32* %t64 %t145 = call i32 @g(i32 3, i32 %t144) %t146 = icmp ne i32 %t145, 0 br i1 %t146, label %if.then.43, label %lor.rhs.60 lor.rhs.62: %t141 = load i32, i32* %t64 %t142 = call i32 @g(i32 2, i32 %t141) %t143 = icmp ne i32 %t142, 0 br i1 %t143, label %if.then.43, label %lor.rhs.61 lor.rhs.63: %t138 = load i32, i32* %t64 %t139 = call i32 @g(i32 1, i32 %t138) %t140 = icmp ne i32 %t139, 0 br i1 %t140, label %if.then.43, label %lor.rhs.62 while.cond.64: %t197 = load i32, i32* %t64 %t198 = icmp slt i32 %t197, 20 %t199 = zext i1 %t198 to i32 %t200 = icmp ne i32 %t199, 0 br i1 %t200, label %land.rhs.67, label %while.end.66 while.body.65: %t206 = load i32, i32* %t64 %t207 = add i32 %t206, 1 store i32 %t207, i32* %t64 br label %while.cond.64 while.end.66: store i32 0, i32* %t208 store i32 0, i32* %t208 %t209 = call i32 @h(i32 0) %t210 = icmp ne i32 %t209, 0 br i1 %t210, label %land.rhs.72, label %lor.rhs.71 land.rhs.67: %t201 = load i32, i32* %t64 %t202 = sub i32 %t201, 1 %t203 = load i32, i32* %t64 %t204 = call i32 @f(i32 %t202, i32 %t203) %t205 = icmp ne i32 %t204, 0 br i1 %t205, label %while.body.65, label %while.end.66 if.then.68: store i32 1, i32* %t208 br label %if.end.69 if.end.69: %t219 = load i32, i32* @sum %t220 = load i32, i32* %t208 %t221 = add i32 %t219, %t220 store i32 0, i32* %t208 %t222 = call i32 @h(i32 4) %t223 = icmp eq i32 %t222, 0 %t224 = zext i1 %t223 to i32 %t225 = icmp ne i32 %t224, 0 br i1 %t225, label %if.then.73, label %lor.rhs.76 lor.rhs.70: %t217 = call i32 @h(i32 3) %t218 = icmp ne i32 %t217, 0 br i1 %t218, label %if.then.68, label %if.end.69 lor.rhs.71: %t213 = call i32 @h(i32 2) %t214 = icmp eq i32 %t213, 0 %t215 = zext i1 %t214 to i32 %t216 = icmp ne i32 %t215, 0 br i1 %t216, label %if.then.68, label %lor.rhs.70 land.rhs.72: %t211 = call i32 @h(i32 1) %t212 = icmp ne i32 %t211, 0 br i1 %t212, label %if.then.68, label %lor.rhs.71 if.then.73: store i32 1, i32* %t208 br label %if.end.74 if.end.74: %t238 = load i32, i32* @sum %t239 = load i32, i32* %t208 %t240 = mul i32 %t238, %t239 store i32 0, i32* %t208 %t241 = call i32 @h(i32 9) %t242 = icmp ne i32 %t241, 0 br i1 %t242, label %land.rhs.85, label %lor.rhs.84 lor.rhs.75: %t234 = call i32 @h(i32 8) %t235 = icmp eq i32 %t234, 0 %t236 = zext i1 %t235 to i32 %t237 = icmp ne i32 %t236, 0 br i1 %t237, label %if.then.73, label %if.end.74 lor.rhs.76: %t226 = call i32 @h(i32 5) %t227 = icmp ne i32 %t226, 0 br i1 %t227, label %land.rhs.78, label %lor.rhs.75 land.rhs.77: %t232 = call i32 @h(i32 7) %t233 = icmp ne i32 %t232, 0 br i1 %t233, label %if.then.73, label %lor.rhs.75 land.rhs.78: %t228 = call i32 @h(i32 6) %t229 = icmp eq i32 %t228, 0 %t230 = zext i1 %t229 to i32 %t231 = icmp ne i32 %t230, 0 br i1 %t231, label %land.rhs.77, label %lor.rhs.75 if.then.79: store i32 1, i32* %t208 br label %if.end.80 if.end.80: %t263 = load i32, i32* @sum %t264 = load i32, i32* %t208 %t265 = sub i32 %t263, %t264 store i32 0, i32* %t208 %t266 = call i32 @h(i32 0) %t267 = icmp ne i32 %t266, 0 br i1 %t267, label %land.rhs.94, label %lor.rhs.91 lor.rhs.81: %t259 = call i32 @h(i32 14) %t260 = icmp ne i32 %t259, 0 br i1 %t260, label %land.rhs.86, label %if.end.80 lor.rhs.82: %t255 = call i32 @h(i32 13) %t256 = icmp eq i32 %t255, 0 %t257 = zext i1 %t256 to i32 %t258 = icmp ne i32 %t257, 0 br i1 %t258, label %if.then.79, label %lor.rhs.81 lor.rhs.83: %t251 = call i32 @h(i32 12) %t252 = icmp eq i32 %t251, 0 %t253 = zext i1 %t252 to i32 %t254 = icmp ne i32 %t253, 0 br i1 %t254, label %if.then.79, label %lor.rhs.82 lor.rhs.84: %t247 = call i32 @h(i32 11) %t248 = icmp eq i32 %t247, 0 %t249 = zext i1 %t248 to i32 %t250 = icmp ne i32 %t249, 0 br i1 %t250, label %if.then.79, label %lor.rhs.83 land.rhs.85: %t243 = call i32 @h(i32 10) %t244 = icmp eq i32 %t243, 0 %t245 = zext i1 %t244 to i32 %t246 = icmp ne i32 %t245, 0 br i1 %t246, label %if.then.79, label %lor.rhs.84 land.rhs.86: %t261 = call i32 @h(i32 15) %t262 = icmp ne i32 %t261, 0 br i1 %t262, label %if.then.79, label %if.end.80 if.then.87: store i32 1, i32* %t208 br label %if.end.88 if.end.88: %t288 = load i32, i32* @sum %t289 = load i32, i32* %t208 %t290 = add i32 %t288, %t289 call void @putint(i32 %t290) ret i32 0 lor.rhs.89: %t286 = call i32 @h(i32 8) %t287 = icmp ne i32 %t286, 0 br i1 %t287, label %if.then.87, label %if.end.88 lor.rhs.90: %t280 = call i32 @h(i32 6) %t281 = icmp ne i32 %t280, 0 br i1 %t281, label %land.rhs.95, label %lor.rhs.89 lor.rhs.91: %t278 = call i32 @h(i32 5) %t279 = icmp ne i32 %t278, 0 br i1 %t279, label %if.then.87, label %lor.rhs.90 land.rhs.92: %t274 = call i32 @h(i32 4) %t275 = icmp eq i32 %t274, 0 %t276 = zext i1 %t275 to i32 %t277 = icmp ne i32 %t276, 0 br i1 %t277, label %if.then.87, label %lor.rhs.91 land.rhs.93: %t270 = call i32 @h(i32 3) %t271 = icmp eq i32 %t270, 0 %t272 = zext i1 %t271 to i32 %t273 = icmp ne i32 %t272, 0 br i1 %t273, label %land.rhs.92, label %lor.rhs.91 land.rhs.94: %t268 = call i32 @h(i32 2) %t269 = icmp ne i32 %t268, 0 br i1 %t269, label %land.rhs.93, label %lor.rhs.91 land.rhs.95: %t282 = call i32 @h(i32 7) %t283 = icmp eq i32 %t282, 0 %t284 = zext i1 %t283 to i32 %t285 = icmp ne i32 %t284, 0 br i1 %t285, label %if.then.87, label %lor.rhs.89 }