/* Generated by CIL v. 1.5.1 */ /* print_CIL_Input is true */ #include int babel_wrapper_foo1(int * __cil_fp_b, int * __cil_pp_b, int a) // function name insert { // wrapper for function foo1 // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[4]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo1"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_b); arg[1] = Pl_Mk_Integer(__cil_pp_b); arg[2] = Pl_Mk_Integer(a); //routine code, reserve a place for return value arg[3] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 4, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[3]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } int babel_wrapper_foo4(int * __cil_fp_a, int * __cil_pp_a) // function name insert { // wrapper for function foo4 // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[3]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo4"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_a); arg[1] = Pl_Mk_Integer(__cil_pp_a); //routine code, reserve a place for return value arg[2] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 3, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[2]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } int babel_wrapper_foo3(int * __cil_fp_fact, int * __cil_pp_fact, int n) // function name insert { // wrapper for function foo3 // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[4]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo3"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_fact); arg[1] = Pl_Mk_Integer(__cil_pp_fact); arg[2] = Pl_Mk_Integer(n); //routine code, reserve a place for return value arg[3] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 4, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[3]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } int babel_wrapper_foo(int * __cil_fp_a, int * __cil_fp_fact, int * __cil_pp_a, int * __cil_pp_fact, int n) // function name insert { // wrapper for function foo // function name insert int return_value; // return value type (how about array type) //rountine code int func; PlTerm arg[6]; // function variable + return value insert PlBool res; func = Pl_Find_Atom("foo"); // function name insert //routine code Pl_Query_Begin(PL_FALSE); //prepare parameters //partial routine code, pass in parameter // we need to init arguments and return value // arg[0] = Pl_Mk_Integer(n); arg[0] = Pl_Mk_Integer(__cil_fp_a); arg[1] = Pl_Mk_Integer(__cil_fp_fact); arg[2] = Pl_Mk_Integer(__cil_pp_a); arg[3] = Pl_Mk_Integer(__cil_pp_fact); arg[4] = Pl_Mk_Integer(n); //routine code, reserve a place for return value arg[5] = Pl_Mk_Variable(); //partial routine code, 2 is not routine. (number of arguments) + 1 res = Pl_Query_Call(func, 6, arg); // insert (variable+return value) //get return value, partial routine code, 1 is not routine return_value = Pl_Rd_Integer(arg[5]); // insert () //routine code Pl_Query_End(PL_KEEP_FOR_PROLOG); //routine code return return_value; } #line 4 "ssa_c.c" void foo3_cil_lr_1(int *__cil_ap_fact , int n , int c ) { int __cil_tmp4 ; int __cil_tmp5 ; int __cil_tmp4_ssa_1 ; int __cil_tmp5_ssa_1 ; int c_ssa_1 ; { #line 6 __cil_tmp4 = 0; #line 7 __cil_tmp5 = 0; #line 39 "ssa_condition.c" __cil_tmp4_ssa_1 = c <= n; #line 39 if (__cil_tmp4_ssa_1 == 0) { #line 40 goto return_label; } else { } #line 40 __cil_tmp5_ssa_1 = *__cil_ap_fact; #line 40 *__cil_ap_fact = __cil_tmp5_ssa_1 + c; #line 39 c_ssa_1 = c + 1; #line 42 foo3_cil_lr_1(__cil_ap_fact, n, c_ssa_1); return_label: /* CIL Label */ #line 4 "ssa_c.c" return; } } #line 47 "ssa_condition.c" void foo_cil_lr_1(int *__cil_ap_a , int *__cil_ap_fact , int n , int c ) { int __cil_tmp5 ; int __cil_tmp6 ; int __cil_tmp5_ssa_1 ; int __cil_tmp6_ssa_1 ; int c_ssa_1 ; { #line 49 __cil_tmp5 = 0; #line 50 __cil_tmp6 = 0; #line 21 __cil_tmp5_ssa_1 = c <= n; #line 21 if (__cil_tmp5_ssa_1 == 0) { #line 22 goto return_label; } else { } #line 22 __cil_tmp6_ssa_1 = *__cil_ap_fact; #line 22 *__cil_ap_fact = __cil_tmp6_ssa_1 + c; #line 21 c_ssa_1 = c + 1; #line 24 foo_cil_lr_1(__cil_ap_a, __cil_ap_fact, n, c_ssa_1); return_label: /* CIL Label */ #line 47 return; } } #line 17 int foo3(int n ) ; #line 19 extern int printf() ; #line 1 "ssa_condition.c" int foo(int n ) { int a ; int fact ; int c ; int r ; int tmp ; int *__cil_fp_a ; int *__cil_fp_fact ; int *__cil_pp_a ; int *__cil_pp_fact ; int __cil_tmp11 ; int a_ssa_1 ; int fact_ssa_1 ; int a_ssa_2 ; int __cil_tmp11_ssa_1 ; int a_ssa_3 ; int tmp_ssa_1 ; int r_ssa_1 ; int c_ssa_1 ; int a_ssa_4 ; int fact_ssa_2 ; int a_ssa_5 ; int __retres23 ; { #line 3 __cil_pp_fact = & fact; #line 3 __cil_pp_a = & a; #line 3 __cil_fp_fact = & fact; #line 3 __cil_fp_a = & a; #line 3 return babel_wrapper_foo(__cil_fp_a, __cil_fp_fact, __cil_pp_a, __cil_pp_fact, n); #line 3 a = 0; #line 4 fact = 0; #line 5 c = 0; #line 6 r = 0; #line 7 tmp = 0; #line 8 __cil_fp_a = & a; #line 9 __cil_fp_fact = & fact; #line 10 __cil_pp_a = & a; #line 11 __cil_pp_fact = & fact; #line 12 __cil_tmp11 = 0; #line 3 a_ssa_1 = 1; #line 4 fact_ssa_1 = 1; #line 5 a_ssa_2 = a_ssa_1 + 1; #line 8 __cil_tmp11_ssa_1 = a_ssa_2 > 2; #line 8 if (__cil_tmp11_ssa_1 != 0) { #line 10 a_ssa_3 = a_ssa_2 + 2; } else { #line 14 a_ssa_3 = 4; } #line 17 tmp_ssa_1 = foo3(4); #line 17 r_ssa_1 = tmp_ssa_1; #line 19 printf("%d\n", r_ssa_1); #line 21 c_ssa_1 = 1; #line 24 *__cil_fp_a = a_ssa_3; #line 25 *__cil_fp_fact = fact_ssa_1; #line 21 foo_cil_lr_1(__cil_pp_a, __cil_pp_fact, n, c_ssa_1); #line 22 a_ssa_4 = *__cil_fp_a; #line 23 fact_ssa_2 = *__cil_fp_fact; #line 24 printf("%d\n", fact_ssa_2); #line 26 a_ssa_5 = a_ssa_4 + 3; #line 28 __retres23 = 0; #line 1 return (__retres23); } } #line 34 "ssa_condition.c" int foo3(int n ) { int fact ; int c ; int *__cil_fp_fact ; int *__cil_pp_fact ; int fact_ssa_1 ; int c_ssa_1 ; int c_ssa_2 ; int fact_ssa_2 ; { #line 36 __cil_pp_fact = & fact; #line 36 __cil_fp_fact = & fact; #line 36 return babel_wrapper_foo3(__cil_fp_fact, __cil_pp_fact, n); #line 36 fact = 0; #line 37 c = 0; #line 38 __cil_fp_fact = & fact; #line 39 __cil_pp_fact = & fact; #line 36 fact_ssa_1 = 0; #line 37 c_ssa_1 = 0; #line 39 c_ssa_2 = 1; #line 42 *__cil_fp_fact = fact_ssa_1; #line 39 foo3_cil_lr_1(__cil_pp_fact, n, c_ssa_2); #line 40 fact_ssa_2 = *__cil_fp_fact; #line 43 return (fact_ssa_2); } } #line 49 "ssa_condition.c" int foo4(void) { int a ; int b ; int c ; int *p ; int fact ; int n ; int *__cil_fp_a ; int *__cil_pp_a ; int __cil_tmp9 ; int __cil_tmp10 ; int __cil_tmp11 ; int __cil_tmp12 ; int a_ssa_1 ; int b_ssa_1 ; int c_ssa_1 ; int *p_ssa_1 ; int fact_ssa_1 ; int n_ssa_1 ; int __cil_tmp9_ssa_1 ; int a_ssa_2 ; int __cil_tmp10_ssa_1 ; int b_ssa_2 ; int a_ssa_3 ; int a_ssa_4 ; int __cil_tmp11_ssa_1 ; int b_ssa_3 ; int __cil_tmp12_ssa_1 ; int __retres28 ; { #line 51 __cil_pp_a = & a; #line 51 __cil_fp_a = & a; #line 51 return babel_wrapper_foo4(__cil_fp_a, __cil_pp_a); #line 51 a = 0; #line 52 b = 0; #line 53 c = 0; #line 54 p = (int *)0; #line 55 fact = 0; #line 56 n = 0; #line 57 __cil_fp_a = & a; #line 58 __cil_pp_a = & a; #line 59 __cil_tmp9 = 0; #line 60 __cil_tmp10 = 0; #line 61 __cil_tmp11 = 0; #line 62 __cil_tmp12 = 0; #line 53 a_ssa_1 = 2; #line 54 b_ssa_1 = 1; #line 55 c_ssa_1 = 3; #line 57 p_ssa_1 = __cil_pp_a; #line 59 fact_ssa_1 = 1; #line 61 n_ssa_1 = 10; #line 63 __cil_tmp9_ssa_1 = b_ssa_1 == 1; #line 63 if (__cil_tmp9_ssa_1 != 0) { #line 65 a_ssa_2 = 3; #line 67 __cil_tmp10_ssa_1 = c_ssa_1 == 2; #line 67 if (__cil_tmp10_ssa_1 != 0) { #line 68 b_ssa_2 = 2; } else { #line 70 b_ssa_2 = 4; } #line 71 *p_ssa_1 = 2; #line 72 a_ssa_3 = *__cil_fp_a; #line 72 a_ssa_4 = 5; #line 73 __cil_tmp11_ssa_1 = __cil_tmp11; } else { #line 76 a_ssa_2 = 4; #line 77 __cil_tmp11_ssa_1 = c_ssa_1 == 2; #line 77 if (__cil_tmp11_ssa_1 != 0) { #line 78 b_ssa_2 = 5; } else { #line 80 b_ssa_2 = 6; } #line 81 *p_ssa_1 = 3; #line 82 a_ssa_3 = *__cil_fp_a; #line 82 a_ssa_4 = 7; #line 83 __cil_tmp10_ssa_1 = __cil_tmp10; } #line 86 b_ssa_3 = a_ssa_4; #line 89 printf("a : %d\n", a_ssa_4); #line 90 printf("b : %d\n", b_ssa_3); #line 91 printf("c : %d\n", c_ssa_1); #line 92 *__cil_fp_a = a_ssa_4; #line 92 __cil_tmp12_ssa_1 = *p_ssa_1; #line 92 printf("p : %d\n", __cil_tmp12_ssa_1); #line 94 __retres28 = 0; #line 49 return (__retres28); } } #line 98 "ssa_condition.c" int foo1(int a ) { int b ; int *p ; int c ; int *__cil_fp_b ; int *__cil_pp_b ; int __cil_tmp7 ; int __cil_tmp8 ; int b_ssa_1 ; int *p_ssa_1 ; int c_ssa_1 ; int b_ssa_2 ; int __cil_tmp7_ssa_1 ; int b_ssa_3 ; int c_ssa_2 ; int __cil_tmp8_ssa_1 ; { #line 100 __cil_pp_b = & b; #line 100 __cil_fp_b = & b; #line 100 return babel_wrapper_foo1(__cil_fp_b, __cil_pp_b, a); #line 100 b = 0; #line 101 p = (int *)0; #line 102 c = 0; #line 103 __cil_fp_b = & b; #line 104 __cil_pp_b = & b; #line 105 __cil_tmp7 = 0; #line 106 __cil_tmp8 = 0; #line 100 b_ssa_1 = a; #line 101 *__cil_fp_b = b_ssa_1; #line 101 p_ssa_1 = __cil_pp_b; #line 102 *__cil_fp_b = b_ssa_1; #line 103 c_ssa_1 = *p_ssa_1; #line 104 *__cil_fp_b = b_ssa_1; #line 105 *p_ssa_1 = 5; #line 106 b_ssa_2 = *__cil_fp_b; #line 106 printf("a : %d\n", a); #line 107 printf("b : %d\n", b_ssa_2); #line 108 printf("c : %d\n", c_ssa_1); #line 109 *__cil_fp_b = b_ssa_2; #line 109 __cil_tmp7_ssa_1 = *p_ssa_1; #line 109 printf("p : %d\n", __cil_tmp7_ssa_1); #line 112 b_ssa_3 = 6; #line 113 c_ssa_2 = 7; #line 115 printf("a : %d\n", a); #line 116 printf("b : %d\n", b_ssa_3); #line 117 printf("c : %d\n", c_ssa_2); #line 118 *__cil_fp_b = b_ssa_3; #line 118 __cil_tmp8_ssa_1 = *p_ssa_1; #line 118 printf("p : %d\n", __cil_tmp8_ssa_1); #line 124 return (b_ssa_3); } } #line 129 "ssa_condition.c" int main(int argc , char **argv ) { int __retres3 ; { Pl_Start_Prolog(argc, argv); #line 131 foo1(1); #line 133 foo(5); #line 135 __retres3 = 0; { Pl_Stop_Prolog(); #line 129 return (__retres3); } } }