===================================================================
@@ -5874,15 +5874,14 @@ rws_access_regno (int regno, struct reg_
break;
case 1:
- /* The register has been written via a predicate. If this is
- not a complementary predicate, then we need a barrier. */
- /* ??? This assumes that P and P+1 are always complementary
- predicates for P even. */
+ /* The register has been written via a predicate. Treat
+ it like a unconditional write and do not try to check
+ for complementary pred reg in earlier write. */
if (flags.is_and && rws_sum[regno].written_by_and)
;
else if (flags.is_or && rws_sum[regno].written_by_or)
;
- else if ((rws_sum[regno].first_pred ^ 1) != pred)
+ else
need_barrier = 1;
if (!in_safe_group_barrier)
rws_update (regno, flags, pred);
@@ -5943,12 +5942,9 @@ rws_access_regno (int regno, struct reg_
break;
case 1:
- /* The register has been written via a predicate. If this is
- not a complementary predicate, then we need a barrier. */
- /* ??? This assumes that P and P+1 are always complementary
- predicates for P even. */
- if ((rws_sum[regno].first_pred ^ 1) != pred)
- need_barrier = 1;
+ /* The register has been written via a predicate, assume we
+ need a barrier (don't check for complementary regs). */
+ need_barrier = 1;
break;
case 2:
========= Test case change:
2010-10-04 Steve Ellcey <sje@cup.hp.com>
* gcc.c-torture/compile/920625-1.c: Remove dg-prune-output lines.
===================================================================
@@ -1,22 +1,3 @@
-/* The problem on IA-64 is that if-conversion creates a sequence
-
- (p17) cmp.geu p6, p7 = r48, r15
- (p16) cmp.gtu p6, p7 = r48, r15
-
- where p16 and p17 are complemenary, but the assembler DV validation
- code doesn't recognize that p6 and p7 are complimentary, and so
- we end up warning for a later use
-
- (p6) addl r14 = 1, r0
- (p7) mov r14 = r0
-
- that appears to be a WAW violation. */
-
-/* { dg-prune-output "Assembler messages" } */
-/* { dg-prune-output "violate\[^\n\]*dependency" } */
-/* { dg-prune-output "first path encountering" } */
-/* { dg-prune-output "location of the conflicting" } */
-
typedef unsigned long int unsigned_word;
typedef signed long int signed_word;
typedef unsigned_word word;