[Darwin, PPC, Mode Iterators 1/n] Use mode iterators in picbase patterns.

This switches the picbase load and reload patterns to use the 'P' mode
iterator instead of writing an SI and DI pattern for each.

gcc/ChangeLog:

2019-09-24  Iain Sandoe  <iain@sandoe.co.uk>

	* config/rs6000/rs6000.md (load_macho_picbase_<mode>): New, using
	the 'P' mode iterator, replacing the (removed) SI and DI variants.
	(reload_macho_picbase_<mode>): Likewise.

From-SVN: r276107
This commit is contained in:
Iain Sandoe 2019-09-24 19:28:08 +00:00 committed by Iain Sandoe
parent 42eb48017d
commit dd9ed09905
2 changed files with 14 additions and 47 deletions

View File

@ -1,3 +1,9 @@
2019-09-24 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/rs6000.md (load_macho_picbase_<mode>): New, using
the 'P' mode iterator, replacing the (removed) SI and DI variants.
(reload_macho_picbase_<mode>): Likewise.
2019-09-24 Iain Sandoe <iain@sandoe.co.uk>
* config/rs6000/rs6000.md: Move darwin.md include until

View File

@ -217,7 +217,7 @@ You should have received a copy of the GNU General Public License
"")
(define_expand "load_macho_picbase"
[(set (reg:SI LR_REGNO)
[(set (reg LR_REGNO)
(unspec [(match_operand 0 "")]
UNSPEC_LD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic"
@ -230,9 +230,9 @@ You should have received a copy of the GNU General Public License
DONE;
})
(define_insn "load_macho_picbase_si"
[(set (reg:SI LR_REGNO)
(unspec:SI [(match_operand:SI 0 "immediate_operand" "s")
(define_insn "load_macho_picbase_<mode>"
[(set (reg:P LR_REGNO)
(unspec:P [(match_operand:P 0 "immediate_operand" "s")
(pc)] UNSPEC_LD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic"
{
@ -246,22 +246,6 @@ You should have received a copy of the GNU General Public License
[(set_attr "type" "branch")
(set_attr "cannot_copy" "yes")])
(define_insn "load_macho_picbase_di"
[(set (reg:DI LR_REGNO)
(unspec:DI [(match_operand:DI 0 "immediate_operand" "s")
(pc)] UNSPEC_LD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic && TARGET_64BIT"
{
#if TARGET_MACHO
machopic_should_output_picbase_label (); /* Update for new func. */
#else
gcc_unreachable ();
#endif
return "bcl 20,31,%0\n%0:";
}
[(set_attr "type" "branch")
(set_attr "cannot_copy" "yes")])
(define_expand "macho_correct_pic"
[(set (match_operand 0 "")
(plus (match_operand 1 "")
@ -301,7 +285,7 @@ You should have received a copy of the GNU General Public License
[(set_attr "length" "8")])
(define_expand "reload_macho_picbase"
[(set (reg:SI LR_REGNO)
[(set (reg LR_REGNO)
(unspec [(match_operand 0 "")]
UNSPEC_RELD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic"
@ -314,9 +298,9 @@ You should have received a copy of the GNU General Public License
DONE;
})
(define_insn "reload_macho_picbase_si"
[(set (reg:SI LR_REGNO)
(unspec:SI [(match_operand:SI 0 "immediate_operand" "s")
(define_insn "reload_macho_picbase_<mode>"
[(set (reg:P LR_REGNO)
(unspec:P [(match_operand:P 0 "immediate_operand" "s")
(pc)] UNSPEC_RELD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic"
{
@ -337,29 +321,6 @@ You should have received a copy of the GNU General Public License
[(set_attr "type" "branch")
(set_attr "cannot_copy" "yes")])
(define_insn "reload_macho_picbase_di"
[(set (reg:DI LR_REGNO)
(unspec:DI [(match_operand:DI 0 "immediate_operand" "s")
(pc)] UNSPEC_RELD_MPIC))]
"(DEFAULT_ABI == ABI_DARWIN) && flag_pic && TARGET_64BIT"
{
#if TARGET_MACHO
if (machopic_should_output_picbase_label ())
{
static char tmp[64];
const char *cnam = machopic_get_function_picbase ();
snprintf (tmp, 64, "bcl 20,31,%s\n%s:\n%%0:", cnam, cnam);
return tmp;
}
else
#else
gcc_unreachable ();
#endif
return "bcl 20,31,%0\n%0:";
}
[(set_attr "type" "branch")
(set_attr "cannot_copy" "yes")])
;; We need to restore the PIC register, at the site of nonlocal label.
(define_insn_and_split "nonlocal_goto_receiver"