https://gcc.gnu.org/g:9ff5cadac4579fe714dc8de3a39eaef8534c64f7
commit r16-3760-g9ff5cadac4579fe714dc8de3a39eaef8534c64f7 Author: Robin Dapp <rd...@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. 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 4579148750d4..3dcb1be48692 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. */ @@ -3697,28 +3697,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. */ @@ -3746,12 +3745,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); @@ -3805,7 +3814,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; @@ -3824,6 +3834,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) { @@ -4000,6 +4011,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 { @@ -4229,16 +4241,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 @@ -4920,11 +4929,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" } } */