if at O0, gcc optimized it, why is it the case different at O2?
Sun
On Sat, Dec 17, 2011 at 5:18 PM, Gang Yu <yugang...@gmail.com> wrote:
> For your questions:
> [1]. why the assertion,
> asm volatile ("%0" : : "i#*X"(x)); is a wrong assembler statement, it
> should be DCEed by optimizer and should not exist in CG phase.
>
> [2]. in order to get DCE. we should make condition
> _builtin_constant_p (x)
> && x != 0
> be folded to constant 0, intrinsic_op _builtin_constant_p(x) should be
> simplified to 0 and then let the optimizer further optimized
> _builtin_constant_p (x)
> && x != 0
> to 0
>
> [3]. at phase O0, _builtin_constant_p(x) is already folded to 0 by gcc.
> and the original case, with the __OPTIMIZE__ macro will not be enabled.
>
> Regards
> Gang
>
>
> On Sat, Dec 17, 2011 at 5:11 PM, Sun Chan <sun.c...@gmail.com> wrote:
>
>> Pls send more info for me to adequately review this fix.
>> Why do you suggest this fix. What is the problem with the assertion.
>> If you do that at -O0, what would happen?
>> Sun
>>
>> On Sat, Dec 17, 2011 at 12:52 AM, Gang Yu <yugang...@gmail.com> wrote:
>>
>>> Hi,
>>>
>>> Could a gatekeeper please help review the fix for bug595(
>>> https://bugs.open64.net/show_bug.cgi?id=595)?
>>>
>>> bug case:
>>>
>>> extern void doit(int);
>>> void
>>> quick_doit(int x)
>>> {
>>> if (__builtin_constant_p (x)
>>> && x != 0)
>>> asm volatile ("%0" : : "i#*X"(x));
>>> else
>>> doit(x);
>>> }
>>> Compiling quick_doit(0)
>>> "bug595.c", line 9: Error: Invalid 'asm' constrain : Cannot find
>>> immediate operand for ASM
>>> opencc ERROR:
>>> /fc/proj/ctires/open64/o64guru/OPEN64_X86_DBG/LATEST/bits//lib/gcc-lib/x86_64-open64-linux/5.0/be
>>> returned non-zero status 4
>>> Analysis:
>>> __builtin_constant_p(x) && x !=0 should be directly folded to if 0(it
>>> did not), then DCE does unreachable elimination, which finally sent out
>>> "doit" to CG.
>>>
>>> Suggested fix:
>>> index 148c4e2..42f55fb 100644
>>> --- a/osprey/be/opt/opt_htable.cxx
>>> +++ b/osprey/be/opt/opt_htable.cxx
>>> @@ -3575,7 +3575,9 @@ CODEMAP::Add_expr(WN *wn, OPT_STAB *opt_stab,
>>> STMTREP *stmt, CANON_CR *ccr,
>>> ccr->Set_tree(NULL);
>>> ccr->Set_scale(retv->Const_val());
>>> retv->DecUsecnt();
>>> - return FALSE;
>>> + // bug595 open64.net. intrinsic op folded to compile constant
>>> + // should be marked propogated for further fold/optimizations.
>>> + return TRUE;
>>> }
>>> if (retv->Kind() == CK_RCONST) {
>>> ccr->Set_tree(retv);
>>> Would a gatekeeper help the review? thanks
>>> 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
>>>
>>>
>>
>
------------------------------------------------------------------------------
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