A plan for eliminating cc0

Richard Henderson rth@redhat.com
Thu Mar 24 19:29:00 GMT 2005


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~



More information about the Gcc mailing list