This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [committed] Fix call branch shortening on PA
- From: John David Anglin <dave at hiauly1 dot hia dot nrc dot ca>
- To: gcc-patches at gcc dot gnu dot org
- Date: Wed, 5 Dec 2012 20:49:28 -0500
- Subject: Re: [committed] Fix call branch shortening on PA
- References: <20121113010828.GA28616@hiauly1.hia.nrc.ca>
- Reply-to: John David Anglin <dave dot anglin at nrc-cnrc dot gc dot ca>
On Mon, 12 Nov 2012, John David Anglin wrote:
> The attached change fixes PR target/55195.
The attached change updates the above fix. It results in slightly better
code being generated by genattrab. However, the main reason for the change
is that eliminating the use of match_test makes the fix compatible with
the 4.6 branch.
Tested on hppa-linux-gnu-gcc, hppa2.0w-hp-hpux11.11 and hppa64-hp-hpux11.11
on trunk and 4.7 branches with no observed regressions. Committed to trunk
and 4.7.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
2012-12-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* config/pa/pa.md: Use "const_int 0" instead of match_test to simplify
opaque cond in all call insns.
Index: config/pa/pa.md
===================================================================
--- config/pa/pa.md (revision 194055)
+++ config/pa/pa.md (working copy)
@@ -5384,7 +5384,7 @@
"* return pa_output_mul_insn (0, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
@@ -5397,7 +5397,7 @@
"* return pa_output_mul_insn (0, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "muldi3"
@@ -5490,7 +5490,7 @@
return pa_output_div_insn (operands, 0, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
@@ -5506,7 +5506,7 @@
return pa_output_div_insn (operands, 0, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "udivsi3"
@@ -5551,7 +5551,7 @@
return pa_output_div_insn (operands, 1, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
@@ -5567,7 +5567,7 @@
return pa_output_div_insn (operands, 1, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "modsi3"
@@ -5608,7 +5608,7 @@
return pa_output_mod_insn (0, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
@@ -5623,7 +5623,7 @@
return pa_output_mod_insn (0, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_expand "umodsi3"
@@ -5664,7 +5664,7 @@
return pa_output_mod_insn (1, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
(define_insn ""
@@ -5679,7 +5679,7 @@
return pa_output_mod_insn (1, insn);"
[(set_attr "type" "milli")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_millicode_call (insn)")))])
;;- and instructions
@@ -7209,7 +7209,7 @@
}"
[(set_attr "type" "call")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_symref_pic"
@@ -7285,7 +7285,7 @@
}"
[(set_attr "type" "call")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 0)")))])
;; This pattern is split if it is necessary to save and restore the
@@ -7369,7 +7369,7 @@
}"
[(set_attr "type" "call")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_reg"
@@ -7385,7 +7385,7 @@
}"
[(set_attr "type" "dyncall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
@@ -7462,7 +7462,7 @@
}"
[(set_attr "type" "dyncall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
@@ -7545,7 +7545,7 @@
}"
[(set_attr "type" "dyncall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 12)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 12)]
(symbol_ref "pa_attr_length_indirect_call (insn)")))])
(define_expand "call_value"
@@ -7673,7 +7673,7 @@
}"
[(set_attr "type" "call")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_val_symref_pic"
@@ -7755,7 +7755,7 @@
}"
[(set_attr "type" "call")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 0)")))])
;; This pattern is split if it is necessary to save and restore the
@@ -7845,7 +7845,7 @@
}"
[(set_attr "type" "call")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 0)")))])
(define_insn "call_val_reg"
@@ -7862,7 +7862,7 @@
}"
[(set_attr "type" "dyncall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
@@ -7945,7 +7945,7 @@
}"
[(set_attr "type" "dyncall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; This pattern is split if it is necessary to save and restore the
@@ -8034,7 +8034,7 @@
}"
[(set_attr "type" "dyncall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 12)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 12)]
(symbol_ref "pa_attr_length_indirect_call (insn)")))])
;; Call subroutine returning any type.
@@ -8130,7 +8130,7 @@
}"
[(set_attr "type" "sibcall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_insn "sibcall_internal_symref_64bit"
@@ -8147,7 +8147,7 @@
}"
[(set_attr "type" "sibcall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_expand "sibcall_value"
@@ -8218,7 +8218,7 @@
}"
[(set_attr "type" "sibcall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_insn "sibcall_value_internal_symref_64bit"
@@ -8236,7 +8236,7 @@
}"
[(set_attr "type" "sibcall")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 8)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 8)]
(symbol_ref "pa_attr_length_call (insn, 1)")))])
(define_insn "nop"
@@ -9275,7 +9275,7 @@
}"
[(set_attr "type" "sh_func_adrs")
(set (attr "length")
- (cond [(and (match_test "0") (eq (const_int 0) (pc))) (const_int 28)]
+ (cond [(and (const_int 0) (eq (const_int 0) (pc))) (const_int 28)]
(plus (symbol_ref "pa_attr_length_millicode_call (insn)")
(const_int 20))))])