https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68291

--- Comment #11 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> I'm not comfortable with your relaxing the assert in cfgexpand.c:set_rtl. 
> It means we could have a PARALLEL for a RESULT_DECL *and* other variables,
> because of coalescing.  Although we can deal with PARALLELs in a
> RESULT_DECL, not all expanders will deal with them successfully, IIRC.

Relaxing the assert is required by the ABI though, for vector types with
BLKmode that are returned in multiple registers.  The alternative would be to
smuggle them temporarily into a single register with large integer mode, but
that would be a little kludgy.  Or to declare that vector types with BLKmode
are not GIMPLE register types, but that looks overkill and undesirable in the
end.

> We should make sure the RESULT_DECL is not coalesced with other variables if 
> we
> are to accept a PARALLEL there.  It's not obvious to me that we already do
> that, but maybe we do as a side effect of assigning other variables of the
> same mode to BLKmode and thus to memory, so it might be that it's not a
> problem, after all, but I'd rather have at least a comment in the assert
> indicating that the intent of that case is to cover uncoalesced PARALLELs in
> RESULT_DECLs only.  If we did get coalescing, we would likely get expander
> ICEs elsewhere.

Yes, that's my thinking too, we'll get ICEs downstream if something is missing
in the machinery.  I'm going to add the comment.

Reply via email to