aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@embecosm.com>2021-11-15 03:14:31 +0000
committerMaciej W. Rozycki <macro@embecosm.com>2021-11-15 03:14:31 +0000
commit3e09331f6aeaf5955e3deab986597d5b40c20845 (patch)
tree54234469f6a033b8d4dd1390e699558c26c6fc3e
parentb85a03ae11b157d60ddf93b71632efe0bde3bafd (diff)
downloadgcc-3e09331f6aeaf5955e3deab986597d5b40c20845.zip
gcc-3e09331f6aeaf5955e3deab986597d5b40c20845.tar.gz
gcc-3e09331f6aeaf5955e3deab986597d5b40c20845.tar.bz2
VAX: Implement the `-mlra' command-line option
Add the the `-mlra' command-line option for the VAX target, with the usual semantics of enabling Local Register Allocation, off by default. LRA remains unstable with the VAX target, with numerous ICEs throughout the testsuite and worse code produced overall where successful, however the presence of a command line option to enable it makes it easier to experiment with it as the compiler does not have to be rebuilt to flip between the old reload and LRA. gcc/ * config/vax/vax.c (vax_lra_p): New prototype and function. (TARGET_LRA_P): Wire it. * config/vax/vax.opt (mlra): New option. * doc/invoke.texi (Option Summary, VAX Options): Document the new option.
-rw-r--r--gcc/config/vax/vax.c11
-rw-r--r--gcc/config/vax/vax.opt4
-rw-r--r--gcc/doc/invoke.texi9
3 files changed, 22 insertions, 2 deletions
diff --git a/gcc/config/vax/vax.c b/gcc/config/vax/vax.c
index e26ab3b..cf77db3 100644
--- a/gcc/config/vax/vax.c
+++ b/gcc/config/vax/vax.c
@@ -62,6 +62,7 @@ static rtx vax_function_arg (cumulative_args_t, const function_arg_info &);
static void vax_function_arg_advance (cumulative_args_t,
const function_arg_info &);
static rtx vax_struct_value_rtx (tree, int);
+static bool vax_lra_p (void);
static void vax_asm_trampoline_template (FILE *);
static void vax_trampoline_init (rtx, tree, rtx);
static poly_int64 vax_return_pops_args (tree, tree, poly_int64);
@@ -114,7 +115,7 @@ static HOST_WIDE_INT vax_starting_frame_offset (void);
#define TARGET_STRUCT_VALUE_RTX vax_struct_value_rtx
#undef TARGET_LRA_P
-#define TARGET_LRA_P hook_bool_void_false
+#define TARGET_LRA_P vax_lra_p
#undef TARGET_LEGITIMATE_ADDRESS_P
#define TARGET_LEGITIMATE_ADDRESS_P vax_legitimate_address_p
@@ -1221,6 +1222,14 @@ vax_struct_value_rtx (tree fntype ATTRIBUTE_UNUSED,
return gen_rtx_REG (Pmode, VAX_STRUCT_VALUE_REGNUM);
}
+/* Return true if we use LRA instead of reload pass. */
+
+static bool
+vax_lra_p (void)
+{
+ return TARGET_LRA;
+}
+
/* Output integer move instructions. */
bool
diff --git a/gcc/config/vax/vax.opt b/gcc/config/vax/vax.opt
index 470e8b1..712ba3a 100644
--- a/gcc/config/vax/vax.opt
+++ b/gcc/config/vax/vax.opt
@@ -42,6 +42,10 @@ munix
Target RejectNegative Mask(UNIX_ASM)
Generate code for UNIX assembler.
+mlra
+Target Mask(LRA)
+Enable Local Register Allocation.
+
mvaxc-alignment
Target RejectNegative Mask(VAXC_ALIGNMENT)
Use VAXC structure conventions.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index 99cdeb9..2d9c178 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -1364,7 +1364,7 @@ See RS/6000 and PowerPC Options.
-mbig-switch}
@emph{VAX Options}
-@gccoptlist{-mg -mgnu -munix}
+@gccoptlist{-mg -mgnu -munix -mlra}
@emph{Visium Options}
@gccoptlist{-mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float @gol
@@ -30523,6 +30523,13 @@ GNU assembler is being used.
@item -mg
@opindex mg
Output code for G-format floating-point numbers instead of D-format.
+
+@item -mlra
+@itemx -mno-lra
+@opindex mlra
+@opindex mno-lra
+Enable Local Register Allocation. This is still experimental for the VAX,
+so by default the compiler uses standard reload.
@end table
@node Visium Options