Stage: Initial IR let (global print_string : (char*) -> int)(v_115) = let print_string_116 = $external(%print_string : (char*) -> int, v_115) in $return print_string_116 in let make_var_defs_117 : int = 0 in let (global print_int : (int) -> int)(v_118) = let print_int_119 = $external(%print_int : (int) -> int, v_118) in $return print_int_119 in let make_var_defs_120 : int = 0 in let type item_121 = struct { int index; char[10] data; } in let (global f : (item_121) -> item_121)(a_122) = let (make_seq_expr_fun_123 : (item_121) -> item_121)(make_seq_expr_arg_124) = $return make_seq_expr_arg_124 in let addr_of_var_125 : item_121* = &a_122 in let addr_of_project_126 : int* = &addr_of_var_125->index in let uarith_expr_127 : int = addr_of_project_126[0] in let uarith_pointer_temp_128 : int = uarith_expr_127 + 1 in *addr_of_project_126 : int <- uarith_pointer_temp_128; make_seq_expr_fun_123(a_122) in let (global print_struct : (char*, item_121*) -> int)(s_129, p_130) = let (make_seq_expr_fun_131 : (int) -> int)(make_seq_expr_arg_132) = $return make_seq_expr_arg_132 in let apply_expr_133 : int = print_string(s_129) in let make_string_134 = ".index=" in let apply_expr_135 : int = print_string(make_string_134) in let project_expr_136 : int = p_130->index in let apply_expr_137 : int = print_int(project_expr_136) in let make_string_138 = "\n" in let apply_expr_139 : int = print_string(make_string_138) in make_seq_expr_fun_131(apply_expr_139) in let (global main : (int, char**) -> int)(argc_140, argv_141) = let (make_seq_expr_fun_142 : (int) -> int)(make_seq_expr_arg_143) = $return make_seq_expr_arg_143 in let a_144 : item_121 = uninitialized in let b_145 : item_121 = uninitialized in let make_var_defs_146 : int = 0 in let make_scalar_147 : int = 1 in let addr_of_var_148 : item_121* = &a_144 in let assign_project_149 : int = make_scalar_147 in addr_of_var_148->index : int <- make_scalar_147; let make_string_150 = "a" in let addr_of_var_151 : item_121* = &a_144 in let apply_expr_152 : int = print_struct(make_string_150, addr_of_var_151) in let make_string_153 = "b" in let addr_of_var_154 : item_121* = &b_145 in let apply_expr_155 : int = print_struct(make_string_153, addr_of_var_154) in let apply_expr_156 : item_121 = f(a_144) in let assign_var_157 : item_121 = apply_expr_156 in b_145 : item_121 <- assign_var_157; let make_string_158 = "a" in let addr_of_var_159 : item_121* = &a_144 in let apply_expr_160 : int = print_struct(make_string_158, addr_of_var_159) in let make_string_161 = "b" in let addr_of_var_162 : item_121* = &b_145 in let apply_expr_163 : int = print_struct(make_string_161, addr_of_var_162) in let make_scalar_164 : int = 0 in make_seq_expr_fun_142(make_scalar_164) in $return 0 Stage: CPS conversion let (print_string_174 : ((int) -> int, char*) -> int)(exit_175, v_176) = let print_string_177 = $external(%print_string : (char*) -> int, v_176) in exit_175(print_string_177) in let make_var_defs_178 : int = 0 in let (print_int_179 : ((int) -> int, int) -> int)(exit_180, v_181) = let print_int_182 = $external(%print_int : (int) -> int, v_181) in exit_180(print_int_182) in let make_var_defs_183 : int = 0 in let type item_184 = struct { int index; char[10] data; } in let (global f : ((item_184) -> int, item_184) -> int)(exit_185, a_186) = let (make_seq_expr_fun_187 : (item_184) -> int)(make_seq_expr_arg_188) = exit_185(make_seq_expr_arg_188) in let addr_of_var_189 : item_184* = &a_186 in let addr_of_project_190 : int* = &addr_of_var_189->index in let uarith_expr_191 : int = addr_of_project_190[0] in let uarith_pointer_temp_192 : int = uarith_expr_191 + 1 in *addr_of_project_190 : int <- uarith_pointer_temp_192; make_seq_expr_fun_187(a_186) in let (global print_struct : ((int) -> int, char*, item_184*) -> int)( exit_193, s_194, p_195) = let (make_seq_expr_fun_196 : (int) -> int)(make_seq_expr_arg_197) = exit_193(make_seq_expr_arg_197) in let (global cont_apply_expr_fun_198 : (int) -> int)(apply_expr_199) = let make_string_200 = ".index=" in let (global cont_apply_expr_fun_201 : (int) -> int)( apply_expr_202) = let project_expr_203 : int = p_195->index in let (global cont_apply_expr_fun_204 : (int) -> int)( apply_expr_205) = let make_string_206 = "\n" in let (global cont_apply_expr_fun_207 : (int) -> int)(apply_expr_208) = make_seq_expr_fun_196(apply_expr_208) in print_string_174(cont_apply_expr_fun_207, make_string_206) in print_int_179(cont_apply_expr_fun_204, project_expr_203) in print_string_174(cont_apply_expr_fun_201, make_string_200) in print_string_174(cont_apply_expr_fun_198, s_194) in let (global main : ((int) -> int, int, char**) -> int)(exit_209, argc_210, argv_211) = let (make_seq_expr_fun_212 : (int) -> int)(make_seq_expr_arg_213) = exit_209(make_seq_expr_arg_213) in let a_214 : item_184 = uninitialized in let b_215 : item_184 = uninitialized in let make_var_defs_216 : int = 0 in let make_scalar_217 : int = 1 in let addr_of_var_218 : item_184* = &a_214 in let assign_project_219 : int = make_scalar_217 in addr_of_var_218->index : int <- make_scalar_217; let make_string_220 = "a" in let addr_of_var_221 : item_184* = &a_214 in let (global cont_apply_expr_fun_222 : (int) -> int)(apply_expr_223) = let make_string_224 = "b" in let addr_of_var_225 : item_184* = &b_215 in let (global cont_apply_expr_fun_226 : (int) -> int)( apply_expr_227) = let (global cont_apply_expr_fun_228 : (item_184) -> int)( apply_expr_229) = let assign_var_230 : item_184 = apply_expr_229 in b_215 : item_184 <- assign_var_230; let make_string_231 = "a" in let addr_of_var_232 : item_184* = &a_214 in let (global cont_apply_expr_fun_233 : (int) -> int)(apply_expr_234) = let make_string_235 = "b" in let addr_of_var_236 : item_184* = &b_215 in let (global cont_apply_expr_fun_237 : (int) -> int)(apply_expr_238) = let make_scalar_239 : int = 0 in make_seq_expr_fun_212(make_scalar_239) in print_struct(cont_apply_expr_fun_237, make_string_235, addr_of_var_236) in print_struct(cont_apply_expr_fun_233, make_string_231, addr_of_var_232) in f(cont_apply_expr_fun_228, a_214) in print_struct(cont_apply_expr_fun_226, make_string_224, addr_of_var_225) in print_struct(cont_apply_expr_fun_222, make_string_220, addr_of_var_221) in exit(0) Stage: Escape analysis let (print_string_263 : ((int) -> int, char*) -> int)(exit_264, v_265) = let print_string_266 = $external(%print_string : (char*) -> int, v_265) in exit_264(print_string_266) in let make_var_defs_267 : int = 0 in let (print_int_268 : ((int) -> int, int) -> int)(exit_269, v_270) = let print_int_271 = $external(%print_int : (int) -> int, v_270) in exit_269(print_int_271) in let make_var_defs_272 : int = 0 in let type item_184 = struct { int index; char[10] data; } in let (global f : ((item_184*) -> int, item_184*) -> int)(exit_273, a_274) = let type frame_240 = struct { item_184 make_seq_expr_arg_188; item_184 a_186; } in let frame_275 : frame_240* = alloc(frame_240) in let a_276 : (struct { int index; char[10] data; })* = &frame_275->a_186 in memcpy(a_276 : item_184, a_274); let (make_seq_expr_fun_277 : (item_184*) -> int)(make_seq_expr_arg_278) = let make_seq_expr_arg_279 : (struct { int index; char[10] data; })* = &frame_275->make_seq_expr_arg_188 in memcpy(make_seq_expr_arg_279 : item_184, make_seq_expr_arg_278); let make_seq_expr_arg_280 : (struct { int index; char[10] data; })* = make_seq_expr_arg_279 in let make_seq_expr_arg_281 : (struct { int index; char[10] data; })* = &frame_275->make_seq_expr_arg_188 in exit_273(make_seq_expr_arg_281) in let a_282 : (struct { int index; char[10] data; })* = &frame_275->a_186 in let addr_of_var_283 : (struct { int index; char[10] data; })* = a_282 in let addr_of_project_284 : int* = &addr_of_var_283->index in let addr_of_project_285 : int* = addr_of_project_284 in let uarith_expr_286 : int = addr_of_project_285[0] in let uarith_pointer_temp_287 : int = uarith_expr_286 + 1 in *addr_of_project_285 : int <- uarith_pointer_temp_287; let a_288 : (struct { int index; char[10] data; })* = &frame_275->a_186 in make_seq_expr_fun_277(a_288) in let (global print_struct : ((int) -> int, char*, item_184*) -> int)( exit_289, s_290, p_291) = let type frame_241 = struct { item_184* p_195; } in let frame_292 : frame_241* = alloc(frame_241) in frame_292->p_195 : item_184* <- p_291; let (make_seq_expr_fun_293 : (int) -> int)(make_seq_expr_arg_294) = exit_289(make_seq_expr_arg_294) in let (cont_apply_expr_fun_295 : (int) -> int)(apply_expr_296) = let type frame_242 = struct { } in let frame_297 : frame_242* = alloc(frame_242) in let make_string_298 = ".index=" in let (cont_apply_expr_fun_299 : (int) -> int)(apply_expr_300) = let type frame_243 = struct { } in let frame_301 : frame_243* = alloc(frame_243) in let p_302 : item_184* = frame_292->p_195 in let project_expr_303 : int = p_302->index in let (cont_apply_expr_fun_304 : (int) -> int)( apply_expr_305) = let type frame_244 = struct { } in let frame_306 : frame_244* = alloc(frame_244) in let make_string_307 = "\n" in let (cont_apply_expr_fun_308 : (int) -> int)( apply_expr_309) = let type frame_245 = struct { } in let frame_310 : frame_245* = alloc(frame_245) in make_seq_expr_fun_293(apply_expr_309) in print_string_263(cont_apply_expr_fun_308, make_string_307) in print_int_268(cont_apply_expr_fun_304, project_expr_303) in print_string_263(cont_apply_expr_fun_299, make_string_298) in print_string_263(cont_apply_expr_fun_295, s_290) in let (global main : ((int) -> int, int, char**) -> int)(exit_311, argc_312, argv_313) = let type frame_246 = struct { item_184 b_215; item_184 a_214; } in let frame_314 : frame_246* = alloc(frame_246) in let (make_seq_expr_fun_315 : (int) -> int)(make_seq_expr_arg_316) = exit_311(make_seq_expr_arg_316) in let make_var_defs_317 : int = 0 in let make_scalar_318 : int = 1 in let a_319 : (struct { int index; char[10] data; })* = &frame_314->a_214 in let addr_of_var_320 : (struct { int index; char[10] data; })* = a_319 in addr_of_var_320->index : int <- make_scalar_318; let make_string_321 = "a" in let a_322 : (struct { int index; char[10] data; })* = &frame_314->a_214 in let addr_of_var_323 : (struct { int index; char[10] data; })* = a_322 in let (cont_apply_expr_fun_324 : (int) -> int)(apply_expr_325) = let type frame_247 = struct { } in let frame_326 : frame_247* = alloc(frame_247) in let make_string_327 = "b" in let b_328 : (struct { int index; char[10] data; })* = &frame_314->b_215 in let addr_of_var_329 : (struct { int index; char[10] data; })* = b_328 in let (cont_apply_expr_fun_330 : (int) -> int)(apply_expr_331) = let type frame_248 = struct { } in let frame_332 : frame_248* = alloc(frame_248) in let (cont_apply_expr_fun_333 : (item_184*) -> int)( apply_expr_334) = let type frame_249 = struct { item_184 apply_expr_229; } in let frame_335 : frame_249* = alloc(frame_249) in let apply_expr_336 : (struct { int index; char[10] data; })* = &frame_335->apply_expr_229 in memcpy(apply_expr_336 : item_184, apply_expr_334); let apply_expr_337 : (struct { int index; char[10] data; })* = &frame_335->apply_expr_229 in let b_338 : (struct { int index; char[10] data; })* = &frame_314->b_215 in memcpy(b_338 : item_184, apply_expr_337); let make_string_339 = "a" in let a_340 : (struct { int index; char[10] data; })* = &frame_314->a_214 in let addr_of_var_341 : (struct { int index; char[10] data; })* = a_340 in let (cont_apply_expr_fun_342 : (int) -> int)( apply_expr_343) = let type frame_250 = struct { } in let frame_344 : frame_250* = alloc(frame_250) in let make_string_345 = "b" in let b_346 : (struct { int index; char[10] data; })* = &frame_314->b_215 in let addr_of_var_347 : (struct { int index; char[10] data; })* = b_346 in let (cont_apply_expr_fun_348 : (int) -> int)(apply_expr_349) = let type frame_251 = struct { } in let frame_350 : frame_251* = alloc(frame_251) in let make_scalar_351 : int = 0 in make_seq_expr_fun_315(make_scalar_351) in print_struct(cont_apply_expr_fun_348, make_string_345, addr_of_var_347) in print_struct(cont_apply_expr_fun_342, make_string_339, addr_of_var_341) in let a_352 : (struct { int index; char[10] data; })* = &frame_314->a_214 in f(cont_apply_expr_fun_333, a_352) in print_struct(cont_apply_expr_fun_330, make_string_327, addr_of_var_329) in print_struct(cont_apply_expr_fun_324, make_string_321, addr_of_var_323) in exit(0) Stage: Closure conversion let (print_string_426 : ((int) -> int, char*) -> int)(exit_427, v_428) = let print_string_429 = $external(%print_string : (char*) -> int, v_428) in exit_427(print_string_429) in let make_var_defs_430 : int = 0 in let (print_int_431 : ((int) -> int, int) -> int)(exit_432, v_433) = let print_int_434 = $external(%print_int : (int) -> int, v_433) in exit_432(print_int_434) in let make_var_defs_435 : int = 0 in let type item_436 = struct { int index; char[10] data; } in let (global f : ((struct { })*, (item_436*) -> int, item_436*) -> int)( data_seg_437, exit_438, a_439) = let type frame_440 = struct { item_436 make_seq_expr_arg_188; item_436 a_186; } in let frame_441 : frame_440* = alloc(frame_440) in let a_442 : (struct { int index; char[10] data; })* = &frame_441->a_186 in memcpy(a_442 : item_436, a_439); let (make_seq_expr_fun_443 : ((item_436*) -> int, frame_440*, item_436*) -> int)(exit_444, frame_445, make_seq_expr_arg_446) = let make_seq_expr_arg_447 : (struct { int index; char[10] data; })* = &frame_445->make_seq_expr_arg_188 in memcpy(make_seq_expr_arg_447 : item_436, make_seq_expr_arg_446); let make_seq_expr_arg_448 : (struct { int index; char[10] data; })* = make_seq_expr_arg_447 in let make_seq_expr_arg_449 : (struct { int index; char[10] data; })* = &frame_445->make_seq_expr_arg_188 in exit_444(make_seq_expr_arg_449) in let a_450 : (struct { int index; char[10] data; })* = &frame_441->a_186 in let addr_of_var_451 : (struct { int index; char[10] data; })* = a_450 in let addr_of_project_452 : int* = &addr_of_var_451->index in let addr_of_project_453 : int* = addr_of_project_452 in let uarith_expr_454 : int = addr_of_project_453[0] in let uarith_pointer_temp_455 : int = uarith_expr_454 + 1 in *addr_of_project_453 : int <- uarith_pointer_temp_455; let a_456 : (struct { int index; char[10] data; })* = &frame_441->a_186 in make_seq_expr_fun_443(exit_438, frame_441, a_456) in let (global print_struct : ((struct { })*, (int) -> int, char*, item_436*) -> int)(data_seg_457, exit_458, s_459, p_460) = let type frame_461 = struct { item_436* p_195; } in let frame_462 : frame_461* = alloc(frame_461) in frame_462->p_195 : item_436* <- p_460; let (make_seq_expr_fun_463 : ((int) -> int, int) -> int)(exit_464, make_seq_expr_arg_465) = exit_464(make_seq_expr_arg_465) in let (cont_apply_expr_fun_466 : ((int) -> int, frame_461*, int) -> int)(exit_467, frame_468, apply_expr_469) = let type frame_470 = struct { } in let frame_471 : frame_470* = alloc(frame_470) in let make_string_472 = ".index=" in let (cont_apply_expr_fun_473 : ((int) -> int, frame_461*, int) -> int)(exit_474, frame_475, apply_expr_476) = let type frame_477 = struct { } in let frame_478 : frame_477* = alloc(frame_477) in let p_479 : item_436* = frame_475->p_195 in let project_expr_480 : int = p_479->index in let (cont_apply_expr_fun_481 : ((int) -> int, int) -> int)(exit_482, apply_expr_483) = let type frame_484 = struct { } in let frame_485 : frame_484* = alloc(frame_484) in let make_string_486 = "\n" in let (cont_apply_expr_fun_487 : ((int) -> int, int) -> int)( exit_488, apply_expr_489) = let type frame_490 = struct { } in let frame_491 : frame_490* = alloc(frame_490) in make_seq_expr_fun_463(exit_488, apply_expr_489) in let closure (cont_apply_expr_fun_492 : (int) -> int) = cont_apply_expr_fun_487(exit_482) in print_string_426(cont_apply_expr_fun_492, make_string_486) in let closure (cont_apply_expr_fun_493 : (int) -> int) = cont_apply_expr_fun_481(exit_474) in print_int_431(cont_apply_expr_fun_493, project_expr_480) in let closure (cont_apply_expr_fun_494 : (int) -> int) = cont_apply_expr_fun_473(exit_467, frame_468) in print_string_426(cont_apply_expr_fun_494, make_string_472) in let closure (cont_apply_expr_fun_495 : (int) -> int) = cont_apply_expr_fun_466(exit_458, frame_462) in print_string_426(cont_apply_expr_fun_495, s_459) in let (global main : ((struct { })*, (int) -> int, int, char**) -> int)( data_seg_496, exit_497, argc_498, argv_499) = let type frame_500 = struct { item_436 b_215; item_436 a_214; } in let frame_501 : frame_500* = alloc(frame_500) in let (make_seq_expr_fun_502 : ((int) -> int, int) -> int)(exit_503, make_seq_expr_arg_504) = exit_503(make_seq_expr_arg_504) in let make_var_defs_505 : int = 0 in let make_scalar_506 : int = 1 in let a_507 : (struct { int index; char[10] data; })* = &frame_501->a_214 in let addr_of_var_508 : (struct { int index; char[10] data; })* = a_507 in addr_of_var_508->index : int <- make_scalar_506; let make_string_509 = "a" in let a_510 : (struct { int index; char[10] data; })* = &frame_501->a_214 in let addr_of_var_511 : (struct { int index; char[10] data; })* = a_510 in let (cont_apply_expr_fun_512 : ((struct { })*, (int) -> int, frame_500*, int) -> int)(data_seg_513, exit_514, frame_515, apply_expr_516) = let type frame_517 = struct { } in let frame_518 : frame_517* = alloc(frame_517) in let make_string_519 = "b" in let b_520 : (struct { int index; char[10] data; })* = &frame_515->b_215 in let addr_of_var_521 : (struct { int index; char[10] data; })* = b_520 in let (cont_apply_expr_fun_522 : ((struct { })*, (int) -> int, frame_500*, int) -> int)(data_seg_523, exit_524, frame_525, apply_expr_526) = let type frame_527 = struct { } in let frame_528 : frame_527* = alloc(frame_527) in let (cont_apply_expr_fun_529 : ((struct { })*, (int) -> int, frame_500*, item_436*) -> int)(data_seg_530, exit_531, frame_532, apply_expr_533) = let type frame_534 = struct { item_436 apply_expr_229; } in let frame_535 : frame_534* = alloc(frame_534) in let apply_expr_536 : (struct { int index; char[10] data; })* = &frame_535->apply_expr_229 in memcpy(apply_expr_536 : item_436, apply_expr_533); let apply_expr_537 : (struct { int index; char[10] data; })* = &frame_535->apply_expr_229 in let b_538 : (struct { int index; char[10] data; })* = &frame_532->b_215 in memcpy(b_538 : item_436, apply_expr_537); let make_string_539 = "a" in let a_540 : (struct { int index; char[10] data; })* = &frame_532->a_214 in let addr_of_var_541 : (struct { int index; char[10] data; })* = a_540 in let (cont_apply_expr_fun_542 : ((struct { })*, (int) -> int, frame_500*, int) -> int)( data_seg_543, exit_544, frame_545, apply_expr_546) = let type frame_547 = struct { } in let frame_548 : frame_547* = alloc(frame_547) in let make_string_549 = "b" in let b_550 : (struct { int index; char[10] data; })* = &frame_545->b_215 in let addr_of_var_551 : (struct { int index; char[10] data; })* = b_550 in let (cont_apply_expr_fun_552 : ((int) -> int, int) -> int)(exit_553, apply_expr_554) = let type frame_555 = struct { } in let frame_556 : frame_555* = alloc(frame_555) in let make_scalar_557 : int = 0 in make_seq_expr_fun_502(exit_553, make_scalar_557) in let closure (cont_apply_expr_fun_558 : (int) -> int) = cont_apply_expr_fun_552(exit_544) in print_struct(data_seg_543, cont_apply_expr_fun_558, make_string_549, addr_of_var_551) in let closure (cont_apply_expr_fun_559 : (int) -> int) = cont_apply_expr_fun_542(data_seg_530, exit_531, frame_532) in print_struct(data_seg_530, cont_apply_expr_fun_559, make_string_539, addr_of_var_541) in let a_560 : (struct { int index; char[10] data; })* = &frame_525->a_214 in let closure (cont_apply_expr_fun_561 : (item_436*) -> int) = cont_apply_expr_fun_529(data_seg_523, exit_524, frame_525) in f(data_seg_523, cont_apply_expr_fun_561, a_560) in let closure (cont_apply_expr_fun_562 : (int) -> int) = cont_apply_expr_fun_522(data_seg_513, exit_514, frame_515) in print_struct(data_seg_513, cont_apply_expr_fun_562, make_string_519, addr_of_var_521) in let closure (cont_apply_expr_fun_563 : (int) -> int) = cont_apply_expr_fun_512(data_seg_496, exit_497, frame_501) in print_struct(data_seg_496, cont_apply_expr_fun_563, make_string_509, addr_of_var_511) in exit(0) Stage: Program closure Program: Data segment type: struct { } Init function: init_609 Types: item_585 = struct { int index; char[10] data; } frame_584 = struct { item_585 make_seq_expr_arg_188; item_585 a_186; } frame_583 = struct { item_585* p_195; } frame_582 = struct { } frame_581 = struct { } frame_580 = struct { } frame_579 = struct { } frame_578 = struct { item_585 b_215; item_585 a_214; } frame_577 = struct { } frame_576 = struct { } frame_575 = struct { item_585 apply_expr_229; } frame_574 = struct { } frame_573 = struct { } data_seg_572 = struct { } Strings: make_string_591 = ".index=" make_string_590 = "\n" make_string_589 = "a" make_string_588 = "b" make_string_587 = "a" make_string_586 = "b" Functions: (init_609 : ((struct { })*, (int) -> int) -> int)(data_seg_718, exit_719) = let make_var_defs_720 : int = 0 in let make_var_defs_721 : int = 0 in exit_719(0) (global %init : () -> int)() = $internal(init_609) : int (main_608 : ((struct { })*, (int) -> int, int, char**) -> int)( data_seg_706, exit_707, argc_708, argv_709) = let frame_710 : frame_578* = alloc(frame_578) in let make_var_defs_711 : int = 0 in let make_scalar_712 : int = 1 in let a_713 : (struct { int index; char[10] data; })* = &frame_710->a_214 in let addr_of_var_714 : (struct { int index; char[10] data; })* = a_713 in addr_of_var_714->index : int <- make_scalar_712; let a_715 : (struct { int index; char[10] data; })* = &frame_710->a_214 in let addr_of_var_716 : (struct { int index; char[10] data; })* = a_715 in let closure (cont_apply_expr_fun_717 : (int) -> int) = cont_apply_expr_fun_607(data_seg_706, exit_707, frame_710) in print_struct_601(data_seg_706, cont_apply_expr_fun_717, make_string_589, addr_of_var_716) (global %main : (int, char**) -> int)(argc_704, argv_705) = $internal(main_608, argc_704, argv_705) : int (cont_apply_expr_fun_607 : ((struct { })*, (int) -> int, frame_578*, int) -> int)(data_seg_696, exit_697, frame_698, apply_expr_699) = let frame_700 : frame_577* = alloc(frame_577) in let b_701 : (struct { int index; char[10] data; })* = &frame_698->b_215 in let addr_of_var_702 : (struct { int index; char[10] data; })* = b_701 in let closure (cont_apply_expr_fun_703 : (int) -> int) = cont_apply_expr_fun_606(data_seg_696, exit_697, frame_698) in print_struct_601(data_seg_696, cont_apply_expr_fun_703, make_string_588, addr_of_var_702) (cont_apply_expr_fun_606 : ((struct { })*, (int) -> int, frame_578*, int) -> int)(data_seg_689, exit_690, frame_691, apply_expr_692) = let frame_693 : frame_576* = alloc(frame_576) in let a_694 : (struct { int index; char[10] data; })* = &frame_691->a_214 in let closure (cont_apply_expr_fun_695 : (item_585*) -> int) = cont_apply_expr_fun_605(data_seg_689, exit_690, frame_691) in f_595(data_seg_689, cont_apply_expr_fun_695, a_694) (cont_apply_expr_fun_605 : ((struct { })*, (int) -> int, frame_578*, item_585*) -> int)(data_seg_678, exit_679, frame_680, apply_expr_681) = let frame_682 : frame_575* = alloc(frame_575) in let apply_expr_683 : (struct { int index; char[10] data; })* = &frame_682->apply_expr_229 in memcpy(apply_expr_683 : item_585, apply_expr_681); let apply_expr_684 : (struct { int index; char[10] data; })* = &frame_682->apply_expr_229 in let b_685 : (struct { int index; char[10] data; })* = &frame_680->b_215 in memcpy(b_685 : item_585, apply_expr_684); let a_686 : (struct { int index; char[10] data; })* = &frame_680->a_214 in let addr_of_var_687 : (struct { int index; char[10] data; })* = a_686 in let closure (cont_apply_expr_fun_688 : (int) -> int) = cont_apply_expr_fun_604(data_seg_678, exit_679, frame_680) in print_struct_601(data_seg_678, cont_apply_expr_fun_688, make_string_587, addr_of_var_687) (cont_apply_expr_fun_604 : ((struct { })*, (int) -> int, frame_578*, int) -> int)(data_seg_670, exit_671, frame_672, apply_expr_673) = let frame_674 : frame_574* = alloc(frame_574) in let b_675 : (struct { int index; char[10] data; })* = &frame_672->b_215 in let addr_of_var_676 : (struct { int index; char[10] data; })* = b_675 in let closure (cont_apply_expr_fun_677 : (int) -> int) = cont_apply_expr_fun_603(exit_671) in print_struct_601(data_seg_670, cont_apply_expr_fun_677, make_string_586, addr_of_var_676) (cont_apply_expr_fun_603 : ((int) -> int, int) -> int)(exit_666, apply_expr_667) = let frame_668 : frame_573* = alloc(frame_573) in let make_scalar_669 : int = 0 in make_seq_expr_fun_602(exit_666, make_scalar_669) (make_seq_expr_fun_602 : ((int) -> int, int) -> int)(exit_664, make_seq_expr_arg_665) = exit_664(make_seq_expr_arg_665) (print_struct_601 : ((struct { })*, (int) -> int, char*, item_585*) -> int)(data_seg_658, exit_659, s_660, p_661) = let frame_662 : frame_583* = alloc(frame_583) in frame_662->p_195 : item_585* <- p_661; let closure (cont_apply_expr_fun_663 : (int) -> int) = cont_apply_expr_fun_600(exit_659, frame_662) in print_string_592(cont_apply_expr_fun_663, s_660) (global %print_struct : (char*, item_585*) -> int)(s_656, p_657) = $internal(print_struct_601, s_656, p_657) : int (cont_apply_expr_fun_600 : ((int) -> int, frame_583*, int) -> int)( exit_651, frame_652, apply_expr_653) = let frame_654 : frame_582* = alloc(frame_582) in let closure (cont_apply_expr_fun_655 : (int) -> int) = cont_apply_expr_fun_599(exit_651, frame_652) in print_string_592(cont_apply_expr_fun_655, make_string_591) (cont_apply_expr_fun_599 : ((int) -> int, frame_583*, int) -> int)( exit_644, frame_645, apply_expr_646) = let frame_647 : frame_581* = alloc(frame_581) in let p_648 : item_585* = frame_645->p_195 in let project_expr_649 : int = p_648->index in let closure (cont_apply_expr_fun_650 : (int) -> int) = cont_apply_expr_fun_598(exit_644) in print_int_593(cont_apply_expr_fun_650, project_expr_649) (cont_apply_expr_fun_598 : ((int) -> int, int) -> int)(exit_640, apply_expr_641) = let frame_642 : frame_580* = alloc(frame_580) in let closure (cont_apply_expr_fun_643 : (int) -> int) = cont_apply_expr_fun_597(exit_640) in print_string_592(cont_apply_expr_fun_643, make_string_590) (cont_apply_expr_fun_597 : ((int) -> int, int) -> int)(exit_637, apply_expr_638) = let frame_639 : frame_579* = alloc(frame_579) in make_seq_expr_fun_596(exit_637, apply_expr_638) (make_seq_expr_fun_596 : ((int) -> int, int) -> int)(exit_635, make_seq_expr_arg_636) = exit_635(make_seq_expr_arg_636) (f_595 : ((struct { })*, (item_585*) -> int, item_585*) -> int)( data_seg_623, exit_624, a_625) = let frame_626 : frame_584* = alloc(frame_584) in let a_627 : (struct { int index; char[10] data; })* = &frame_626->a_186 in memcpy(a_627 : item_585, a_625); let a_628 : (struct { int index; char[10] data; })* = &frame_626->a_186 in let addr_of_var_629 : (struct { int index; char[10] data; })* = a_628 in let addr_of_project_630 : int* = &addr_of_var_629->index in let addr_of_project_631 : int* = addr_of_project_630 in let uarith_expr_632 : int = addr_of_project_631[0] in let uarith_pointer_temp_633 : int = uarith_expr_632 + 1 in *addr_of_project_631 : int <- uarith_pointer_temp_633; let a_634 : (struct { int index; char[10] data; })* = &frame_626->a_186 in make_seq_expr_fun_594(exit_624, frame_626, a_634) (global %f : (item_585*) -> item_585*)(a_622) = $internal(f_595, a_622) : item_585* (make_seq_expr_fun_594 : ((item_585*) -> int, frame_584*, item_585*) -> int)(exit_616, frame_617, make_seq_expr_arg_618) = let make_seq_expr_arg_619 : (struct { int index; char[10] data; })* = &frame_617->make_seq_expr_arg_188 in memcpy(make_seq_expr_arg_619 : item_585, make_seq_expr_arg_618); let make_seq_expr_arg_620 : (struct { int index; char[10] data; })* = make_seq_expr_arg_619 in let make_seq_expr_arg_621 : (struct { int index; char[10] data; })* = &frame_617->make_seq_expr_arg_188 in exit_616(make_seq_expr_arg_621) (print_int_593 : ((int) -> int, int) -> int)(exit_613, v_614) = let print_int_615 = $external(%print_int : (int) -> int, v_614) in exit_613(print_int_615) (print_string_592 : ((int) -> int, char*) -> int)(exit_610, v_611) = let print_string_612 = $external(%print_string : (char*) -> int, v_611) in exit_610(print_string_612) Stage: Deadcode elimination Program: Data segment type: struct { } Init function: init_609 Types: item_585 = struct { int index; char[10] data; } frame_584 = struct { item_585 make_seq_expr_arg_188; item_585 a_186; } frame_583 = struct { item_585* p_195; } frame_578 = struct { item_585 b_215; item_585 a_214; } frame_575 = struct { item_585 apply_expr_229; } Strings: make_string_591 = ".index=" make_string_590 = "\n" make_string_589 = "a" make_string_588 = "b" make_string_587 = "a" make_string_586 = "b" Functions: (init_609 : ((struct { })*, (int) -> int) -> int)(data_seg_718, exit_719) = exit_719(0) (global %init : () -> int)() = $internal(init_609) : int (main_608 : ((struct { })*, (int) -> int, int, char**) -> int)( data_seg_706, exit_707, argc_708, argv_709) = let frame_710 : frame_578* = alloc(frame_578) in let make_scalar_712 : int = 1 in let a_713 : (struct { int index; char[10] data; })* = &frame_710->a_214 in let addr_of_var_714 : (struct { int index; char[10] data; })* = a_713 in addr_of_var_714->index : int <- make_scalar_712; let a_715 : (struct { int index; char[10] data; })* = &frame_710->a_214 in let addr_of_var_716 : (struct { int index; char[10] data; })* = a_715 in let closure (cont_apply_expr_fun_717 : (int) -> int) = cont_apply_expr_fun_607(data_seg_706, exit_707, frame_710) in print_struct_601(data_seg_706, cont_apply_expr_fun_717, make_string_589, addr_of_var_716) (global %main : (int, char**) -> int)(argc_704, argv_705) = $internal(main_608, argc_704, argv_705) : int (cont_apply_expr_fun_607 : ((struct { })*, (int) -> int, frame_578*, int) -> int)(data_seg_696, exit_697, frame_698, apply_expr_699) = let b_701 : (struct { int index; char[10] data; })* = &frame_698->b_215 in let addr_of_var_702 : (struct { int index; char[10] data; })* = b_701 in let closure (cont_apply_expr_fun_703 : (int) -> int) = cont_apply_expr_fun_606(data_seg_696, exit_697, frame_698) in print_struct_601(data_seg_696, cont_apply_expr_fun_703, make_string_588, addr_of_var_702) (cont_apply_expr_fun_606 : ((struct { })*, (int) -> int, frame_578*, int) -> int)(data_seg_689, exit_690, frame_691, apply_expr_692) = let a_694 : (struct { int index; char[10] data; })* = &frame_691->a_214 in let closure (cont_apply_expr_fun_695 : (item_585*) -> int) = cont_apply_expr_fun_605(data_seg_689, exit_690, frame_691) in f_595(data_seg_689, cont_apply_expr_fun_695, a_694) (cont_apply_expr_fun_605 : ((struct { })*, (int) -> int, frame_578*, item_585*) -> int)(data_seg_678, exit_679, frame_680, apply_expr_681) = let frame_682 : frame_575* = alloc(frame_575) in let apply_expr_683 : (struct { int index; char[10] data; })* = &frame_682->apply_expr_229 in memcpy(apply_expr_683 : item_585, apply_expr_681); let apply_expr_684 : (struct { int index; char[10] data; })* = &frame_682->apply_expr_229 in let b_685 : (struct { int index; char[10] data; })* = &frame_680->b_215 in memcpy(b_685 : item_585, apply_expr_684); let a_686 : (struct { int index; char[10] data; })* = &frame_680->a_214 in let addr_of_var_687 : (struct { int index; char[10] data; })* = a_686 in let closure (cont_apply_expr_fun_688 : (int) -> int) = cont_apply_expr_fun_604(data_seg_678, exit_679, frame_680) in print_struct_601(data_seg_678, cont_apply_expr_fun_688, make_string_587, addr_of_var_687) (cont_apply_expr_fun_604 : ((struct { })*, (int) -> int, frame_578*, int) -> int)(data_seg_670, exit_671, frame_672, apply_expr_673) = let b_675 : (struct { int index; char[10] data; })* = &frame_672->b_215 in let addr_of_var_676 : (struct { int index; char[10] data; })* = b_675 in let closure (cont_apply_expr_fun_677 : (int) -> int) = cont_apply_expr_fun_603(exit_671) in print_struct_601(data_seg_670, cont_apply_expr_fun_677, make_string_586, addr_of_var_676) (cont_apply_expr_fun_603 : ((int) -> int, int) -> int)(exit_666, apply_expr_667) = let make_scalar_669 : int = 0 in make_seq_expr_fun_602(exit_666, make_scalar_669) (make_seq_expr_fun_602 : ((int) -> int, int) -> int)(exit_664, make_seq_expr_arg_665) = exit_664(make_seq_expr_arg_665) (print_struct_601 : ((struct { })*, (int) -> int, char*, item_585*) -> int)(data_seg_658, exit_659, s_660, p_661) = let frame_662 : frame_583* = alloc(frame_583) in frame_662->p_195 : item_585* <- p_661; let closure (cont_apply_expr_fun_663 : (int) -> int) = cont_apply_expr_fun_600(exit_659, frame_662) in print_string_592(cont_apply_expr_fun_663, s_660) (global %print_struct : (char*, item_585*) -> int)(s_656, p_657) = $internal(print_struct_601, s_656, p_657) : int (cont_apply_expr_fun_600 : ((int) -> int, frame_583*, int) -> int)( exit_651, frame_652, apply_expr_653) = let closure (cont_apply_expr_fun_655 : (int) -> int) = cont_apply_expr_fun_599(exit_651, frame_652) in print_string_592(cont_apply_expr_fun_655, make_string_591) (cont_apply_expr_fun_599 : ((int) -> int, frame_583*, int) -> int)( exit_644, frame_645, apply_expr_646) = let p_648 : item_585* = frame_645->p_195 in let project_expr_649 : int = p_648->index in let closure (cont_apply_expr_fun_650 : (int) -> int) = cont_apply_expr_fun_598(exit_644) in print_int_593(cont_apply_expr_fun_650, project_expr_649) (cont_apply_expr_fun_598 : ((int) -> int, int) -> int)(exit_640, apply_expr_641) = let closure (cont_apply_expr_fun_643 : (int) -> int) = cont_apply_expr_fun_597(exit_640) in print_string_592(cont_apply_expr_fun_643, make_string_590) (cont_apply_expr_fun_597 : ((int) -> int, int) -> int)(exit_637, apply_expr_638) = make_seq_expr_fun_596(exit_637, apply_expr_638) (make_seq_expr_fun_596 : ((int) -> int, int) -> int)(exit_635, make_seq_expr_arg_636) = exit_635(make_seq_expr_arg_636) (f_595 : ((struct { })*, (item_585*) -> int, item_585*) -> int)( data_seg_623, exit_624, a_625) = let frame_626 : frame_584* = alloc(frame_584) in let a_627 : (struct { int index; char[10] data; })* = &frame_626->a_186 in memcpy(a_627 : item_585, a_625); let a_628 : (struct { int index; char[10] data; })* = &frame_626->a_186 in let addr_of_var_629 : (struct { int index; char[10] data; })* = a_628 in let addr_of_project_630 : int* = &addr_of_var_629->index in let addr_of_project_631 : int* = addr_of_project_630 in let uarith_expr_632 : int = addr_of_project_631[0] in let uarith_pointer_temp_633 : int = uarith_expr_632 + 1 in *addr_of_project_631 : int <- uarith_pointer_temp_633; let a_634 : (struct { int index; char[10] data; })* = &frame_626->a_186 in make_seq_expr_fun_594(exit_624, frame_626, a_634) (global %f : (item_585*) -> item_585*)(a_622) = $internal(f_595, a_622) : item_585* (make_seq_expr_fun_594 : ((item_585*) -> int, frame_584*, item_585*) -> int)(exit_616, frame_617, make_seq_expr_arg_618) = let make_seq_expr_arg_619 : (struct { int index; char[10] data; })* = &frame_617->make_seq_expr_arg_188 in memcpy(make_seq_expr_arg_619 : item_585, make_seq_expr_arg_618); let make_seq_expr_arg_621 : (struct { int index; char[10] data; })* = &frame_617->make_seq_expr_arg_188 in exit_616(make_seq_expr_arg_621) (print_int_593 : ((int) -> int, int) -> int)(exit_613, v_614) = let print_int_615 = $external(%print_int : (int) -> int, v_614) in exit_613(print_int_615) (print_string_592 : ((int) -> int, char*) -> int)(exit_610, v_611) = let print_string_612 = $external(%print_string : (char*) -> int, v_611) in exit_610(print_string_612)