Also, I don't believe we ever designed WOPT to deal with ASM statements. To
teach various phase to optimize asm stmt in wopt is not the goal.
Sun
On Sat, Dec 17, 2011 at 5:23 PM, Sun Chan <sun.c...@gmail.com> wrote:
> 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