You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

539 lines
16 KiB

@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
}