you have yet to learn how to trace wopt.
-tt25:0xyyyyy where yyyyy is the bit for the corresponding phase
Sun

On Mon, Dec 19, 2011 at 10:46 AM, Gang Yu <yugang...@gmail.com> wrote:

> 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

Reply via email to