[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[avr-libc-dev] Re: ... Some (?funny?) experimental results when removing
[avr-libc-dev] Re: ... Some (?funny?) experimental results when removing part of the monolithic SI/HI instruction patterns :-) ...
11 Mar 2005 08:13:23 +0300
Gnus/5.09 (Gnus v5.9.0) Emacs/21.3
Björn Haase <address@hidden> writes:
> I'd like to report on some experiments on the AVR back-end that lead to some
> results, that I think are sufficiently interresting and sufficiently funny to
> be shared and discussed. This mail is not an urgent request for support, so
> continue reading only, If you have time and if you are willing and prepared
> to see weird things :-) :
> and that it, thus is useless to perform the first or operation on it. Also
> the sign extension is almost completely optimized away, except for a remnant
> QI single mode register r18 that actually is never used. I do not quite
> understand how this r18 expressions come out . :-) ... And the third weird
> thing is, that seemingly gcc completely looses track of the registers in use
> when push/popping r16/r17 ...
> The first conclusion I am drawing is:
> 1.) Removing some of the patterns does not necessarily result in
> worse code.
> 2.) There seems to persist a problem in the mechanism that keeps track of the
> used and unused registers. I doubt, whether this problem is also present for
> the usual back-end *with* the SI/HI mode patterns.
IMHO: It's a problem related to handling of subregs.
> I am just running the test suite with this change and so far I have observed
> only a small amount of regressions seemingly due to problems with
The "small amount" is *amount*.
> Since I am not too familiar with the history of the back-end:
> Is there a specific original reason why it was neccessary to define the SI
> HI mode patterns for the logic operations (I do understand that it was
> necessary to define plus and minus but why this also for
Few years ago SI and HI mode patterns was better. May be something
changed inside GCC core.
Generally, GCC have a few optimization passes which work better with
SImode or HImode registers instead of subregs.
PS: May be better to keep SI and HI mode registers until reload and split
them only after reload. (You can use "reload_completed" in your