thx for volunteering. It certainly is a big step forward to easier reading code.
Sun

On Thu, Jun 16, 2011 at 1:33 AM, Jian-Xin Lai <laij...@gmail.com> wrote:
> It seems we always need a round of code cleanup because the bug fixes can
> only touch very small piece of the code. Maybe one big change to remove all
> KEY is much easier to both developers and gate keepers. If there is no other
> volunteers, we can take this.
>
> 2011/6/16 Sun Chan <sun.c...@gmail.com>
>>
>> Does this mean you are volunteering? I suspect the only sure way
>> (although slow) is simply remove them while people fixing/changing
>> things. Else, it can only get worst
>> Sun
>>
>> On Wed, Jun 15, 2011 at 9:59 PM, Jian-Xin Lai <laij...@gmail.com> wrote:
>> > It seems combining the code cleanup with bug fix is not a good practice.
>> > If
>> > #ifdef KEY is not used anymore, we can initiate another round of code
>> > cleanup to remove this macro.
>> >
>> > 2011/6/14 Sun Chan <sun.c...@gmail.com>
>> >>
>> >> 1. WOPT does not allow static objects, can you put your new routines
>> >> inside the right class?
>> >> 2. please remove the #ifdef KEY, I think we can start removing this
>> >> KEY thing now, everyone assumes this as default now
>> >>
>> >> Sun
>> >>
>> >> On Mon, Jun 13, 2011 at 7:52 PM, Wu Yongchong <wuyongch...@gmail.com>
>> >> wrote:
>> >> > Hi
>> >> > can a gatekeeper help review this patch
>> >> >
>> >> > This patch tries to fix various C standard compliant problems related
>> >> > to volatile in open64. Here is the list of the problems:
>> >> >
>> >> > 1. Incorrect simplification in the following case:
>> >> >
>> >> >  volatile int x;
>> >> >  return x - x;
>> >> >
>> >> > The expression (x - x) cannot be simplified to 0 because x is
>> >> > volatile.
>> >> >
>> >> >  int v; volatile int val;
>> >> >  val = *(volatile int*)(&v); /* should not be simplified to LDID v */
>> >> >
>> >> > According to C standard, the *(volatile int*)(&v) should be converted
>> >> > into an ILOAD expression in WHIRL. However, the simplifier folds the
>> >> > whole expression into LDID v.
>> >> >
>> >> > 2. Incorrect simplification related to pointers:
>> >> >
>> >> >  int test_volatile_ptrs1(){
>> >> >    volatile int *p;
>> >> >    int val;
>> >> >
>> >> >    val = p - p; /* can be folded to zero */
>> >> >    val += (*p) - (*p); /* cannot be folded */
>> >> >
>> >> >    return val;
>> >> >  }
>> >> >
>> >> > The expression (*p) - (*p) cannot be simplified since p is a pointer
>> >> > to volatile int. However, WN simplifier fails to check for this.
>> >> >
>> >> > 3. Incorrect Boolean expression simplification
>> >> >
>> >> > The VHO lowering code tries to simplify certain Boolean operations
>> >> > because of short circuiting in C99 semantics. However, it fails to
>> >> > consider volatile in the case. For example: (x && 0) cannot be
>> >> > simplified to 0 when (x) is a volatile.
>> >> >
>> >> > 4. Bugs related to aggregates that are volatile or have volatile
>> >> > members
>> >> >
>> >> >   int test_volatile_struct() {
>> >> >     struct struct_typ {
>> >> >       int foo;
>> >> >       int bar;
>> >> >     };
>> >> >     struct vol_struct_typ {
>> >> >       volatile int foo;
>> >> >       volatile int bar;
>> >> >     };
>> >> >
>> >> >     volatile struct struct_typ val;
>> >> >     struct vol_struct_typ vol_val;
>> >> >
>> >> >     val = val; /* should not be deleted because val is volatile*/
>> >> >     vol_val = vol_val; /* should not be deleted because its members
>> >> > are volatile */
>> >> >
>> >> >     return 0;
>> >> >   }
>> >> >
>> >> >   void test_volatile_partial_struct() {
>> >> >     struct foo {
>> >> >       volatile int bar;
>> >> >       float baz;
>> >> >     } v;
>> >> >
>> >> >     v = v; /* can be optimized to v.bar = v.bar only */
>> >> >   }
>> >> >
>> >> >   void test_volatile_nested_struct() {
>> >> >     struct foo {
>> >> >       struct {
>> >> >         volatile int val;
>> >> >         int var;
>> >> >       } bar;
>> >> >       float baz;
>> >> >     };
>> >> >
>> >> >     struct foo v;
>> >> >     v = v;
>> >> >   }
>> >> >
>> >> >   int test_volatile_arg_5(volatile struct foo_t *foop) {
>> >> >     return foop->bar - foop->bar; /* should not be simplified to 0 */
>> >> >   }
>> >> >
>> >> > In wn_lower.cxx, expression like struct_val = struct_val may have
>> >> > side
>> >> > effects. Therefore, we need to traverse its fields and look for
>> >> > volatile. The function is implemented as TY_has_volatile.
>> >> >
>> >> > WN_Is_Volatile_Mem checks for accessing volatile memories. However,
>> >> > it
>> >> > only looks at WN_ty and WN_load_addr_ty. However, in the case of
>> >> > aggregate type, the WN_ty does not reflect the type of the field
>> >> > being
>> >> > accessed. We need to use WN_object_ty to get the type. However,
>> >> > adding
>> >> > this code causes circular dependency between wn_util.h and wn_core.h.
>> >> > The solution is to move WN_Is_Volatile_Mem to wn_util.h
>> >> >
>> >> > Failure to check for WN_object_ty also causes problems in WN
>> >> > simplifier and WN_has_side_effects (which should return TRUE for
>> >> > accessing a volatile field of a struct and FALSE otherwise).
>> >> >
>> >> >
>> >> > --
>> >> > yongchong
>> >> >
>> >> >
>> >> >
>> >> > ------------------------------------------------------------------------------
>> >> > EditLive Enterprise is the world's most technically advanced content
>> >> > authoring tool. Experience the power of Track Changes, Inline Image
>> >> > Editing and ensure content is compliant with Accessibility Checking.
>> >> > http://p.sf.net/sfu/ephox-dev2dev
>> >> > _______________________________________________
>> >> > Open64-devel mailing list
>> >> > Open64-devel@lists.sourceforge.net
>> >> > https://lists.sourceforge.net/lists/listinfo/open64-devel
>> >> >
>> >> >
>> >>
>> >>
>> >>
>> >> ------------------------------------------------------------------------------
>> >> EditLive Enterprise is the world's most technically advanced content
>> >> authoring tool. Experience the power of Track Changes, Inline Image
>> >> Editing and ensure content is compliant with Accessibility Checking.
>> >> http://p.sf.net/sfu/ephox-dev2dev
>> >> _______________________________________________
>> >> Open64-devel mailing list
>> >> Open64-devel@lists.sourceforge.net
>> >> https://lists.sourceforge.net/lists/listinfo/open64-devel
>> >
>> >
>> >
>> > --
>> > Regards,
>> > Lai Jian-Xin
>> >
>
>
>
> --
> Regards,
> Lai Jian-Xin
>

------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
Open64-devel mailing list
Open64-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/open64-devel

Reply via email to