Segher Boessenkool <seg...@kernel.crashing.org> writes: > On Wed, Feb 23, 2022 at 02:02:59PM +0100, Richard Biener wrote: >> I'm assuming we're always dealing with >> >> (set (reg:MODE ..) <src_folded>) >> >> here and CSE is not substituting into random places of an >> instruction(?). I don't know what 'rtx_cost' should evaluate >> to for a constant, if it should implicitely evaluate the cost >> of putting the result into a register for example. > > rtx_cost is no good here (and in most places). rtx_cost should be 0 > for anything that is used as input in a machine instruction -- but you > need much more context to determine that. insn_cost is much simpler and > much easier to use. > >> Using RTX_COST with SET and 1 at least looks no worse than using >> your proposed new target hook and comparing it with the original >> unfolded src (again with SET and 1). > > It is required to generate valid instructions no matter what, before > the pass has finished that is. On all more modern architectures it is > futile to think you can usefully consider the cost of an RTL expression > and derive a real-world cost of the generated code from that.
Thanks Segher for pointing out these! Here is another reason that I did not use rtx_cost: in a few passes, there are codes to check the constants and store them in constant pool. I'm thinking to integerate those codes in a consistent way. BR, Jiufu > > But there is so much more wrong with cse.c :-( > > > Segher