This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/80101] ICE in store_data_bypass_p, at recog.c:3737
- From: "segher at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 21 Mar 2017 02:53:52 +0000
- Subject: [Bug target/80101] ICE in store_data_bypass_p, at recog.c:3737
- Auto-submitted: auto-generated
- References: <bug-80101-4@http.gcc.gnu.org/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80101
--- Comment #1 from Segher Boessenkool <segher at gcc dot gnu.org> ---
power6.md defines a bypass:
; define the bypass for the case where the value written
; by a fixed point op is used as the source value on a
; store.
(define_bypass 1 "power6-integer,\
power6-exts,\
power6-shift,\
power6-insert,\
power6-insert-dword"
"power6-store,\
power6-store-update,\
power6-store-update-indexed,\
power6-fpstore,\
power6-fpstore-update"
"store_data_bypass_p")
where power6-integer is defined as:
(define_insn_reservation "power6-integer" 1
(and (ior (eq_attr "type" "integer")
(and (eq_attr "type" "add,logical")
(eq_attr "dot" "no")))
(eq_attr "cpu" "power6"))
"FXU_power6")
and the default for "type" is "integer". The instruction on which we
crash is:
(define_insn "blockage"
[(unspec_volatile [(const_int 0)] UNSPECV_BLOCK)]
""
"")
(which does not have a SET in it, which however is required by
store_data_bypass_p).
"blockage" should not have type "integer" for this to work.
To fix it more generally, maybe we can teach bypass_p to ignore insns
without outputs?