Jeff Law 700337494e Minor H8 shift code generation change in preparation for cc0 removal
So I didn't stay up late to work from pago pago this year and beat the stage1
close, but I do want to flush out the removal of cc0 from the H8 port this
cycle.  Given these patches only affect the H8 and the H8 would be killed this
cycle without the conversion, I think this is suitable even though we're past
stage1 close.

This patch addresses an initial codegen issue that would have resulted in
regressions after removal of cc0.  The compare/test eliminate pass is unable to
handle multiple clobbers.  So patterns that clobber a scratch and also clobber
a condition code are never used to eliminate a compare/test.

The H8 can shift 1 or 2 bits at a time depending on the precise model.  Not
surprisingly we have multiple strategies to implement shifts, some of which
clobber scratch registers -- but we have a clobber on every shift insn and as
a result they can not participate in compare/test removal once cc0 is removed
from the port.

This patch removes the clobber in the initial code generation in cases where
it's obviously not needed allowing those shifts to participate in compare/test
removal in a future patch.  It has the advantage that is also generates
slightly better code.  By installing this now the removal of cc0 is a smaller
patch, but more importantly, it allows for a more direct comparison of the
generated code before/after cc0 removal.

I've had my tester test before/after this patch with no regressions on the
major H8 multilibs.  I've also spot checked the generated code and as expected
it's ever-so-slightly better after this patch.

I'll be installing this on the trunk momentarily.  More patches will follow,
though probably not in rapid succession as my time to push this stuff is very
limited.

gcc/

	* config/h8300/constraints.md (R constraint): Add argument to call
	to h8300_shift_needs_scratch_p.
	(S and T constraints): Similary.
	* config/h8300/h8300-protos.h: Update h8300_shift_needs_scratch_p
	prototype.
	* config/h8300/h8300.c (expand_a_shift): Emit a different pattern
	if the shift does not require a scratch register.
	(h8300_shift_needs_scratch_p): Refine to be more accurate.
	* config/h8300/shiftrotate.md (shiftqi_noscratch): New pattern.
	(shifthi_noscratch, shiftsi_noscratch): Similarly.
2020-11-18 21:01:06 -07:00
2020-11-17 00:16:27 +00:00
2020-11-19 00:16:30 +00:00
2020-10-30 00:16:29 +00:00
2020-10-12 00:16:25 +00:00
2020-10-21 00:16:36 +00:00
2020-11-12 00:16:39 +00:00
2020-11-19 00:16:30 +00:00
2020-11-19 00:16:30 +00:00
2020-11-02 20:53:00 +00:00
2020-11-19 00:16:30 +00:00
2020-11-14 00:16:38 +00:00
2020-10-12 00:16:25 +00:00
2020-11-19 00:16:30 +00:00
2020-11-14 00:16:38 +00:00
2020-11-19 00:16:30 +00:00
2020-11-16 12:52:43 +01:00
2020-11-17 00:16:27 +00:00

This directory contains the GNU Compiler Collection (GCC).

The GNU Compiler Collection is free software.  See the files whose
names start with COPYING for copying permission.  The manuals, and
some of the runtime libraries, are under different terms; see the
individual source files for details.

The directory INSTALL contains copies of the installation information
as HTML and plain text.  The source of this information is
gcc/doc/install.texi.  The installation information includes details
of what is included in the GCC sources and what files GCC installs.

See the file gcc/doc/gcc.texi (together with other files that it
includes) for usage and porting information.  An online readable
version of the manual is in the files gcc/doc/gcc.info*.

See http://gcc.gnu.org/bugs/ for how to report bugs usefully.

Copyright years on GCC source files may be listed using range
notation, e.g., 1987-2012, indicating that every year in the range,
inclusive, is a copyrightable year that could otherwise be listed
individually.
Description
No description provided
Readme 2.1 GiB
Languages
C++ 31.9%
C 31.3%
Ada 12%
D 6.5%
Go 6.4%
Other 11.5%