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

--- Comment #63 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #62)
> What the patch including incremental one currently does is:
> 1) small _BitInt (on x86-64 N <= 64) - the BITINT_TYPEs are kept as is in
> the IL
>    and expanded, they always have non-BLKmode (QI/HI/SI/DI) and are handled
> like any
>    other INTEGER_TYPEs (except preserved in calls to ensure correct ABI
> passing)
> 2) middle _BitInt (on x86-64 N <= 128) - I keep in the IL just copy
> operations and
>    casts between them and INTEGER_TYPE (TImode in this case), actual
> arithmetics is
>    done on the INTEGER_TYPE
> 3) large _BitInt (on x86-64 that will be <= 255) - the intent was using
>    BIT_FIELD_REFs/BIT_INSERT_EXPR to make the IL simple and perform stuff on
> the
>    up to 4 limbs in this case in straight line code

So these large _BitInt already have BLKmode?  If so I'd suggest to
initially handle them like the huge _BitInt code but "unrolled" and
iterate on the code-gen later - I can have a look once one can play
with the actual code and testcases.

> 4) huge _BitInt (on x86-64 N > 255) use loops, VAR_DECL destination,
> VCE+ARRAY_REF
>    on the sources,
>    dunno yet if I can get good code by making the VAR_DECL clobbered
> immediately after
>    I load a SSA_NAME from it (whether out of SSA/expansion could then extend
> the
>    lifetime of the VAR_DECL, or if I should have some pass do that, or the
> bitint pass
>    figure out the last use and put clobber only after that, or even replace
> the SSA_NAME
>    uses with accesses to VAR_DECL
> 
> Anyway, I think I'll work now on the add/sub with carry now and continue on
> _BitInt only after that.

Reply via email to