assign_parm_setup_block handling of parallels

Aldy Hernandez aldyh@redhat.com
Thu Dec 23 20:30:00 GMT 2004


Hi Richard.  Hi folks.

The parallel returned by spe_build_register_parallel() is about to change
to a DImode, as you've suggested, to generate better code on e500v2
(and code that actually works as a bonus).

Something like:

(parallel:DF [
        (expr_list:REG_DEP_TRUE (reg:DI 3 3)
            (const_int 0 [0x0]))
    ])

However... consider this (assign_parm_setup_block):

  /* If we've a non-block object that's nevertheless passed in parts,
     reconstitute it in register operations rather than on the stack.  */
  if (GET_CODE (entry_parm) == PARALLEL
      && data->nominal_mode != BLKmode
      && XVECLEN (entry_parm, 0) > 1		<-- BOO HISS!
      && use_register_for_decl (parm))

Is this vector length check here for a particular reason?  Can we remove
it, or should I add code to look inside and allow this condition, if
the register in the parallel will span more than one hard register?

Cheers.
Aldy



More information about the Gcc mailing list