[gcc(refs/vendors/riscv/heads/gcc-15-with-riscv-opts)] ifcvt: Clarify if_info.original_cost.
Jeff Law
law@gcc.gnu.org
Sat Sep 13 16:32:49 GMT 2025
https://gcc.gnu.org/g:18ef46150abb34cfb6ee6c3f2ffc0a747ccdd2b1
commit 18ef46150abb34cfb6ee6c3f2ffc0a747ccdd2b1
Author: Robin Dapp <rdapp@ventanamicro.com>
Date: Tue Sep 9 16:15:48 2025 +0200
ifcvt: Clarify if_info.original_cost.
Before noce_find_if_block processes a block it sets up an if_info
structure that holds the original costs. At that point the costs of
the then/else blocks have not been added so we only care about the
"if" cost.
The code originally used BRANCH_COST for that but was then changed
to COST_N_INSNS (2) - a compare and a jump.
This patch computes the jump costs via
insn_cost (if_info.jump, ...)
under the assumption that the target takes BRANCH_COST into account
when costing a jump instruction.
In noce_convert_multiple_sets we keep track of the need for the initial
CC comparison. If needed for the generated sequence we add its
cost in default_noce_conversion_profitable_p.
gcc/ChangeLog:
* ifcvt.cc (noce_convert_multiple_sets_1): Add use_cond_earliest
param.
(noce_convert_multiple_sets): Set use_cond_earliest.
(noce_process_if_block): Just use original cost.
(noce_find_if_block): Use insn_cost (jump_insn).
gcc/testsuite/ChangeLog:
* gcc.target/riscv/addsieq.c: Remove xfail and expect conversion
through noce_convert_multiple_sets.
* gcc.target/riscv/addsifeq.c: Ditto.
* gcc.target/riscv/addsifge.c: Ditto.
* gcc.target/riscv/addsifgt.c: Ditto.
* gcc.target/riscv/addsifle.c: Ditto.
* gcc.target/riscv/addsiflt.c: Ditto.
* gcc.target/riscv/addsifne.c: Ditto.
* gcc.target/riscv/addsige.c: Ditto.
* gcc.target/riscv/addsigeu.c: Ditto.
* gcc.target/riscv/addsigt.c: Ditto.
* gcc.target/riscv/addsigtu.c: Ditto.
* gcc.target/riscv/addsile.c: Ditto.
* gcc.target/riscv/addsileu.c: Ditto.
* gcc.target/riscv/addsilt.c: Ditto.
* gcc.target/riscv/addsiltu.c: Ditto.
(cherry picked from commit 9ff5cadac4579fe714dc8de3a39eaef8534c64f7)
Diff:
---
gcc/ifcvt.cc | 76 +++++++++++++++++--------------
gcc/testsuite/gcc.target/riscv/addsieq.c | 11 +++--
gcc/testsuite/gcc.target/riscv/addsifeq.c | 7 +--
gcc/testsuite/gcc.target/riscv/addsifge.c | 7 +--
gcc/testsuite/gcc.target/riscv/addsifgt.c | 7 +--
gcc/testsuite/gcc.target/riscv/addsifle.c | 7 +--
gcc/testsuite/gcc.target/riscv/addsiflt.c | 7 +--
gcc/testsuite/gcc.target/riscv/addsifne.c | 7 +--
gcc/testsuite/gcc.target/riscv/addsige.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsigeu.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsigt.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsigtu.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsile.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsileu.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsilt.c | 9 ++--
gcc/testsuite/gcc.target/riscv/addsiltu.c | 9 ++--
16 files changed, 112 insertions(+), 89 deletions(-)
diff --git a/gcc/ifcvt.cc b/gcc/ifcvt.cc
index e691a56a89c4..2e145edc3acf 100644
--- a/gcc/ifcvt.cc
+++ b/gcc/ifcvt.cc
@@ -101,7 +101,7 @@ static rtx_insn *block_has_only_trap (basic_block);
static void init_noce_multiple_sets_info (basic_block,
auto_delete_vec<noce_multiple_sets_info> &);
static bool noce_convert_multiple_sets_1 (struct noce_if_info *,
- auto_delete_vec<noce_multiple_sets_info> &, int *);
+ auto_delete_vec<noce_multiple_sets_info> &, int *, bool *);
/* Count the number of non-jump active insns in BB. */
@@ -3700,28 +3700,27 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
int last_needs_comparison = -1;
+ bool use_cond_earliest = false;
+
bool ok = noce_convert_multiple_sets_1
- (if_info, insn_info, &last_needs_comparison);
+ (if_info, insn_info, &last_needs_comparison, &use_cond_earliest);
if (!ok)
return false;
- /* If there are insns that overwrite part of the initial
- comparison, we can still omit creating temporaries for
- the last of them.
- As the second try will always create a less expensive,
- valid sequence, we do not need to compare and can discard
- the first one. */
- if (last_needs_comparison != -1)
- {
- end_sequence ();
- start_sequence ();
- ok = noce_convert_multiple_sets_1
- (if_info, insn_info, &last_needs_comparison);
- /* Actually we should not fail anymore if we reached here,
- but better still check. */
- if (!ok)
- return false;
- }
+ /* Always perform a second attempt that uses information gathered in the
+ first. At least we can omit creating temporaries until we definitely
+ need them. The sequence created in the second attempt is never worse
+ than the first. */
+
+ end_sequence ();
+ start_sequence ();
+ ok = noce_convert_multiple_sets_1
+ (if_info, insn_info, &last_needs_comparison, &use_cond_earliest);
+
+ /* Actually we should not fail anymore if we reached here,
+ but better still check. */
+ if (!ok)
+ return false;
/* We must have seen some sort of insn to insert, otherwise we were
given an empty BB to convert, and we can't handle that. */
@@ -3749,12 +3748,22 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
/* Actually emit the sequence if it isn't too expensive. */
rtx_insn *seq = get_insns ();
+ /* If the created sequence does not use cond_earliest (but the jump
+ does) add its cost to the original_cost before comparing costs. */
+ unsigned int original_cost = if_info->original_cost;
+ if (if_info->jump != if_info->cond_earliest && !use_cond_earliest)
+ if_info->original_cost += insn_cost (if_info->cond_earliest,
+ if_info->speed_p);
+
if (!targetm.noce_conversion_profitable_p (seq, if_info))
{
end_sequence ();
return false;
}
+ /* Restore the original cost in case we do not succeed below. */
+ if_info->original_cost = original_cost;
+
for (insn = seq; insn; insn = NEXT_INSN (insn))
set_used_flags (insn);
@@ -3808,7 +3817,8 @@ noce_convert_multiple_sets (struct noce_if_info *if_info)
static bool
noce_convert_multiple_sets_1 (struct noce_if_info *if_info,
auto_delete_vec<noce_multiple_sets_info> &insn_info,
- int *last_needs_comparison)
+ int *last_needs_comparison,
+ bool *use_cond_earliest)
{
basic_block then_bb = if_info->then_bb;
rtx_insn *jump = if_info->jump;
@@ -3827,6 +3837,7 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info,
rtx_insn *insn;
int count = 0;
bool second_try = *last_needs_comparison != -1;
+ *use_cond_earliest = false;
FOR_BB_INSNS (then_bb, insn)
{
@@ -4003,6 +4014,7 @@ noce_convert_multiple_sets_1 (struct noce_if_info *if_info,
temp_dest = temp_dest2;
if (!second_try && read_comparison)
*last_needs_comparison = count;
+ *use_cond_earliest = true;
}
else
{
@@ -4232,16 +4244,13 @@ noce_process_if_block (struct noce_if_info *if_info)
to calculate a value for x.
??? For future expansion, further expand the "multiple X" rules. */
- /* First look for multiple SETS. The original costs already include
- a base cost of COSTS_N_INSNS (2): one instruction for the compare
- (which we will be needing either way) and one instruction for the
- branch. When comparing costs we want to use the branch instruction
- cost and the sets vs. the cmovs generated here. Therefore subtract
- the costs of the compare before checking.
- ??? Actually, instead of the branch instruction costs we might want
- to use COSTS_N_INSNS (BRANCH_COST ()) as in other places. */
+ /* First look for multiple SETS.
+ The original costs already include costs for the jump insn as well
+ as for a CC comparison if there is any.
+ If a target re-uses the existing CC comparison we keep track of that
+ and add the costs before default noce_conversion_profitable_p. */
- unsigned potential_cost = if_info->original_cost - COSTS_N_INSNS (1);
+ unsigned potential_cost = if_info->original_cost;
unsigned old_cost = if_info->original_cost;
if (!else_bb
&& HAVE_conditional_move
@@ -4923,11 +4932,10 @@ noce_find_if_block (basic_block test_bb, edge then_edge, edge else_edge,
= targetm.max_noce_ifcvt_seq_cost (then_edge);
/* We'll add in the cost of THEN_BB and ELSE_BB later, when we check
that they are valid to transform. We can't easily get back to the insn
- for COND (and it may not exist if we had to canonicalize to get COND),
- and jump_insns are always given a cost of 1 by seq_cost, so treat
- both instructions as having cost COSTS_N_INSNS (1). */
- if_info.original_cost = COSTS_N_INSNS (2);
-
+ for COND (and it may not exist if we had to canonicalize to get COND).
+ It is assumed that the costs of a jump insn are dependent on the
+ branch costs. */
+ if_info.original_cost += insn_cost (if_info.jump, if_info.speed_p);
/* Do the real work. */
diff --git a/gcc/testsuite/gcc.target/riscv/addsieq.c b/gcc/testsuite/gcc.target/riscv/addsieq.c
index bacd7a2b2555..5cfbf91ed9a2 100644
--- a/gcc/testsuite/gcc.target/riscv/addsieq.c
+++ b/gcc/testsuite/gcc.target/riscv/addsieq.c
@@ -20,8 +20,9 @@ addsieq (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sub|subw)\\s" 1 { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 { xfail rv64 } } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sub|subw)\\s" 1 } } */
+/* { dg-final { scan-assembler-times "\\s(?:seqz|snez)\\s" 1 } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsifeq.c b/gcc/testsuite/gcc.target/riscv/addsifeq.c
index d0d89ca014fc..70c1e62e167a 100644
--- a/gcc/testsuite/gcc.target/riscv/addsifeq.c
+++ b/gcc/testsuite/gcc.target/riscv/addsifeq.c
@@ -19,8 +19,9 @@ addsifeq (double w, double x, int_t y, int_t z)
add[w] a0,a5,a0
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "\\sfeq\\.d\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsifge.c b/gcc/testsuite/gcc.target/riscv/addsifge.c
index da13f39694fb..553c3d264198 100644
--- a/gcc/testsuite/gcc.target/riscv/addsifge.c
+++ b/gcc/testsuite/gcc.target/riscv/addsifge.c
@@ -19,8 +19,9 @@ addsifge (double w, double x, int_t y, int_t z)
add[w] a0,a5,a0
*/
-/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsifgt.c b/gcc/testsuite/gcc.target/riscv/addsifgt.c
index 355c5bfef79c..b166e6c7b7d9 100644
--- a/gcc/testsuite/gcc.target/riscv/addsifgt.c
+++ b/gcc/testsuite/gcc.target/riscv/addsifgt.c
@@ -19,8 +19,9 @@ addsifgt (double w, double x, int_t y, int_t z)
add[w] a0,a5,a0
*/
-/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsifle.c b/gcc/testsuite/gcc.target/riscv/addsifle.c
index 5d0c21ef2850..b2144904614c 100644
--- a/gcc/testsuite/gcc.target/riscv/addsifle.c
+++ b/gcc/testsuite/gcc.target/riscv/addsifle.c
@@ -19,8 +19,9 @@ addsifle (double w, double x, int_t y, int_t z)
add[w] a0,a5,a0
*/
-/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsiflt.c b/gcc/testsuite/gcc.target/riscv/addsiflt.c
index 4feeb5cdc618..97982090813f 100644
--- a/gcc/testsuite/gcc.target/riscv/addsiflt.c
+++ b/gcc/testsuite/gcc.target/riscv/addsiflt.c
@@ -19,8 +19,9 @@ addsiflt (double w, double x, int_t y, int_t z)
add[w] a0,a5,a0
*/
-/* { /* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "\\s(?:fge\\.d|fgt\\.d|fle\\.d|flt\\.d)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsifne.c b/gcc/testsuite/gcc.target/riscv/addsifne.c
index 24da3346e021..af6521cee706 100644
--- a/gcc/testsuite/gcc.target/riscv/addsifne.c
+++ b/gcc/testsuite/gcc.target/riscv/addsifne.c
@@ -19,8 +19,9 @@ addsifne (double w, double x, int_t y, int_t z)
add[w] a0,a5,a0
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "\\sfeq\\.d\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:beq|bne)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsige.c b/gcc/testsuite/gcc.target/riscv/addsige.c
index 9dad7c9067b0..1aaa06cb8bc4 100644
--- a/gcc/testsuite/gcc.target/riscv/addsige.c
+++ b/gcc/testsuite/gcc.target/riscv/addsige.c
@@ -19,8 +19,9 @@ addsige (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { DG-Final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsigeu.c b/gcc/testsuite/gcc.target/riscv/addsigeu.c
index 846241d49a17..e6f1e8c62eac 100644
--- a/gcc/testsuite/gcc.target/riscv/addsigeu.c
+++ b/gcc/testsuite/gcc.target/riscv/addsigeu.c
@@ -19,8 +19,9 @@ addsigeu (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsigt.c b/gcc/testsuite/gcc.target/riscv/addsigt.c
index 564b2b31fab1..69b5d15f6cfc 100644
--- a/gcc/testsuite/gcc.target/riscv/addsigt.c
+++ b/gcc/testsuite/gcc.target/riscv/addsigt.c
@@ -19,8 +19,9 @@ addsigt (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsigtu.c b/gcc/testsuite/gcc.target/riscv/addsigtu.c
index 568683006bfd..80d4451ff277 100644
--- a/gcc/testsuite/gcc.target/riscv/addsigtu.c
+++ b/gcc/testsuite/gcc.target/riscv/addsigtu.c
@@ -19,8 +19,9 @@ addsigtu (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsile.c b/gcc/testsuite/gcc.target/riscv/addsile.c
index 2e8398836bbb..7a7a0e0c9b40 100644
--- a/gcc/testsuite/gcc.target/riscv/addsile.c
+++ b/gcc/testsuite/gcc.target/riscv/addsile.c
@@ -19,8 +19,9 @@ addsile (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsileu.c b/gcc/testsuite/gcc.target/riscv/addsileu.c
index 1f0f99b5d16c..e059c586c37b 100644
--- a/gcc/testsuite/gcc.target/riscv/addsileu.c
+++ b/gcc/testsuite/gcc.target/riscv/addsileu.c
@@ -19,8 +19,9 @@ addsileu (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsilt.c b/gcc/testsuite/gcc.target/riscv/addsilt.c
index 99071328aa07..c18fd743fe53 100644
--- a/gcc/testsuite/gcc.target/riscv/addsilt.c
+++ b/gcc/testsuite/gcc.target/riscv/addsilt.c
@@ -19,8 +19,9 @@ addsilt (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgt|slt)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bge|bgt|ble|blt)\\s" } } */
diff --git a/gcc/testsuite/gcc.target/riscv/addsiltu.c b/gcc/testsuite/gcc.target/riscv/addsiltu.c
index 3f8f022ce8e8..f1948ce7c8a2 100644
--- a/gcc/testsuite/gcc.target/riscv/addsiltu.c
+++ b/gcc/testsuite/gcc.target/riscv/addsiltu.c
@@ -19,8 +19,9 @@ addsiltu (int_t w, int_t x, int_t y, int_t z)
add[w] a0,a1,a2
*/
-/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { xfail rv64 } } } */
-/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 { xfail rv64 } } } */
+/* { dg-final { scan-rtl-dump-times "Conversion succeeded on pass 1\\." 1 "ce1" } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_try_addcc" 1 "ce1" { target { rv32 } } } } */
+/* { dg-final { scan-rtl-dump-times "if-conversion succeeded through noce_convert_multiple_sets" 1 "ce1" { target { rv64 } } } } */
+/* { dg-final { scan-assembler-times "\\s(?:sgtu|sltu)\\s" 1 } } */
/* { dg-final { scan-assembler-not "\\s(?:seqz|snez)\\s" } } */
-/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" { xfail rv64 } } } */
+/* { dg-final { scan-assembler-not "\\s(?:bgeu|bgtu|bleu|bltu)\\s" } } */
More information about the Gcc-cvs
mailing list