Re: Giving targets a say in match.pd

Georg-Johann Lay via Gcc <[email protected]> Wed, 10 Jun 2026 12:02:44 +0200
Newsgroups gmane.comp.gcc.devel
Message-ID <[email protected]>
Am 08.06.26 um 11:17 schrieb Richard Biener:
> On Sat, Jun 6, 2026 at 5:02 PM Jeffrey Law via Gcc <[email protected]> wrote:
>> On 6/6/2026 6:32 AM, Georg-Johann Lay wrote:
>>> Am 06.06.26 um 00:17 schrieb Jeffrey Law:
>>>>
>>>> On 6/5/2026 3:25 AM, Georg-Johann Lay via Gcc wrote:
>>>>> In match.pd there are two kinds of patterns: Canonicalizations
>>>>> and optimizations.
>>>>>
>>>>> While canonicalizations simplify the compile task by reducing
>>>>> combinatorial complexity, optimization patterns try to improve
>>>>> code performance.
>>>>>
>>>>> The trouble with the optimization patterns is that they operate
>>>>> blindly,
>>>>> not considering costs or target capabilities in any way.
>>>> [ ... ]
>>>> This would go against guiding principles in the gimple phases.
>>>> Essentially we very much have avoided things like target costing in
>>>> gimple.  That's part of what makes gimple transformations predictable
>>>> and relatively easy to evaluate.
>>>
>>> At no point I proposed to introduce costing.
>>>
>>> All I said is that match.pd /is/ doing "optimizations" without using
>>> any metric, which is a correct statement as far as I know.
>>>
>>> And without a metric, you have no idea where you are heading.
>>> That works for trivial cases like x * 0 = 0, and when all the
>>> dozens of targets behave similar in this regard.
>>>
>>> There are cases though where different targets means different metrics.
>> You may not not explicitly mentioned costing, but the net effect is the
>> same -- the targets end up making arbitrary changes to the gimple IL and
>> that's what we've fundamentally wanted to avoid since the initial
>> development of the tree-ssa work.
> 
> The motivation for this is to be able to apply test coverage for target X also
> to target Y, at least for the GIMPLE side of things.

Okay, thanks for the context.  Though that's not working out very well
for avr. There are many failing tree-ssa test cases.  And it's not even
clear what the tests are expecting in the case of avr.

> For some of the problematic patterns it is probably worth considering that
> they are really RTL expansion helpers and thus inherently target specific.
> There's now fold_before_rtl_expansion_p () as a way to defer a folding
> as much as possible, it's uses might not match a classification as
> "for-RTL-expansion" though and we're not applying them at ISEL time
> (and there there's limited target control as well).
> 
> For AVR one issue it faces is there's only yes or no to providing
> named patterns for things like addsi3 and mulsi3 and both come
> with downsides.  Meaning the usual middle-end way of querying
> whether a target can do sth is unhelpful.
> 
> Richard.

Indeed.  Just the fact that some standard insn exists doesn't mean at
all that it's cheap.  It just means that the code generation is better
than without the insn -- which is useless for costing, so cost
estimators shouldn't make such assumptions.

Johann