; start of dump from pass_build_ealias (../../src/gcc/tree-ssa-structalias.c:7230) ;; Function ravif2 (ravif2, funcdef_no=0, decl_uid=364, cgraph_uid=0, symbol_order=0) Points-to analysis Constraints: ANYTHING = &ANYTHING ESCAPED = *ESCAPED ESCAPED = ESCAPED + UNKNOWN *ESCAPED = NONLOCAL NONLOCAL = &NONLOCAL NONLOCAL = &ESCAPED INTEGER = &ANYTHING L = &NONLOCAL _11 = *L + 256 _12 = *_11 cl_13 = *_12 _14 = *L + 256 base_15 = *_14 + 256 _16 = *L + 256 ESCAPED = _16 ESCAPED = &NULL ESCAPED = &NULL _18 = *L + 256 base_19 = *_18 + 256 _22 = *cl_13 + 192 _23 = *_22 + 384 _26 = *_23 *base_19 + 128 = _26 _30 = *cl_13 + 192 _31 = *_30 + 384 _34 = *_31 + 64 *base_19 + 192 = _34 _36 = *L + 256 base_37 = *_36 + 256 _40 = *base_37 + 192 _44 = *base_37 + 192 _48 = *base_37 + 128 iftmp.1_2 = &NONLOCAL iftmp.1_2 = &NULL isfalse_0_4_1 = &NONLOCAL isfalse_0_4_1 = &NULL isfalse_0_4_1 = &NONLOCAL _55 = *L + 256 base_56 = *_55 + 256 derefaddrtmp = &NULL *base_56 + 128 = derefaddrtmp derefaddrtmp = &NONLOCAL *base_56 + 192 = derefaddrtmp _63 = *L + 256 base_64 = *_63 + 256 _67 = *base_64 + 192 _71 = *base_64 + 192 _75 = *base_64 + 128 iftmp.3_4 = &NONLOCAL iftmp.3_4 = &NULL isfalse_0_10_3 = &NONLOCAL isfalse_0_10_3 = &NULL isfalse_0_10_3 = &NONLOCAL _82 = isfalse_0_10_3 _92 = *L + 256 base_93 = *_92 + 256 _96 = *cl_13 + 192 _97 = *_96 + 384 _100 = *_97 *base_93 + 128 = _100 _104 = *cl_13 + 192 _105 = *_104 + 384 _108 = *_105 + 64 *base_93 + 192 = _108 _110 = *L + 256 base_111 = *_110 + 256 _114 = *base_111 + 192 _118 = *base_111 + 192 _122 = *base_111 + 128 iftmp.5_6 = &NONLOCAL iftmp.5_6 = &NULL isfalse_0_16_5 = &NONLOCAL isfalse_0_16_5 = &NULL isfalse_0_16_5 = &NONLOCAL _129 = *L + 256 base_130 = *_129 + 256 derefaddrtmp = &NULL *base_130 + 128 = derefaddrtmp derefaddrtmp = &NONLOCAL *base_130 + 192 = derefaddrtmp ESCAPED = &STRING ESCAPED = &NONLOCAL ESCAPED = &NONLOCAL _138 = *L + 256 base_139 = *_138 + 256 _141 = base_139 + 256 *L + 128 = _141 _143 = *cl_13 + 192 _144 = *_143 + 256 _84 = *L + 256 base_85 = *_84 + 256 derefaddrtmp = &NONLOCAL *base_85 = derefaddrtmp derefaddrtmp = &NONLOCAL *base_85 + 64 = derefaddrtmp ESCAPED = L ESCAPED = base_139 _148 = base_139 + 128 ESCAPED = L ESCAPED = _148 ESCAPED = &NONLOCAL Collapsing static cycles and doing variable substitution Building predecessor graph Detecting pointer and location equivalences Equivalence classes for indirect node id 1 "NULL": pointer 1, location 1 Equivalence classes for indirect node id 2 "ANYTHING": pointer 2, location 2 Equivalence classes for indirect node id 3 "STRING": pointer 3, location 3 Equivalence classes for indirect node id 4 "ESCAPED": pointer 10, location 4 Equivalence classes for indirect node id 5 "NONLOCAL": pointer 8, location 5 Equivalence classes for direct node id 6 "STOREDANYTHING": pointer 0, location 0 Equivalence classes for indirect node id 7 "INTEGER": pointer 11, location 0 Equivalence classes for direct node id 8 "L": pointer 4, location 0 Equivalence classes for indirect node id 9 "_11": pointer 12, location 0 Equivalence classes for direct node id 10 "_12": pointer 13, location 0 Equivalence classes for direct node id 11 "cl_13": pointer 14, location 0 Equivalence classes for indirect node id 12 "_14": pointer 15, location 0 Equivalence classes for indirect node id 13 "base_15": pointer 16, location 0 Equivalence classes for indirect node id 14 "_16": pointer 5, location 0 Equivalence classes for direct node id 15 "raviV_op_loadnil": pointer 0, location 0 Equivalence classes for indirect node id 16 "_18": pointer 17, location 0 Equivalence classes for indirect node id 17 "base_19": pointer 18, location 0 Equivalence classes for indirect node id 18 "_22": pointer 19, location 0 Equivalence classes for indirect node id 19 "_23": pointer 20, location 0 Equivalence classes for direct node id 20 "_26": pointer 21, location 0 Equivalence classes for indirect node id 21 "_30": pointer 22, location 0 Equivalence classes for indirect node id 22 "_31": pointer 23, location 0 Equivalence classes for indirect node id 23 "_34": pointer 24, location 0 Equivalence classes for indirect node id 24 "_36": pointer 25, location 0 Equivalence classes for indirect node id 25 "base_37": pointer 26, location 0 Equivalence classes for indirect node id 26 "_40": pointer 27, location 0 Equivalence classes for indirect node id 27 "_44": pointer 28, location 0 Equivalence classes for indirect node id 28 "_48": pointer 29, location 0 Equivalence classes for direct node id 29 "iftmp.1_2": pointer 30, location 0 Equivalence classes for direct node id 30 "isfalse_0_4_1": pointer 30, location 0 Equivalence classes for indirect node id 31 "_55": pointer 31, location 0 Equivalence classes for indirect node id 32 "base_56": pointer 32, location 0 Equivalence classes for direct node id 33 "derefaddrtmp": pointer 33, location 0 Equivalence classes for direct node id 34 "derefaddrtmp": pointer 4, location 0 Equivalence classes for indirect node id 35 "_63": pointer 34, location 0 Equivalence classes for indirect node id 36 "base_64": pointer 35, location 0 Equivalence classes for indirect node id 37 "_67": pointer 36, location 0 Equivalence classes for indirect node id 38 "_71": pointer 37, location 0 Equivalence classes for indirect node id 39 "_75": pointer 38, location 0 Equivalence classes for direct node id 40 "iftmp.3_4": pointer 30, location 0 Equivalence classes for direct node id 41 "isfalse_0_10_3": pointer 30, location 0 Equivalence classes for direct node id 42 "_82": pointer 30, location 0 Equivalence classes for indirect node id 43 "_92": pointer 39, location 0 Equivalence classes for indirect node id 44 "base_93": pointer 40, location 0 Equivalence classes for indirect node id 45 "_96": pointer 41, location 0 Equivalence classes for indirect node id 46 "_97": pointer 42, location 0 Equivalence classes for direct node id 47 "_100": pointer 43, location 0 Equivalence classes for indirect node id 48 "_104": pointer 44, location 0 Equivalence classes for indirect node id 49 "_105": pointer 45, location 0 Equivalence classes for indirect node id 50 "_108": pointer 46, location 0 Equivalence classes for indirect node id 51 "_110": pointer 47, location 0 Equivalence classes for indirect node id 52 "base_111": pointer 48, location 0 Equivalence classes for indirect node id 53 "_114": pointer 49, location 0 Equivalence classes for indirect node id 54 "_118": pointer 50, location 0 Equivalence classes for indirect node id 55 "_122": pointer 51, location 0 Equivalence classes for direct node id 56 "iftmp.5_6": pointer 30, location 0 Equivalence classes for direct node id 57 "isfalse_0_16_5": pointer 30, location 0 Equivalence classes for indirect node id 58 "_129": pointer 52, location 0 Equivalence classes for indirect node id 59 "base_130": pointer 53, location 0 Equivalence classes for direct node id 60 "derefaddrtmp": pointer 33, location 0 Equivalence classes for direct node id 61 "derefaddrtmp": pointer 4, location 0 Equivalence classes for direct node id 62 "printf": pointer 0, location 0 Equivalence classes for indirect node id 63 "_138": pointer 54, location 0 Equivalence classes for indirect node id 64 "base_139": pointer 6, location 0 Equivalence classes for indirect node id 65 "_141": pointer 55, location 0 Equivalence classes for indirect node id 66 "_143": pointer 56, location 0 Equivalence classes for indirect node id 67 "_144": pointer 57, location 0 Equivalence classes for indirect node id 68 "_84": pointer 58, location 0 Equivalence classes for indirect node id 69 "base_85": pointer 59, location 0 Equivalence classes for direct node id 70 "derefaddrtmp": pointer 4, location 0 Equivalence classes for direct node id 71 "derefaddrtmp": pointer 4, location 0 Equivalence classes for direct node id 72 "luaF_close": pointer 0, location 0 Equivalence classes for indirect node id 73 "_148": pointer 7, location 0 Equivalence classes for direct node id 74 "luaD_poscall": pointer 0, location 0 STOREDANYTHING is a non-pointer variable, eliminating edges. raviV_op_loadnil is a non-pointer variable, eliminating edges. printf is a non-pointer variable, eliminating edges. luaF_close is a non-pointer variable, eliminating edges. luaD_poscall is a non-pointer variable, eliminating edges. Rewriting constraints and unifying variables Unifying isfalse_0_4_1 to iftmp.1_2 Unifying derefaddrtmp to L Unifying iftmp.3_4 to iftmp.1_2 Unifying isfalse_0_10_3 to iftmp.1_2 Unifying _82 to iftmp.1_2 Unifying iftmp.5_6 to iftmp.1_2 Unifying isfalse_0_16_5 to iftmp.1_2 Unifying derefaddrtmp to derefaddrtmp Unifying derefaddrtmp to L Unifying derefaddrtmp to L Unifying derefaddrtmp to L Uniting pointer but not location equivalent variables Finding indirect cycles Solving graph Points-to sets ANYTHING = { ANYTHING } ESCAPED = { NULL STRING ESCAPED NONLOCAL } NONLOCAL = { ESCAPED NONLOCAL } STOREDANYTHING = { } INTEGER = { ANYTHING } L = { NONLOCAL } _11 = { ESCAPED NONLOCAL } _12 = { ESCAPED NONLOCAL } cl_13 = { ESCAPED NONLOCAL } _14 = { ESCAPED NONLOCAL } base_15 = { ESCAPED NONLOCAL } _16 = { ESCAPED NONLOCAL } raviV_op_loadnil = { } _18 = { ESCAPED NONLOCAL } base_19 = { ESCAPED NONLOCAL } _22 = { ESCAPED NONLOCAL } _23 = { ESCAPED NONLOCAL } _26 = { ESCAPED NONLOCAL } _30 = { ESCAPED NONLOCAL } _31 = { ESCAPED NONLOCAL } _34 = { ESCAPED NONLOCAL } _36 = { ESCAPED NONLOCAL } base_37 = { ESCAPED NONLOCAL } _40 = { ESCAPED NONLOCAL } _44 = { ESCAPED NONLOCAL } _48 = { ESCAPED NONLOCAL } iftmp.1_2 = { NULL NONLOCAL } isfalse_0_4_1 = { NULL NONLOCAL } same as iftmp.1_2 _55 = { ESCAPED NONLOCAL } base_56 = { ESCAPED NONLOCAL } derefaddrtmp = { NULL } derefaddrtmp = { NONLOCAL } same as L _63 = { ESCAPED NONLOCAL } base_64 = { ESCAPED NONLOCAL } _67 = { ESCAPED NONLOCAL } _71 = { ESCAPED NONLOCAL } _75 = { ESCAPED NONLOCAL } iftmp.3_4 = { NULL NONLOCAL } same as iftmp.1_2 isfalse_0_10_3 = { NULL NONLOCAL } same as iftmp.1_2 _82 = { NULL NONLOCAL } same as iftmp.1_2 _92 = { ESCAPED NONLOCAL } base_93 = { ESCAPED NONLOCAL } _96 = { ESCAPED NONLOCAL } _97 = { ESCAPED NONLOCAL } _100 = { ESCAPED NONLOCAL } _104 = { ESCAPED NONLOCAL } _105 = { ESCAPED NONLOCAL } _108 = { ESCAPED NONLOCAL } _110 = { ESCAPED NONLOCAL } base_111 = { ESCAPED NONLOCAL } _114 = { ESCAPED NONLOCAL } _118 = { ESCAPED NONLOCAL } _122 = { ESCAPED NONLOCAL } iftmp.5_6 = { NULL NONLOCAL } same as iftmp.1_2 isfalse_0_16_5 = { NULL NONLOCAL } same as iftmp.1_2 _129 = { ESCAPED NONLOCAL } base_130 = { ESCAPED NONLOCAL } derefaddrtmp = { NULL } same as derefaddrtmp derefaddrtmp = { NONLOCAL } same as L printf = { } _138 = { ESCAPED NONLOCAL } base_139 = { ESCAPED NONLOCAL } _141 = { ESCAPED NONLOCAL } _143 = { ESCAPED NONLOCAL } _144 = { ESCAPED NONLOCAL } _84 = { ESCAPED NONLOCAL } base_85 = { ESCAPED NONLOCAL } derefaddrtmp = { NONLOCAL } same as L derefaddrtmp = { NONLOCAL } same as L luaF_close = { } _148 = { ESCAPED NONLOCAL } luaD_poscall = { } Alias information for ravif2 Aliased symbols Call clobber information ESCAPED, points-to non-local, points-to NULL, points-to vars: { } Flow-insensitive points-to information L_10(D), points-to non-local, points-to vars: { } _11, points-to non-local, points-to escaped, points-to vars: { } _12, points-to non-local, points-to escaped, points-to vars: { } cl_13, points-to non-local, points-to escaped, points-to vars: { } _14, points-to non-local, points-to escaped, points-to vars: { } base_15, points-to non-local, points-to escaped, points-to vars: { } _16, points-to non-local, points-to escaped, points-to vars: { } _18, points-to non-local, points-to escaped, points-to vars: { } base_19, points-to non-local, points-to escaped, points-to vars: { } _22, points-to non-local, points-to escaped, points-to vars: { } _23, points-to non-local, points-to escaped, points-to vars: { } _30, points-to non-local, points-to escaped, points-to vars: { } _31, points-to non-local, points-to escaped, points-to vars: { } _36, points-to non-local, points-to escaped, points-to vars: { } base_37, points-to non-local, points-to escaped, points-to vars: { } _55, points-to non-local, points-to escaped, points-to vars: { } base_56, points-to non-local, points-to escaped, points-to vars: { } _63, points-to non-local, points-to escaped, points-to vars: { } base_64, points-to non-local, points-to escaped, points-to vars: { } _84, points-to non-local, points-to escaped, points-to vars: { } base_85, points-to non-local, points-to escaped, points-to vars: { } _92, points-to non-local, points-to escaped, points-to vars: { } base_93, points-to non-local, points-to escaped, points-to vars: { } _96, points-to non-local, points-to escaped, points-to vars: { } _97, points-to non-local, points-to escaped, points-to vars: { } _104, points-to non-local, points-to escaped, points-to vars: { } _105, points-to non-local, points-to escaped, points-to vars: { } _110, points-to non-local, points-to escaped, points-to vars: { } base_111, points-to non-local, points-to escaped, points-to vars: { } _129, points-to non-local, points-to escaped, points-to vars: { } base_130, points-to non-local, points-to escaped, points-to vars: { } _138, points-to non-local, points-to escaped, points-to vars: { } base_139, points-to non-local, points-to escaped, points-to vars: { } _141, points-to non-local, points-to escaped, points-to vars: { } _143, points-to non-local, points-to escaped, points-to vars: { } _148, points-to non-local, points-to escaped, points-to vars: { } ravif2 (struct ravi_lua_State * L) { struct ravi_TValue * base; struct ravi_LClosure * cl; isfalse_0_4; comparison_0_5; comparison_0_6; comparison_0_7; isfalse_0_10; comparison_0_11; comparison_0_12; comparison_0_13; isfalse_0_16; comparison_0_17; comparison_0_18; comparison_0_19; comparison_0_22; iftmp.1_2; iftmp.3_4; iftmp.5_6; struct ravi_CallInfo * _11; struct ravi_TValue * _12; struct ravi_CallInfo * _14; struct ravi_CallInfo * _16; struct ravi_CallInfo * _18; struct ravi_Proto * _22; struct ravi_TValue * _23; signed long _26; struct ravi_Proto * _30; struct ravi_TValue * _31; signed int _34; struct ravi_CallInfo * _36; signed int _40; signed int _44; signed int _48; struct ravi_CallInfo * _55; struct ravi_CallInfo * _63; signed int _67; signed int _71; signed int _75; _82; struct ravi_CallInfo * _84; struct ravi_CallInfo * _92; struct ravi_Proto * _96; struct ravi_TValue * _97; signed long _100; struct ravi_Proto * _104; struct ravi_TValue * _105; signed int _108; struct ravi_CallInfo * _110; signed int _114; signed int _118; signed int _122; struct ravi_CallInfo * _129; struct ravi_CallInfo * _138; struct ravi_TValue * _141; struct ravi_Proto * _143; signed int _144; struct ravi_TValue * _148; entry: _11 = L_10(D)->ci; _12 = _11->func; cl_13 = _12->value_.gc; _14 = L_10(D)->ci; base_15 = _14->u.l.base; _16 = L_10(D)->ci; raviV_op_loadnil (_16, 0, 0); _18 = L_10(D)->ci; base_19 = _18->u.l.base; _22 = cl_13->p; _23 = _22->k; _26 = _23->value_.i; MEM[(struct ravi_TValue *)base_19 + 16B].value_.i = _26; _30 = cl_13->p; _31 = _30->k; _34 = _31->tt_; MEM[(struct ravi_TValue *)base_19 + 16B].tt_ = _34; _36 = L_10(D)->ci; base_37 = _36->u.l.base; _40 = MEM[(struct ravi_TValue *)base_37 + 16B].tt_; _44 = MEM[(struct ravi_TValue *)base_37 + 16B].tt_; _48 = MEM[(struct ravi_TValue *)base_37 + 16B].value_.b; if (_40 == 0) goto ; else goto ; : if (_44 == 1) goto ; else goto ; : if (_48 == 0) goto ; else goto ; : : # iftmp.1_2 = PHI <1(4), 0(5)> if (iftmp.1_2 != 0) goto ; else goto ; : : # isfalse_0_4_1 = PHI <1(6), 0(7), 1(2)> _55 = L_10(D)->ci; base_56 = _55->u.l.base; MEM[(struct ravi_TValue *)base_56 + 16B].value_.b = 0; MEM[(struct ravi_TValue *)base_56 + 16B].tt_ = 1; _63 = L_10(D)->ci; base_64 = _63->u.l.base; _67 = MEM[(struct ravi_TValue *)base_64 + 16B].tt_; _71 = MEM[(struct ravi_TValue *)base_64 + 16B].tt_; _75 = MEM[(struct ravi_TValue *)base_64 + 16B].value_.b; if (_67 == 0) goto ; else goto ; : if (_71 == 1) goto ; else goto ; : if (_75 == 0) goto ; else goto ; : : # iftmp.3_4 = PHI <1(10), 0(11)> if (iftmp.3_4 != 0) goto ; else goto ; : : # isfalse_0_10_3 = PHI <1(12), 0(13), 1(8)> _82 = ~isfalse_0_10_3; if (isfalse_0_10_3 != 0) goto (OP_TEST_do_jmp_5_14); else goto (OP_TEST_do_skip_5_15); OP_TEST_do_jmp_5_14: jmp_9_2: _92 = L_10(D)->ci; base_93 = _92->u.l.base; _96 = cl_13->p; _97 = _96->k; _100 = _97->value_.i; MEM[(struct ravi_TValue *)base_93 + 16B].value_.i = _100; _104 = cl_13->p; _105 = _104->k; _108 = _105->tt_; MEM[(struct ravi_TValue *)base_93 + 16B].tt_ = _108; _110 = L_10(D)->ci; base_111 = _110->u.l.base; _114 = MEM[(struct ravi_TValue *)base_111 + 16B].tt_; _118 = MEM[(struct ravi_TValue *)base_111 + 16B].tt_; _122 = MEM[(struct ravi_TValue *)base_111 + 16B].value_.b; if (_114 == 0) goto ; else goto ; : if (_118 == 1) goto ; else goto ; : if (_122 == 0) goto ; else goto ; : : # iftmp.5_6 = PHI <1(17), 0(18)> if (iftmp.5_6 != 0) goto ; else goto ; : : # isfalse_0_16_5 = PHI <1(19), 0(20), 1(15)> _129 = L_10(D)->ci; base_130 = _129->u.l.base; MEM[(struct ravi_TValue *)base_130 + 16B].value_.b = 0; MEM[(struct ravi_TValue *)base_130 + 16B].tt_ = 1; printf ("OP_RETURN(pc=%d) return %d args", 13, 1); _138 = L_10(D)->ci; base_139 = _138->u.l.base; _141 = base_139 + 32; L_10(D)->top = _141; _143 = cl_13->p; _144 = _143->sizep; if (_144 > 0) goto (OP_RETURN_if_sizep_gt_0_12_23); else goto (OP_RETURN_else_sizep_gt_0_12_24); OP_TEST_do_skip_5_15: _84 = L_10(D)->ci; base_85 = _84->u.l.base; base_85->value_.b = 1; base_85->tt_ = 1; goto (OP_TEST_do_jmp_5_14); OP_RETURN_if_sizep_gt_0_12_23: luaF_close (L_10(D), base_139); OP_RETURN_else_sizep_gt_0_12_24: _148 = base_139 + 16; luaD_poscall (L_10(D), _148); return 1; } ; end of dump from pass_build_ealias (../../src/gcc/tree-ssa-structalias.c:7230)