This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: MD representation of IA64 floating point operations
- From: Jim Wilson <wilson at specifixinc dot com>
- To: Steve Ellcey <sje at cup dot hp dot com>
- Cc: zack at codesourcery dot com, gcc at gcc dot gnu dot org, rth at twiddle dot net,Gary dot Tracy2 at hp dot com, Sverre dot Jarp at cern dot ch, Michal dot Kapalka at cern dot ch
- Date: 23 Jul 2004 12:38:39 -0700
- Subject: Re: MD representation of IA64 floating point operations
- References: <200407231617.JAA27163@hpsje.cup.hp.com>
On Fri, 2004-07-23 at 09:17, Steve Ellcey wrote:
> I am curious about this. I looked around configure, make, and the doc
> directory but I don't see where or how this preprocessing would happen.
Because it is gone, again. This keeps popping up and disappearing, and
I can never keep track of it. I see in gcc-2.95.3 there is md_cppflags,
but it disappeared sometime between then and now. It was never really
that great of an idea, as it used cpp to preprocess md files, and then
you had all of the usual problems of trying to get something that isn't
C source code through the C preprocessor. Some kind of RTL macros would
be better, or at least use something language neutral, like m4, but in
any case, I think we should consider this a last resort.
modeless patterns have the flaw that they can match stuff that they were
never intended to match. That is why I suggested checking the modes in
the predicate, to make sure we got one of the operand modes we were
expecting. modeless patterns can also confuse parts of the code
generators and optimizers. There are various places that look for
operand modes and do things with them. See for instance
emit_conditional_move in optabs.c, which has code like this
if (! (*insn_data[icode].operand[2].predicate)
(op2, insn_data[icode].operand[2].mode))
op2 = copy_to_mode_reg (insn_data[icode].operand[2].mode, op2);
If you have a modeless pattern, and the predicate returns false, then
the code tries to copy op2 into a VOIDmode register which won't work.
There are some similar places in expand_binop, but they have explicit
checks for VOIDmode to avoid this problem.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com