This is the mail archive of the gcc-bugs@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]

[Bug target/80101] ICE in store_data_bypass_p, at recog.c:3737


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?

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