Initial reaction: this approach is much better fit the design flow of
the entire compiler.
Sun

On Wed, Mar 7, 2012 at 9:17 PM, Gang Yu <yugang...@gmail.com> wrote:
> Hi, list:
>
>    We have a new design and implementation for fix the gcc incompatible
> issue, tracked as bug798,bug588,..., i,e. open64 unable to delete the
> unreachable code under O0 as gcc does.
>
> A typical case below:
>
> int defined_fun()
> {
> }
> int main()
> {
>   int t;
>   switch(sizeof(t))
>     {
>     case 1:
>       undefined_fun2();
>       break;
>     case 4:
>       defined_fun();
>       break;
>     case 8:
>       undefined_fun3();
>     default:
>       undefined_fun();
>     }
>   return 0;
> }
> Previously, we have proposed invoking the wopt by a special preopt phase "q"
> which includes only copy-prop/DCE phases, however, this approach is not
> accepted due to
>
> *) it obviously increase the compile time due to the essetial, compile-time
> expensive components in WOPT. This is not acceptable by O0 users who are
> quite sensitive to the compile-time.
> *) Invoking wopt may cause some stmts losing the dwalf debug info, this is
> not acceptable by people intent to debug the program using "-O0 -g".
>
> After that, we have a detailed analysis on the O0 DCE problem, roughly,
> there are two Unreachable Code Elimination(UCE) cases to handle under O0
> 1) the if -then-else case:
> if (sizeof(type x) == A) {
> ...;
> } else if (sizeof(type y) == B) {
>  ...;
> }  else {
> ...
> }
> 2). the switch case : just like the above shown case.
>
> under O0, open64 can handle the case 1, this is because (sizeof(type x) ==
> A) can be whirl expressed and folded to
>
>   INTCONST 0
> FALSEBR/TRUEBE
>
> so,  unreachable branches then can be indirectly deleted by branch handling
> the case V_BR_NONE or V_BR_ALWAYS
>
> All we wanted is to handle the "switch-case", The new suggested way is to
> build CFG at the beginning of CG_Generate_Code, we do *special const
> propagation* and then *condition fold* to make the branch as
>
>  U8INTCONST 4 (0x4)
> U8STID 0 <2,2,_temp__switch_index0> T<9,.predef_U8,8> {line: 1/10}
>  U8U8LDID 0 <2,2,_temp__switch_index0> T<9,.predef_U8,8>
>  U8INTCONST 4 (0x4)
> I4U8EQ
> U8INTCONST 4 be copy propagated to:
> U8U8LDID 0 <2,2,_temp__switch_index0> T<9,.predef_U8,8>
>
> Then
>  U8INTCONST 4 (0x4)
>  U8INTCONST 4 (0x4)
> I4U8EQ
> folded to
>   INTCONST 1
> TRUEBR
>
> then let the branch expansion routine do things.
>
> We have some basic design rules:
> *) make things as simple as possible, the introduced procedure is only for
> gnu compatiblity and no intent to be optimisation. So, we only do limited
> const prop and expression fold, no real DCE or other changes to CFG.
> *) maxium leverage the current production modules, do *not* invent new
> things
>    a). invoke the opt_cfg for CFG building
>    b). port the OPT_RVI_EMIT for cfg emit and region handling.
>
> Attached is the patch,  self checking the patch, we do not find the issues
> by preopt "q" phase, since,
> *) the only compile time expense is to build-up the CFG, then emit back,
> *) we only modify kids of (FALSE/TRUE) branch stmts, do not corrupt the
> dwalf info.
>
> Applying the patch, we build up the linux kernel using "-O0 -g".
>
> Would a gatekeeper please help review the patch? Thanks a lot.
>
>
> Regards
> Gang
>
> ------------------------------------------------------------------------------
> Virtualization & Cloud Management Using Capacity Planning
> Cloud computing makes use of virtualization - but cloud computing
> also focuses on allowing computing to be delivered as a service.
> http://www.accelacomm.com/jaw/sfnl/114/51521223/
> _______________________________________________
> Open64-devel mailing list
> Open64-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>

------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing 
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to