This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH, i386] Fix PR64882, ICE on valid code at -O3 with -g enabled in simplify_subreg, at simplify-rtx.c:5681


Hello!

Attached patch fixes PR64882, where special predicate
address_no_seg_operand allowed operands in DImode, as well as SImode.
This resulted in invalid RTX, produced by *lea<mode>:

(insn 60 59 61 3 (set (reg:SI 2 cx [orig:103 D.1909 ] [103])
        (plus:DI (reg:DI 0 ax [106])
            (reg:DI 1 dx [orig:104 D.1912 ] [104]))) pr64882.c:27 213 {*leasi}
     (nil))

The patch tightens the predicate to account for non-VOID modes, while
still allowing VOIDmode CONST_INTs.

Additionally, the patch clears a mess around the mode of the
address_operand (luckily, x86 ignores this mode, see
ix86_legitimate_address_p) and changes all uses to explicitly pass
VOIDmode. Please note that the mode of address_operand predicate means
the mode at the pointed location, not the mode of the operand itself.

2015-01-31  Uros Bizjak  <ubizjak@gmail.com>

        PR target/64882
    * config/i386/predicates.md (address_no_seg_operand): Reject
    non-CONST_INT_P operands in invalid mode.

2015-01-31  Uros Bizjak  <ubizjak@gmail.com>

    * config/i386/i386.md (*prefetch_prefetchw1): Remove mode of
    address_operand 0.  Rename from *prefetch_prefetchwt1_<mode>.
    * config/i386/predicates.md (address_no_seg_operand): Call
    address_operand with VOIDmode.
    (vsib_address_operand): Ditto.
    (address_mpx_no_base_operand): Ditto.
    (address_mpx_no_index_operand): Ditto.

testsuite/ChangeLog:

2015-01-31  Uros Bizjak  <ubizjak@gmail.com>

        PR target/64882
    * gcc.dg/torture/pr64882.c: New test.

Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

Patch was committed to mainline SVN, and will be backported to other
release branches.

Uros.

Attachment: p.diff.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]