[PATCH 1/4] Preliminary m68k patches
Jeff Law
law@redhat.com
Wed Nov 13 20:37:00 GMT 2019
On 11/13/19 6:08 AM, Bernd Schmidt wrote:
> This tidies up a few spots in the m68k backend in preparation for the
> large patch to follow. This is purely for review purposes: this patch
> has not been tested independently, and will be committed together with
> the following one.
>
> Noteworthy changes:
>
> Some patterns and peepholes were unified through mode iterators. The
> m68k_subword_comparison_operator predicate was adapted to also work with
> SImode.
>
> There are already scc_di patterns, so there is no need to generate a cc0
> set/use pair in cstoredi.
>
> Without HAVE_cc0, combine sometimes substitutes a stack push into the
> destination of a divmod instruction, and then gets confused because it
> doesn't seem to expect it in a PARALLEL. Since the instruction only
> works on registers anyway, use register_operand.
>
> There are patterns that use register_operand with "do" constraints which
> allow memory. This works at reload time, but the instruction can not be
> rerecognized later on. This becomes a problem if such operands occur in
> a jump instruction, as subsequent passes will try to redirect branches
> and thus attempt to rerecognize the pattern.
>
> movqi/movhi do not accept constants that are not CONST_INT. The code to
> output them would not set flags correctly and was changed to
> gcc_unreachable.
>
> Comments were added to some patterns which are not being generated due
> to incorrect tests/predicates. Fixing these is out of scope for this
> work, but the problems are at least documented.
>
> All the passes working on conditional traps seem to assume
> const_true_rtx is used for unconditional ones, rather than const1_rtx.
>
>
> Bernd
>
>
> m68k-1.diff
>
> * config/m68k/m68k.c (output_move_himode, output_move_qimode):
> Replace code for non-CONST_INT constants with gcc_unreachable.
> * config/m68k/m68k.md (cbranchdi): Don't generate individual
> compare and test.
> (CMPMODE): New mode_iterator.
> (cbranchsi4, cbranchqi4, cbranchhi4): Replace expanders with
> cbranch<mode>4.
> (cstoresi4, cstoreqi4, cstorehi4): Replace expanders with
> cstore<mode>4.
> (cmp<mode>_68881): Remove 'F' constraint from first comparison
> operand.
> (bit test insns patterns): Use nonimmediate_operand, not
> register_operand, for source operands that allow memory in
> their constraints.
> (divmodsi4, udivmodsi4, divmodhi4 and related unnamed patterns):
> Use register_operand, not nonimmediate_operand, for the
> destinations.
> (DBCC): New mode_iterator.
> (dbcc peepholes): Use it to reduce duplication.
> (trap): Use const_true_rtx, not const1_rtx.
> * config/m68k/predicates.md (m68k_comparison_operand): Renamed
> from m68k_subword_comparison_operand and changed to handle
> SImode.
OK. I'd actually recommend this go ahead and get installed. My tester
will bootstrap it overnight.
Jeff
More information about the Gcc-patches
mailing list