[Issue 13341] Wrong optimization for ref parameters and if statement
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Sun Sep 7 11:50:03 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=13341
yebblies <yebblies at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |yebblies at gmail.com
Hardware|x86_64 |All
OS|Linux |All
Severity|normal |major
--- Comment #2 from yebblies <yebblies at gmail.com> ---
This is a hard one...
Somehow the optimizer makes a jump from
el:003B2620 cnt=0 , TYbool 003B2A60 003B29A0
el:003B2A60 cnt=0 , TYint 003B2D5C 003B2E1C
el:003B2D5C cnt=0 , TYvoid 003B29E0 003B2D1C
el:003B29E0 cnt=0 && TYvoid 003B26A0 003B2960
el:003B26A0 cnt=0 var TYunsigned __key1
el:003B2960 cnt=0 = TYbool 003B2720 003B2920
el:003B2720 cnt=0 var TYbool of
el:003B2920 cnt=0 const TYbool 1
el:003B2D1C cnt=0 || TYvoid 003B2AE0 003B2CDC
el:003B2AE0 cnt=0 ^ TYbool 003B2AA0 003B26E0
el:003B2AA0 cnt=0 var TYbool of
el:003B26E0 cnt=0 const TYbool 1
el:003B2CDC cnt=0 call TYvoid 003B2C9C 003B2C5C
el:003B2C9C cnt=0 var TYD func _D5testx8__assertFiZv
el:003B2C5C cnt=0 const TYint 13L
el:003B2E1C cnt=0 += TYint 003B2D9C 003B2DDC
el:003B2D9C cnt=0 var TYint __key1
el:003B2DDC cnt=0 const TYint 1L
el:003B29A0 cnt=0 < TYbool 003B2860 003B2820
el:003B2860 cnt=0 var TYint __key1
el:003B2820 cnt=0 const TYunsigned 1L
to
el:003B10D4 cnt=0 , TYbool 003B1560 003B2A20
el:003B1560 cnt=0 = TYbool 003B1360 003B15A0
el:003B1360 cnt=0 var TYbool of
el:003B15A0 cnt=0 const TYbool 0
el:003B2A20 cnt=0 , TYbool 003B1460 003B2218
el:003B1460 cnt=0 = TYint 003B1114 003B14A0
el:003B1114 cnt=0 var TYint __key1
el:003B14A0 cnt=0 const TYint 0L
el:003B2218 cnt=0 = TYbool 003B2720 003B2920
el:003B2720 cnt=0 var TYbool of
el:003B2920 cnt=0 const TYbool 1
...
then eliminates most of the code because now 'of' is always 1.
I think this is happening in loopopt, but I don't know the code well enough to
find the cause.
--
More information about the Digitalmars-d-bugs
mailing list