Thanks!

Acturally, clang does this in AST->LLVM IR translation phase, but
implementing and maintaining new phases requires more effort, so this might
be a solution.

Regards
Gang


On Wed, Dec 7, 2011 at 12:56 PM, Yiran Wang <yiran.w...@gmail.com> wrote:

> I am not a gatekeeper, but excuse me, I wonder if why not do such kind of
> stuff with WGEN.
>
> Regards,
> Yiran
>
>
> On Tue, Dec 6, 2011 at 6:53 PM, Gang Yu <yugang...@gmail.com> wrote:
>
>> Hi,
>>
>>    Could a gatekeeper please help review the fix for bug798(
>> http://bugs.open64.net/show_bug.cgi?id=798)?
>>
>> This is a bug for a long time, a typical bug case below:
>>
>> int defined_fun()
>> {
>> }
>>
>> int main()
>> {
>>
>>   int t;
>>   switch(sizeof(t))
>>   {
>>    case 4:
>>      defined_fun();
>>      break;
>>    default:
>>      undefined_fun();
>> }
>> }
>>
>> opencc -O0 b.c
>> /tmp/cco.c7KVi5: In function `main':
>> b.c:15: undefined reference to `undefined_fun'
>>
>> open64 does not invoke wopt at O0, so call to undefined_fun() is not
>> deleted, then the linker asserts. We may have many methods to solve this
>> issue, hacking wgen to cut down the unreachable branch, adding special dce
>> phase before CG expansion ..... , but the simplest way is to invoke limited
>> wopt functionality at O0.
>>
>> This is inspired by Fred Chow and Previously Sun Chan and Suneel Jain's
>> comment on bug588.
>>
>> >My recommendation would be to do this kind of dead code
>> >elimination at -O0 in Open64. That will provide greater compatibility
>> >with gcc.
>> >- Suneel
>>
>> >can you do an experiment, please use the following options "-O0
>> >-phase:p" and see if the compile will go through.
>> >Thx!
>> >Sun
>>
>> We introduce a special phase q to backend, indicating invoke preopt for
>> dce only. the Suggest patch below:
>>
>> osprey/be/be/driver.cxx    -- 207cd21..22e93a8 100644
>> --- a/osprey/be/be/driver.cxx
>> +++ b/osprey/be/be/driver.cxx
>> @@ -441,6 +441,7 @@ load_components (INT argc, char **argv)
>>      INT phase_argc;
>>      char **phase_argv;
>> +
>>      if (!(Run_lno || Run_wopt || Run_preopt || Run_cg ||
>>           Run_prompf || Run_w2c || Run_w2f
>>            || Run_w2fc_early || Run_ipl))
>> @@ -468,6 +469,10 @@ load_components (INT argc, char **argv)
>>        CG_Process_Command_Line (phase_argc, phase_argv, argc, argv);
>>      }
>> +    /* run preopt for dce only also invoke preopt */
>> +    if (Run_preopt_dceonly)
>> +      Run_preopt = TRUE;
>> +
>>      if (Run_wopt || Run_preopt || Run_lno || Run_autopar) {
>>        Get_Phase_Args (PHASE_WOPT, &phase_argc, &phase_argv);
>>  #if !defined(BUILD_FAST_BIN)
>> osprey/be/be/driver_util.cxx    -- e8f58f9..d5c4698 100644
>> --- a/osprey/be/be/driver_util.cxx
>> +++ b/osprey/be/be/driver_util.cxx
>> @@ -481,6 +481,12 @@ Process_Command_Line (INT argc, char **argv)
>>             if (strcmp (myname, "preopt") == 0)
>>                 Run_preopt = TRUE;
>>             break;
>> +        case 'q':
>> +            if (strcmp (myname, "preopt") == 0) {
>> +              Run_preopt = TRUE;
>> +              Run_preopt_dceonly = TRUE;
>> +            }
>> +            break;
>>         case 'c':
>>             if (strcmp (myname, "cg") == 0)
>>                 Run_cg = TRUE;
>> osprey/be/opt/opt_main.cxx    -- 4b8957c..a7e4679 100644
>> --- a/osprey/be/opt/opt_main.cxx
>> +++ b/osprey/be/opt/opt_main.cxx
>> @@ -731,6 +731,51 @@ private:
>>        WOPT_Enable_Combine_Operations = FALSE;
>>        WOPT_Enable_SLT = FALSE;
>>        OPT_Enable_WHIRL_SSA = FALSE;
>> +      if (Run_preopt_dceonly) {
>> +          WOPT_Enable_Add_Do_Loop_Info =
>> +          WOPT_Enable_Add_Label_Loop_Info =
>> +          WOPT_Enable_Aggressive_dce =
>> +          WOPT_Enable_Aggressive_Code_Motion =
>> +          WOPT_Enable_Alias_Classification =
>> +          WOPT_Enable_Alias_Class_Fortran_Rule =
>> +          WOPT_Enable_Combine_Operations =
>> +          WOPT_Enable_Compare_Simp =
>> +          WOPT_Enable_CRSIMP =
>> +          WOPT_Enable_DCE_Alias =
>> +          WOPT_Enable_Edge_Placement =
>> +          WOPT_Enable_Exp_PRE =
>> +          WOPT_Enable_Fold2const =
>> +          WOPT_Enable_LNO_Copy_Propagate =
>> +          WOPT_Enable_FSA =
>> +          WOPT_Enable_Goto =
>> +          WOPT_Enable_Input_Prop =
>> +          WOPT_Enable_Itself_Prop =
>> +          WOPT_Enable_Ivar_Common =
>> +          WOPT_Enable_IVE =
>> +          WOPT_Enable_IVR =
>> +          WOPT_Enable_Ldx =
>> +          WOPT_Enable_Load_PRE =
>> +          WOPT_Enable_Local_Rvi =
>> +          WOPT_Enable_Output_Copy =
>> +          WOPT_Enable_Parm =
>> +          WOPT_Enable_Phi_Simp =
>> +          WOPT_Enable_RVI =
>> +          WOPT_Enable_SLT =
>> +          WOPT_Enable_Store_PRE =
>> +          WOPT_Enable_SSA_PRE =
>> +          WOPT_Enable_Vsym_Unique =
>> +          OPT_Enable_WHIRL_SSA =
>> +          WOPT_Enable_WOVP =
>> +          Enable_WN_Simp =                     // disable WHIRL
>> simplifier
>> +          // WOPT_Enable_Zero_Version =
>> +          WOPT_Enable_Tail_Recur =
>> +          FALSE;
>> +
>> +        WOPT_Enable_Verify = 1;
>> +        WOPT_Enable_DCE = WOPT_Enable_Copy_Propagate = TRUE;
>> +
>> +
>> +      }
>>        break;
>>      } // switch
>>      WOPT_Enable_Ldx = Indexed_Loads_Allowed;
>> osprey/common/com/config.cxx    -- c972676..387f9c1 100644
>> --- a/osprey/common/com/config.cxx
>> +++ b/osprey/common/com/config.cxx
>> @@ -621,6 +621,8 @@ static OPTION_DESC Options_PHASE[] = {
>>        &Run_wopt,       NULL},
>>      { OVK_BOOL,        OV_INTERNAL,    FALSE, "preopt", "p",    0, 0, 0,
>>        &Run_preopt,     NULL},
>> +    { OVK_BOOL,        OV_INTERNAL,    FALSE, "q",       "",    0, 0, 0,
>> +      &Run_preopt_dceonly,     NULL},
>>      { OVK_BOOL,        OV_INTERNAL,    FALSE, "cg",      "c",   0, 0, 0,
>>        &Run_cg, NULL},
>>      { OVK_BOOL,        OV_INTERNAL,    FALSE, "clist",  NULL,   0, 0, 0,
>> @@ -998,6 +1000,7 @@ BOOL Enable_EBO_Post_Proc_Rgn = TRUE ;
>>  BOOL Run_lno = FALSE;              /* run loop-nest optimizer */
>>  BOOL Run_wopt = FALSE;             /* run WHIRL global optimizer */
>>  BOOL Run_preopt = FALSE;           /* run WHIRL preopt optimizer */
>> +BOOL Run_preopt_dceonly = FALSE;        /* run WHIRL preopt only for dce
>> */
>>  BOOL Run_ipl = FALSE;              /* run procedure summary phase  */
>>  BOOL Run_cg = FALSE;               /* run code generator */
>>  BOOL Run_w2c = FALSE;              /* run whirl2c */
>> osprey/common/com/config.h    -- 3df7f78..9bdab1d 100644
>> --- a/osprey/common/com/config.h
>> +++ b/osprey/common/com/config.h
>> @@ -732,6 +732,7 @@ extern BOOL Run_lego;               /* run
>> lego-lowering */
>>  extern BOOL Run_lego_given;         /* was run lego-lowering given/not */
>>  extern BOOL Run_wopt;              /* run WHIRL global optimizer */
>>  extern BOOL Run_preopt;                    /* run WHIRL preopt optimizer
>> */
>> +extern BOOL Run_preopt_dceonly;     /* run WHIRL preopt only for dce */
>>  extern BOOL Run_cg;                /* run code generator */
>>  extern BOOL Run_w2c;               /* run whirl2c */
>>  extern BOOL Run_w2f;               /* run whirl2f */
>> osprey/driver/special_options.c    -- a65a384..abe35f5 100644
>> --- a/osprey/driver/special_options.c
>> +++ b/osprey/driver/special_options.c
>> @@ -416,13 +416,19 @@ add_special_options (void)
>>              *
>>              *                          -O0/-O1 -O2             -O3
>>              *                          ===========================
>> -            *          .B,.I,.P:       cg      wopt/cg
>> lno/wopt/cg
>> -            *          .N:             cg      wopt/cg         wopt/cg
>> +            *          .B,.I:          q/cg    wopt/cg
>> lno/wopt/cg
>> +             *          .P:             cg      wopt/cg
>> lno/wopt/cg
>> +            *          .N:             q/cg    wopt/cg         wopt/cg
>>              *          .O:             cg      cg              cg
>> +             * q means preopt for dce only.
>>              */
>>             if (source_kind == S_O)
>>                 warning("compiles of WOPT-generated .O files will usually
>> fail due to missing state information");
>>             if (olevel <= 1 || source_kind == S_O)
>> +              if ( source_kind != S_P )
>> +              /* bug798 open64.net. add phase q for DCE on O0 .I .B*/
>> +                flag = add_string_option(O_PHASE_, "q:c");
>> +              else
>>                 flag = add_string_option(O_PHASE_, "c");
>>             else if (olevel == 2 || source_kind == S_N)
>>                 flag = add_string_option(O_PHASE_, "w:c");
>>
>> could a gatekeeper pleae help a review? thanks
>>
>>
>> Regards
>> Gang
>>
>>
>> ------------------------------------------------------------------------------
>> Cloud Services Checklist: Pricing and Packaging Optimization
>> This white paper is intended to serve as a reference, checklist and point
>> of
>> discussion for anyone considering optimizing the pricing and packaging
>> model
>> of a cloud services business. Read Now!
>> http://www.accelacomm.com/jaw/sfnl/114/51491232/
>> _______________________________________________
>> Open64-devel mailing list
>> Open64-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/open64-devel
>>
>>
>
------------------------------------------------------------------------------
Cloud Services Checklist: Pricing and Packaging Optimization
This white paper is intended to serve as a reference, checklist and point of 
discussion for anyone considering optimizing the pricing and packaging model 
of a cloud services business. Read Now!
http://www.accelacomm.com/jaw/sfnl/114/51491232/
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to