Hi Gang, I think this is the right fix. Please go ahead.
2011/12/19 Gang Yu <yugang...@gmail.com>: > Since effort has been made on the original fix and the bug-case is not that > big to affect the analyse , I will still use the original bug-case. > > Source: > > typedef short int int16_t; > typedef int int32_t; > typedef unsigned char uint8_t; > typedef unsigned int uint32_t; > typedef unsigned long int uint64_t; > int32_t g_46 = 0L; > int32_t g_71 = 0L; > int32_t *g_311 = &g_46; > int32_t * func_19(int32_t * p_20, int16_t p_21, int32_t * p_22, const > uint8_t > p_23, int32_t * p_24) { > int32_t **l_426 = &g_311; > const uint64_t l_440 = 0x2A1DFCF9L; > for (p_21 = (-24); > (p_21 < 1); > p_21 = safe_add_func_int16_t_s_s(p_21, 3)) { > int32_t ***l_428 = &l_426; > (*l_428) = &g_311; > if ((*p_20)) { > if (l_440) { > } > else { > uint32_t l_445 = 4U; > if ((*g_311)) { > if ((safe_rshift_func_uint16_t_u_s(func_124((&p_22 != > &p_24)), 10))) { > (*g_311) |= l_445; > (**l_426) |= (*p_24); > g_311 = &g_71; > } > } > } > } > } > } > the full seg fault backtrace: > #0 0xf7bb1fca in CHAIN::Tail (this=0x64) at > /fc/home/yug/open64/osprey/be/com/cxx_base.h:834 > #1 0xf6f17035 in STMT_LIST::Tail (this=0x64) at > /fc/home/yug/open64/osprey/be/opt/opt_stmt.h:83 > #2 0xf6f178e3 in BB_NODE::Last_stmtrep (this=0x0) at > /fc/home/yug/open64/osprey/be/opt/opt_bb.h:1595 > #3 0xf6f146b9 in BB_NODE::Branch_stmtrep (this=0x0) at > /fc/home/yug/open64/osprey/be/opt/opt_bb.cxx:863 > #4 0xf6fb4569 in DCE::Mark_block_live (this=0xffffc674, bb=0x8101528) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3450 > #5 0xf6fb44b9 in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f8200) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3384 > #6 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f82b8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > #7 0xf6fb435b in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f8360) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3356 > #8 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f83a0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > #9 0xf6fb3b28 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f8418) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2650 > #10 0xf6fb3d78 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f84d0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2725 > #11 0xf6fb435b in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f83d8) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3356 > #12 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f8508) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > #13 0xf6fb41d4 in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f8780) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3289 > #14 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x81056f0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > #15 0xf6fb401b in DCE::Mark_chinode_live (this=0xffffc674, chi=0x81070a8, > def_stmt=0x8105528) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2428 > #16 0xf6fb39db in DCE::Mark_coderep_live (this=0xffffc674, cr=0x81056b8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2615 > #17 0xf6fb4a5e in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8104b60, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2365 > #18 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x8106170) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #19 0xf6fb4a5e in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8104c00, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2365 > #20 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f8be8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #21 0xf6fb4a5e in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8104c28, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2365 > #22 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f79b8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #23 0xf6fb5167 in DCE::Mark_sr_munode_live (this=0xffffc674, sr=0x80f7a98) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2566 > #24 0xf6fb4483 in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f7a98) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3379 > #25 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7c00) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > #26 0xf6fb4a5e in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8105088, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2365 > #27 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x81061e0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #28 0xf6fb4a5e in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8105100, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2365 > #29 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f8c20) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #30 0xf6fb4a5e in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8105128, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2365 > #31 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f79f0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #32 0xf6fb401b in DCE::Mark_chinode_live (this=0xffffc674, chi=0x8106f38, > def_stmt=0x80f7a98) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2428 > #33 0xf6fb39db in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7c00) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2615 > #34 0xf6fb435b in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f7ca8) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3356 > #35 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7ce8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > #36 0xf6fb3d78 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7e18) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2725 > #37 0xf6fb3d78 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7e50) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2725 > #38 0xf6fb435b in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f7dd8) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3356 > #39 0xf6fb45a5 in DCE::Mark_block_live (this=0xffffc674, bb=0x8100c98) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3452 > #40 0xf6fb4954 in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8105420, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2341 > #41 0xf6fb38fd in DCE::Mark_coderep_live (this=0xffffc674, cr=0x8106250) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2594 > #42 0xf6fb401b in DCE::Mark_chinode_live (this=0xffffc674, chi=0x8106b98, > def_stmt=0x80f7850) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2428 > #43 0xf6fb39db in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f78c8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2615 > #44 0xf6fb375a in DCE::Mark_cr_munode_live (this=0xffffc674, cr=0x80f7940) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2506 > #45 0xf6fb3c5c in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7940) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2680 > #46 0xf6fb3d78 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x80f7980) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2725 > #47 0xf6fb435b in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f7900) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3356 > #48 0xf6fb45a5 in DCE::Mark_block_live (this=0xffffc674, bb=0x81011c8) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3452 > #49 0xf6fb4954 in DCE::Mark_phinode_live (this=0xffffc674, phi=0x8104de0, > visit_opnds=1) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2341 > #50 0xf6fb9548 in DCE::Find_required_statements (this=0xffffc674) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:4614 > #51 0xf6fba499 in DCE::Dead_store_elim (this=0xffffc674) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:5153 > #52 0xf6fbbebc in COMP_UNIT::Do_dead_code_elim (this=0x80e0500, > do_unreachable=1, do_dce_global=1, do_dce_alias=1, do_agg_dce=1, > do_identity_removal=1, do_preg_renumbering=0, paths_removed=0x0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:5215 > #53 0xf7093cb6 in Pre_Optimizer (phase=4, wn_tree=0xf7968330, > du_mgr=0x80cea30, alias_mgr=0x80ce9f0) > at /fc/home/yug/open64/osprey/be/opt/opt_main.cxx:1657 > #54 0xf714e106 in Perform_Global_Optimization (pu_wn=0xf7968330, > region_wn=0xf7968330, alias_mgr=0x80ce9f0) > at /fc/home/yug/open64/osprey/be/opt/wodriver.cxx:156 > #55 0x08052ae4 in WOPT_Processing (current_pu=0x80bdb98, pu=0xf7968330, > rgn_iter=0xffffcc1c, rwn=0xf7968330) > at > /fc/proj/ctires/open64/o64guru/src/Sun/trunk/osprey/be/be/driver.cxx:1012 > #56 0x08053de1 in Do_WOPT_and_CG_with_Regions (current_pu=0x80bdb98, > pu=0xf7968330) > at > /fc/proj/ctires/open64/o64guru/src/Sun/trunk/osprey/be/be/driver.cxx:1134 > #57 0x08054a29 in Backend_Processing (current_pu=0x80bdb98, pu=0xf7968330) > at > /fc/proj/ctires/open64/o64guru/src/Sun/trunk/osprey/be/be/driver.cxx:1555 > #58 0x08055764 in Preorder_Process_PUs (current_pu=0x80bdb98) at > /fc/proj/ctires/open64/o64guru/src/Sun/trunk/osprey/be/be/driver.cxx:1975 > #59 0x080569f6 in main (argc=27, argv=0xffffce94) at > /fc/proj/ctires/open64/o64guru/src/Sun/trunk/osprey/be/be/driver.cxx:2322 > 1) where the seg fault happened? > look at frame 52 > #52 0xf6fbbebc in COMP_UNIT::Do_dead_code_elim (this=0x80e0500, > do_unreachable=1, do_dce_global=1, do_dce_alias=1, do_agg_dce=1, > do_identity_removal=1, do_preg_renumbering=0, paths_removed=0x0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:5215 > the source code: > > 5201 dce.Set_phase_unreachable(); > 5202 unreachable = dce.Unreachable_code_elim(); > 5203 > 5204 if ( unreachable ) { > 5205 Cfg()->Invalidate_and_update_aux_info(TRUE); > 5206 } > 5207 } > 5208 > 5209 if ( dce.Tracing() ) { > 5210 fprintf( TFile, "%sDead_store_elim\n%s", SBar, SBar ); > 5211 } > 5212 > 5213 dce.Set_phase_dead_store(); > 5214 dce.Init_return_vsym(); > 5215 unreachable = dce.Dead_store_elim(); > we can make sure dce happened at dce.Dead_store_elim, and the > dce.Unreachable_code_elim has been previously performed. > > from the source code > > if (l_440) { > } > else { > uint32_t l_445 = 4U; > if ((*g_311)) { > if > ((safe_rshift_func_uint16_t_u_s(func_124((&p_22 != > &p_24)), 10))) { > (*g_311) |= l_445; > (**l_426) |= (*p_24); > g_311 = &g_71; > } > } > > } > > and l_440 is defined as > > const uint64_t l_440 = 0x2A1DFCF9L; > > So, we can make sure at this phase, "else {...}" including the block and > statements has been removed by DCE. > > 2.) the seg fault control is in the wrong path. > > look at frame 13 > > #13 0xf6fb41d4 in DCE::Mark_statement_live (this=0xffffc674, stmt=0x80f8780) > at /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:3289 > the stmt 0x80f8780 is: > >> LDID U8 U8 sym10v10 0 ty=3503 <u=2 cr87> flags:0x12 b=-1 #g_311 >> U4U4ILOAD 0 ty=802 <u=8191 cr96> flags:0x0 b=-1 mu<23/cr90> >> LDC U4 4 <u=0 cr69> flags:0x0 b=-1 >> U4BIOR <u=0 cr97> isop_flags:0xc0000 flags:0x1 b=-1 >> LDID U8 U8 sym10v10 0 ty=3503 <u=2 cr87> flags:0x12 b=-1 #g_311 >>OPR_ISTORE I4 0 <u=0 cr98> b=-1 flags:0x12 pj2 Sid-1 > chi <10/cr101/cr87 14/cr10/cr10 22/cr99/cr89 23/cr100/cr90 > 0x0x80f8780 > i.e, " (*g_311) |= l_445;", this is already removed at the > unreachable_code_elim phase. > why mark a dead-stmt live? we can make sure dce is start doing things > unexpected. > > 3). where is unexpected? > > look at frame 14. > #14 0xf6fb3ad9 in DCE::Mark_coderep_live (this=0xffffc674, cr=0x81056f0) at > /fc/home/yug/open64/osprey/be/opt/opt_dce.cxx:2641 > the cr can be dumped as: > >>LDID U8 U8 sym10v0 0 ty=903 <u=0 cr8> flags:0x82 b=-1 #g_311 > > the cr's Defstmt can be dumped as: >> LDID U8 U8 sym10v10 0 ty=3503 <u=2 cr87> flags:0x12 b=-1 #g_311 >> U4U4ILOAD 0 ty=802 <u=8191 cr96> flags:0x0 b=-1 mu<23/cr90> >> LDC U4 4 <u=0 cr69> flags:0x0 b=-1 >> U4BIOR <u=0 cr97> isop_flags:0xc0000 flags:0x1 b=-1 >> LDID U8 U8 sym10v10 0 ty=3503 <u=2 cr87> flags:0x12 b=-1 #g_311 >>OPR_ISTORE I4 0 <u=0 cr98> b=-1 flags:0x12 pj2 Sid-1 > chi <10/cr101/cr87 14/cr10/cr10 22/cr99/cr89 23/cr100/cr90 > 0x0x80f8780 > i.e, " (*g_311) |= l_445;", this is correct, since at opt_htable.cxx > iload_folded(opt_htable.cxx:2914) > > cr8's define statement is setted to this stmt . > > The DCE source code shows > > 2622 if ( cr->Defstmt() != NULL && !cr->Defstmt()->Live_stmt() ) { > 2623 // if we're making this statement live just because it's > 2624 // associated with a chi, see if we can get rid of "i = i" > 2625 // assignments. This only happens when zero-version is > 2626 // enabled because we won't otherwise make the chi live > 2627 // by default. > 2628 BOOL make_live = TRUE; > ... > > cr->Defstmt() should not be marked NON_live, so the control will not follow > wrong path. > > 4) what do the unexpected. > > 721void > 722BB_NODE::Remove_stmtrep( STMTREP *stmt ) > 723{ > ... > 735 _stmtlist.Remove(stmt); > 736 stmt->Reset_live_stmt(); // WHIRL SSA: mark stmt dead > 737} > when removing the stmtrep, we unexpected reset live_stmt, > which makes dce believe the deleted stmtrep is one to recover. The, the > control follows the wrong path. > > Sun, let me know if you still have questions. > > > Regards > Gang > > ------------------------------------------------------------------------------ > Learn Windows Azure Live! Tuesday, Dec 13, 2011 > Microsoft is holding a special Learn Windows Azure training event for > developers. It will provide a great way to learn Windows Azure and what it > provides. You can attend the event by watching it streamed LIVE online. > Learn more at http://p.sf.net/sfu/ms-windowsazure > _______________________________________________ > Open64-devel mailing list > Open64-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/open64-devel > -- Regards, Lai Jian-Xin ------------------------------------------------------------------------------ Write once. Port to many. Get the SDK and tools to simplify cross-platform app development. Create new or port existing apps to sell to consumers worldwide. Explore the Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join http://p.sf.net/sfu/intel-appdev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel