Commit cdce4d18 by Segher Boessenkool Committed by Segher Boessenkool

rs6000: Change the length attribute default

This moves what is currently the default of the length attribute to
the only branch instruction patterns where it applies, namely, the
B-form instructions.  It was used for the "jump" instruction as well
before, but that is an I-form instruction and always has length 4.


	* config/rs6000/rs6000.md (length): Always define as const_int 4.
	(unnamed conditional branch define_insn): Set length to 4 or 8
	depending on offset.
	(<bd>_<mode>): Similar, for alternative 0.
	(<bd>tf_<mode>): Ditto.

From-SVN: r263601
parent 729a01f7
2018-08-16 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/rs6000.md (length): Always define as const_int 4.
(unnamed conditional branch define_insn): Set length to 4 or 8
depending on offset.
(<bd>_<mode>): Similar, for alternative 0.
(<bd>tf_<mode>): Ditto.
2018-08-16 Tamar Christina <tamar.christina@arm.com> 2018-08-16 Tamar Christina <tamar.christina@arm.com>
* expr.c (copy_blkmode_to_reg): Perform larger copies when safe. * expr.c (copy_blkmode_to_reg): Perform larger copies when safe.
......
...@@ -243,18 +243,8 @@ ...@@ -243,18 +243,8 @@
;; Is copying of this instruction disallowed? ;; Is copying of this instruction disallowed?
(define_attr "cannot_copy" "no,yes" (const_string "no")) (define_attr "cannot_copy" "no,yes" (const_string "no"))
;; Length (in bytes). ;; Length of the instruction (in bytes).
; '(pc)' in the following doesn't include the instruction itself; it is (define_attr "length" "" (const_int 4))
; calculated as if the instruction had zero size.
(define_attr "length" ""
(if_then_else (eq_attr "type" "branch")
(if_then_else (and (ge (minus (match_dup 0) (pc))
(const_int -32768))
(lt (minus (match_dup 0) (pc))
(const_int 32764)))
(const_int 4)
(const_int 8))
(const_int 4)))
;; Processor type -- this attribute must exactly match the processor_type ;; Processor type -- this attribute must exactly match the processor_type
;; enumeration in rs6000-opts.h. ;; enumeration in rs6000-opts.h.
...@@ -12346,7 +12336,14 @@ ...@@ -12346,7 +12336,14 @@
{ {
return output_cbranch (operands[1], "%l0", 0, insn); return output_cbranch (operands[1], "%l0", 0, insn);
} }
[(set_attr "type" "branch")]) [(set_attr "type" "branch")
(set (attr "length")
(if_then_else (and (ge (minus (match_dup 0) (pc))
(const_int -32768))
(lt (minus (match_dup 0) (pc))
(const_int 32764)))
(const_int 4)
(const_int 8)))])
(define_insn "" (define_insn ""
[(set (pc) [(set (pc)
...@@ -12716,7 +12713,17 @@ ...@@ -12716,7 +12713,17 @@
return "<bd_neg> $+8\;b %l0"; return "<bd_neg> $+8\;b %l0";
} }
[(set_attr "type" "branch") [(set_attr "type" "branch")
(set_attr "length" "*,16,20,20")]) (set (attr "length")
(cond [(eq (symbol_ref "which_alternative") (const_int 0))
(if_then_else (and (ge (minus (match_dup 0) (pc))
(const_int -32768))
(lt (minus (match_dup 0) (pc))
(const_int 32764)))
(const_int 4)
(const_int 8))
(eq (symbol_ref "which_alternative") (const_int 1))
(const_int 16)]
(const_int 20)))])
;; Now the splitter if we could not allocate the CTR register ;; Now the splitter if we could not allocate the CTR register
(define_split (define_split
...@@ -12795,7 +12802,17 @@ ...@@ -12795,7 +12802,17 @@
} }
} }
[(set_attr "type" "branch") [(set_attr "type" "branch")
(set_attr "length" "*,16,20,20")]) (set (attr "length")
(cond [(eq (symbol_ref "which_alternative") (const_int 0))
(if_then_else (and (ge (minus (match_dup 0) (pc))
(const_int -32768))
(lt (minus (match_dup 0) (pc))
(const_int 32764)))
(const_int 4)
(const_int 8))
(eq (symbol_ref "which_alternative") (const_int 1))
(const_int 16)]
(const_int 20)))])
;; Now the splitter if we could not allocate the CTR register ;; Now the splitter if we could not allocate the CTR register
(define_split (define_split
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment