This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: A plan for eliminating cc0
- From: Paul Schlie <schlie at comcast dot net>
- To: Ian Lance Taylor <ian at airs dot com>
- Cc: <gcc at gcc dot gnu dot org>
- Date: Sun, 27 Mar 2005 01:32:16 -0500
- Subject: Re: A plan for eliminating cc0
> From: Ian Lance Taylor <ian@airs.com>
> I'm also not aware of processors changing as you describe, except for
> the particular special case of SIMD vector instructions. gcc can and
> does represent vector instructions as a single set.
- Understood, unfortunately hiding the multiple-set nature of instructions
which simultaneously set data and condition-state register values in an
abstract new data mode type like simd instructions do won't likely be
helpful, as unlike multiple discrete simd values embedded in a vector
data type, data and condition values tend to have different subsequent
dependant evaluation paths.
> Yes, but the point of representing changes to the condition flags is
> precisely to permit optimizations when the condition flags are used,
> and that is precisely when the single_set assumption will fail. You
> are correct that in general adding descriptions of the condition code
> changes to the RTL won't inhibit optimizations that don't meaningfully
> set the condition code flags. But it will inhibit optimizations which
> do set the condition code flags, and that more or less obviates the
> whole point of representing the condition code setting in the first
> place.
- OK, I think I understand the difference in our perspective on the issue.
In general it seems that much of the concern related to the optimization
complexity relating to multi-set instructions is related to attempting
to iteratively optimize instruction mappings?
I presume that "code" can/should be optimally generated once by initially
optimally covering the rtl representing a basic block (with minimal cost
in either storage, cycles or some hybrid of both); where there's then no
need to ever subsequently screw with it again (although various basic
block partitioning resulting from various loop transformations strategies,
etc. may require multiple mappings to determine their relative costs).
Where this presumption basically ideally requires that the target be
described as accurately as possible entirely in rtl, with no reliance
on procedural or peephole optimization, relying entirely on GCC to
optimally cover the program's basic-block rtl optimally with rtl
instruction description equivalents; thereby by fully exposing all
dependencies, an optimal instruction schedule will naturally result
from an optimal rtl graph covering without needing to perform an
explicit further optimization for example.
(is this not feasible if the target is accurately described in rtl?)