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

--- Comment #290 from John Paul Adrian Glaubitz <glaubitz at physik dot 
fu-berlin.de> ---
(In reply to Kazumoto Kojima from comment #263)
> Created attachment 59132 [details]
> a patch rewriting movsh_ie_ra
> 
> This patch splits movsf_ie_ra into several new patterns to remove
> match_scratch.  Also define a new sub-pattern of movdf for constant loads.
>     
>     * gcc/config/sh/predicates.md (pc_relative_load_operand):
>     New predicate.
>     * gcc/config/sh/sh-protos.h (sh_movsf_ie_ra_split_p): Remove.
>     (sh_movsf_ie_y_split_p): New proto.
>     * gcc/config/sh/sh.cc: (sh_movsf_ie_ra_split_p): Remove.
>     (sh_movsf_ie_y_split_p): New function.
>     * gcc/config/sh/sh.md (movdf_i4_F_z): New insn pattern.
>     (movdf): Use it.
>     (movsf_ie_ra): Use define_insn instead of define_insn_and_split.
>     (movsf_ie_F_z): Rename from movsf_ie_const_ra.
>     (movsf_ie_Q_z, movsf_ie_y): New insn pattern.
>     (movsf): Use new patterns.
>     (movdf_i4_F_z+7): New splitter.
> 
> With it, now "make check-gcc" has no new ICEs with unix/-m4/-mlra when
> comparing unix/-m4.

I have added this patch on top of the other patches and got an ICE when
bootstrapping Ada natively:

a-ngcefu.adb: In function 'Ada.Numerics.Complex_Elementary_Functions.Arccos':
a-ngcefu.adb:177:8: error: unable to find a register to spill
a-ngcefu.adb:177:8: error: this is the insn:
(insn 105 605 587 10 (parallel [
            (set (reg:SF 449 [orig:184 _24 ] [184])
                (reg:SF 463))
            (use (reg:SI 154 fpscr0))
        ]) "a-ngcefu.adb":164:17 222 {movsf_ie_ra}
     (expr_list:REG_DEAD (reg:SF 463)
        (nil)))
during RTL pass: reload

Reply via email to