]> git.ipfire.org Git - thirdparty/gcc.git/commit
ifcvt: Clarify if_info.original_cost.
authorRobin Dapp <rdapp@ventanamicro.com>
Tue, 9 Sep 2025 14:15:48 +0000 (16:15 +0200)
committerRobin Dapp <rdapp@ventanamicro.com>
Thu, 11 Sep 2025 08:20:14 +0000 (10:20 +0200)
commit9ff5cadac4579fe714dc8de3a39eaef8534c64f7
tree6d262d955c278077da5d9f1e6a2060fed51726f1
parente63d9f9de87e2fc8e17a095349a4b87df1c2f0a0
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.
16 files changed:
gcc/ifcvt.cc
gcc/testsuite/gcc.target/riscv/addsieq.c
gcc/testsuite/gcc.target/riscv/addsifeq.c
gcc/testsuite/gcc.target/riscv/addsifge.c
gcc/testsuite/gcc.target/riscv/addsifgt.c
gcc/testsuite/gcc.target/riscv/addsifle.c
gcc/testsuite/gcc.target/riscv/addsiflt.c
gcc/testsuite/gcc.target/riscv/addsifne.c
gcc/testsuite/gcc.target/riscv/addsige.c
gcc/testsuite/gcc.target/riscv/addsigeu.c
gcc/testsuite/gcc.target/riscv/addsigt.c
gcc/testsuite/gcc.target/riscv/addsigtu.c
gcc/testsuite/gcc.target/riscv/addsile.c
gcc/testsuite/gcc.target/riscv/addsileu.c
gcc/testsuite/gcc.target/riscv/addsilt.c
gcc/testsuite/gcc.target/riscv/addsiltu.c