* patch to fix PR81572
@ 2018-02-22 21:19 Vladimir Makarov
2018-03-06 15:57 ` Peter Bergner
0 siblings, 1 reply; 2+ messages in thread
From: Vladimir Makarov @ 2018-02-22 21:19 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 177 bytes --]
The following patch fixes
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81572
The patch was successfully bootstrapped and tested on ppc64.
Committed as rev. 257915.
[-- Attachment #2: pr81572.patch --]
[-- Type: text/x-patch, Size: 7713 bytes --]
Index: ChangeLog
===================================================================
--- ChangeLog (revision 257901)
+++ ChangeLog (working copy)
@@ -1,3 +1,19 @@
+2018-02-22 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/81572
+ * lra-int.h (LRA_UNKNOWN_ALT, LRA_NON_CLOBBERED_ALT): New macros.
+ * lra.c (lra_set_insn_recog_data, lra_update_insn_recog_data): Use
+ LRA_UNKNOWN_ALT.
+ * lra-constraints.c (curr_insn_transform): Set up
+ LRA_NON_CLOBBERED_ALT for moves processed on the fast path. Use
+ LRA_UNKNOWN_ALT.
+ (remove_inheritance_pseudos): Use LRA_UNKNOWN_ALT.
+ * lra-eliminations.c (spill_pseudos): Ditto.
+ (process_insn_for_elimination): Ditto.
+ * lra-lives.c (reg_early_clobber_p): Use the new macros.
+ * lra-spills.c (spill_pseudos): Use LRA_UNKNOWN_ALT and
+ LRA_NON_CLOBBERED_ALT.
+
2018-02-22 Martin Liska <mliska@suse.cz>
PR driver/83193
Index: lra-constraints.c
===================================================================
--- lra-constraints.c (revision 257901)
+++ lra-constraints.c (working copy)
@@ -3730,7 +3730,13 @@ curr_insn_transform (bool check_only_p)
curr_insn_set = single_set (curr_insn);
if (curr_insn_set != NULL_RTX && simple_move_p ())
- return false;
+ {
+ /* We assume that the corresponding insn alternative has no
+ earlier clobbers. If it is not the case, don't define move
+ cost equal to 2 for the corresponding register classes. */
+ lra_set_used_insn_alternative (curr_insn, LRA_NON_CLOBBERED_ALT);
+ return false;
+ }
no_input_reloads_p = no_output_reloads_p = false;
goal_alt_number = -1;
@@ -3838,7 +3844,7 @@ curr_insn_transform (bool check_only_p)
if (change_p)
/* If we've changed the instruction then any alternative that
we chose previously may no longer be valid. */
- lra_set_used_insn_alternative (curr_insn, -1);
+ lra_set_used_insn_alternative (curr_insn, LRA_UNKNOWN_ALT);
if (! check_only_p && curr_insn_set != NULL_RTX
&& check_and_process_move (&change_p, &sec_mem_p))
@@ -3846,7 +3852,7 @@ curr_insn_transform (bool check_only_p)
try_swapped:
- reused_alternative_num = check_only_p ? -1 : curr_id->used_insn_alternative;
+ reused_alternative_num = check_only_p ? LRA_UNKNOWN_ALT : curr_id->used_insn_alternative;
if (lra_dump_file != NULL && reused_alternative_num >= 0)
fprintf (lra_dump_file, "Reusing alternative %d for insn #%u\n",
reused_alternative_num, INSN_UID (curr_insn));
@@ -6752,7 +6758,7 @@ remove_inheritance_pseudos (bitmap remov
}
lra_push_insn_and_update_insn_regno_info (curr_insn);
lra_set_used_insn_alternative_by_uid
- (INSN_UID (curr_insn), -1);
+ (INSN_UID (curr_insn), LRA_UNKNOWN_ALT);
done_p = true;
if (lra_dump_file != NULL)
{
@@ -6791,7 +6797,7 @@ remove_inheritance_pseudos (bitmap remov
constraints pass. */
lra_push_insn_and_update_insn_regno_info (curr_insn);
lra_set_used_insn_alternative_by_uid
- (INSN_UID (curr_insn), -1);
+ (INSN_UID (curr_insn), LRA_UNKNOWN_ALT);
}
else if (restored_regs_p)
/* The instruction has been restored to the form that
Index: lra-eliminations.c
===================================================================
--- lra-eliminations.c (revision 257901)
+++ lra-eliminations.c (working copy)
@@ -1175,7 +1175,7 @@ spill_pseudos (HARD_REG_SET set)
if (bitmap_bit_p (&to_process, INSN_UID (insn)))
{
lra_push_insn (insn);
- lra_set_used_insn_alternative (insn, -1);
+ lra_set_used_insn_alternative (insn, LRA_UNKNOWN_ALT);
}
bitmap_clear (&to_process);
}
@@ -1408,7 +1408,7 @@ process_insn_for_elimination (rtx_insn *
}
lra_update_insn_regno_info (insn);
lra_push_insn (insn);
- lra_set_used_insn_alternative (insn, -1);
+ lra_set_used_insn_alternative (insn, LRA_UNKNOWN_ALT);
}
}
Index: lra-int.h
===================================================================
--- lra-int.h (revision 257901)
+++ lra-int.h (working copy)
@@ -202,15 +202,20 @@ struct lra_static_insn_data
const struct operand_alternative *operand_alternative;
};
+/* Negative insn alternative numbers used for special cases. */
+#define LRA_UNKNOWN_ALT -1
+#define LRA_NON_CLOBBERED_ALT -2
+
/* LRA internal info about an insn (LRA internal insn
representation). */
struct lra_insn_recog_data
{
/* The insn code. */
int icode;
- /* The alternative should be used for the insn, -1 if invalid, or we
- should try to use any alternative, or the insn is a debug
- insn. */
+ /* The alternative should be used for the insn, LRA_UNKNOWN_ALT if
+ unknown, or we should assume any alternative, or the insn is a
+ debug insn. LRA_NON_CLOBBERED_ALT means ignoring any earlier
+ clobbers for the insn. */
int used_insn_alternative;
/* SP offset before the insn relative to one at the func start. */
poly_int64 sp_offset;
Index: lra-lives.c
===================================================================
--- lra-lives.c (revision 257901)
+++ lra-lives.c (working copy)
@@ -598,7 +598,9 @@ static inline bool
reg_early_clobber_p (const struct lra_insn_reg *reg, int n_alt)
{
return (reg->early_clobber
- && (n_alt < 0 || TEST_BIT (reg->early_clobber_alts, n_alt)));
+ && (n_alt == LRA_UNKNOWN_ALT
+ || (n_alt != LRA_NON_CLOBBERED_ALT
+ && TEST_BIT (reg->early_clobber_alts, n_alt))));
}
/* Process insns of the basic block BB to update pseudo live ranges,
Index: lra-spills.c
===================================================================
--- lra-spills.c (revision 257901)
+++ lra-spills.c (working copy)
@@ -517,7 +517,7 @@ spill_pseudos (void)
INSN_UID (insn));
lra_push_insn (insn);
if (lra_reg_spill_p || targetm.different_addr_displacement_p ())
- lra_set_used_insn_alternative (insn, -1);
+ lra_set_used_insn_alternative (insn, LRA_UNKNOWN_ALT);
}
else if (CALL_P (insn)
/* Presence of any pseudo in CALL_INSN_FUNCTION_USAGE
Index: lra.c
===================================================================
--- lra.c (revision 257901)
+++ lra.c (working copy)
@@ -958,7 +958,7 @@ lra_set_insn_recog_data (rtx_insn *insn)
data = XNEW (struct lra_insn_recog_data);
lra_insn_recog_data[uid] = data;
data->insn = insn;
- data->used_insn_alternative = -1;
+ data->used_insn_alternative = LRA_UNKNOWN_ALT;
data->icode = icode;
data->regs = NULL;
if (DEBUG_INSN_P (insn))
@@ -1207,7 +1207,7 @@ lra_update_insn_recog_data (rtx_insn *in
return data;
}
insn_static_data = data->insn_static_data;
- data->used_insn_alternative = -1;
+ data->used_insn_alternative = LRA_UNKNOWN_ALT;
if (DEBUG_INSN_P (insn))
return data;
if (data->icode < 0)
Index: testsuite/ChangeLog
===================================================================
--- testsuite/ChangeLog (revision 257901)
+++ testsuite/ChangeLog (working copy)
@@ -1,3 +1,8 @@
+2018-02-22 Vladimir Makarov <vmakarov@redhat.com>
+
+ PR target/81572
+ * gcc.target/powerpc/pr81572.c: New.
+
2018-02-22 Marek Polacek <polacek@redhat.com>
PR c++/84493
Index: testsuite/gcc.target/powerpc/pr81572.c
===================================================================
--- testsuite/gcc.target/powerpc/pr81572.c (revision 0)
+++ testsuite/gcc.target/powerpc/pr81572.c (working copy)
@@ -0,0 +1,13 @@
+/* { dg-do compile { target powerpc64*-*-* } } */
+/* { dg-options "-O2 -mcpu=power7" } */
+/* { dg-final { scan-assembler-not "xxlor" } } */
+
+#include <altivec.h>
+
+typedef __vector unsigned char nvec_t;
+
+long testz_and(nvec_t a, nvec_t b)
+{
+ nvec_t c = vec_andc(a, b);
+ return vec_all_eq(a, c);
+}
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: patch to fix PR81572
2018-02-22 21:19 patch to fix PR81572 Vladimir Makarov
@ 2018-03-06 15:57 ` Peter Bergner
0 siblings, 0 replies; 2+ messages in thread
From: Peter Bergner @ 2018-03-06 15:57 UTC (permalink / raw)
To: Vladimir Makarov, gcc-patches
On 2/22/18 3:19 PM, Vladimir Makarov wrote:
> Â The following patch fixes
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81572
>
> Â The patch was successfully bootstrapped and tested on ppc64.
Vlad approved the backporting of this patch to GCC 7.
I backported his patch and bootstrap & regtesting showed no
regressions. Committed to the GCC 7 branch.
Peter
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-03-06 15:57 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-22 21:19 patch to fix PR81572 Vladimir Makarov
2018-03-06 15:57 ` Peter Bergner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).