This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: A plan for eliminating cc0


On Thu, Mar 24, 2005 at 11:44:52AM -0500, Ian Lance Taylor wrote:
> OK, here is a different approach toward eliminating cc0, based on a
> combination of my earlier proposal and what Alex described.  I'm
> looking for comments from anybody.

One potential problem: once the NOTICE_UPDATE_CC pass is done, we
can no longer run *any* pass that reorders code, because we're
left with

	[(set (reg 1) (plus (reg 1) (reg 2)))
	 (clobber (reg cc_reg))]

	[(set (pc) (if_then_else (lt (reg cc_reg) 0)
			(label 1)
			(label 2)))]

Note that there's no longer any insn that *sets* cc_reg.  I think
that's a bit dangerous.

One solution to this is to convert the new setter to 

	[(set (reg 1) (plus (reg 1) (reg 2)))
	 (set (reg cc_reg) (unspec [(const_int 0)] cc_set))]

I don't think it matters what we set cc_reg to, just that *some*
set is visible in the instruction stream.

This requires that we generate two patterns for clobbercc insns,
but that shouldn't be a problem.

Otherwise I like the proposal.  In particular, I like being able
to reuse the existing NOTICE_UPDATE_CC code.


r~


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]