;; of memory mismatch stalls. We may want to do the splitting for optimizing
;; for size, but that can (should?) be handled by generic code instead.
(define_split
- [(set (match_operand 0 "QIreg_operand")
- (and (match_operand 1 "register_operand")
- (match_operand 2 "const_int_operand")))
+ [(set (match_operand:SWI248 0 "QIreg_operand")
+ (and:SWI248 (match_operand:SWI248 1 "register_operand")
+ (match_operand:SWI248 2 "const_int_operand")))
(clobber (reg:CC FLAGS_REG))]
"reload_completed
&& (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
- && !(~INTVAL (operands[2]) & ~(255 << 8))
- && GET_MODE (operands[0]) != QImode"
+ && !(~INTVAL (operands[2]) & ~(255 << 8))"
[(parallel [(set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8))
(and:SI (zero_extract:SI (match_dup 1)
(const_int 8) (const_int 8))
;; Since AND can be encoded with sign extended immediate, this is only
;; profitable when 7th bit is not set.
(define_split
- [(set (match_operand 0 "any_QIreg_operand")
- (and (match_operand 1 "general_operand")
- (match_operand 2 "const_int_operand")))
+ [(set (match_operand:SWI248 0 "any_QIreg_operand")
+ (and:SWI248 (match_operand:SWI248 1 "general_operand")
+ (match_operand:SWI248 2 "const_int_operand")))
(clobber (reg:CC FLAGS_REG))]
"reload_completed
&& (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
&& !(~INTVAL (operands[2]) & ~255)
- && !(INTVAL (operands[2]) & 128)
- && GET_MODE (operands[0]) != QImode"
+ && !(INTVAL (operands[2]) & 128)"
[(parallel [(set (strict_low_part (match_dup 0))
(and:QI (match_dup 1)
(match_dup 2)))
(set_attr "length_immediate" "0")
(set_attr "mode" "QI")])
+;; Convert wide OR instructions with immediate operand to shorter QImode
+;; equivalents when possible.
+;; Don't do the splitting with memory operands, since it introduces risk
+;; of memory mismatch stalls. We may want to do the splitting for optimizing
+;; for size, but that can (should?) be handled by generic code instead.
(define_split
- [(set (match_operand 0 "QIreg_operand")
- (any_or (match_operand 1 "register_operand")
- (match_operand 2 "const_int_operand")))
+ [(set (match_operand:SWI248 0 "QIreg_operand")
+ (any_or:SWI248 (match_operand:SWI248 1 "register_operand")
+ (match_operand:SWI248 2 "const_int_operand")))
(clobber (reg:CC FLAGS_REG))]
"reload_completed
&& (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
- && !(INTVAL (operands[2]) & ~(255 << 8))
- && GET_MODE (operands[0]) != QImode"
+ && !(INTVAL (operands[2]) & ~(255 << 8))"
[(parallel [(set (zero_extract:SI (match_dup 0) (const_int 8) (const_int 8))
(any_or:SI (zero_extract:SI (match_dup 1)
(const_int 8) (const_int 8))
;; Since OR can be encoded with sign extended immediate, this is only
;; profitable when 7th bit is set.
(define_split
- [(set (match_operand 0 "any_QIreg_operand")
- (any_or (match_operand 1 "general_operand")
- (match_operand 2 "const_int_operand")))
+ [(set (match_operand:SWI248 0 "any_QIreg_operand")
+ (any_or:SWI248 (match_operand:SWI248 1 "general_operand")
+ (match_operand:SWI248 2 "const_int_operand")))
(clobber (reg:CC FLAGS_REG))]
"reload_completed
&& (!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun))
&& !(INTVAL (operands[2]) & ~255)
- && (INTVAL (operands[2]) & 128)
- && GET_MODE (operands[0]) != QImode"
+ && (INTVAL (operands[2]) & 128)"
[(parallel [(set (strict_low_part (match_dup 0))
(any_or:QI (match_dup 1)
(match_dup 2)))