Hi Segher,
on 2022/3/27 11:02 PM, Segher Boessenkool wrote:
> Hi!
>
> On Thu, Mar 24, 2022 at 10:00:43AM +0800, Kewen.Lin wrote:
>> Commit r12-7687 exposed one miss optimization chance in function
>> rs6000_maybe_emit_maxc_minc, for now it only considers comparison
>> codes GE/GT/LE/LT, but it can support more variants with codes
>> UNLT/UNLE/UNGT/UNGE by reversing them into the equivalent ones
>> with GE/GT/LE/LT.
>
>> + /* Canonicalize UN[GL][ET] to [LG][TE]. */
>> + if (code == UNGE || code == UNGT || code == UNLE || code == UNLT)
>> + {
>> + code = reverse_condition_maybe_unordered (code);
>> + std::swap (true_cond, false_cond);
>> + }
>
> Typically you would have to generate code to compensate for the reversed
> comparison. It works out fine here, but could you please restructure
> the code to make that less tricky / more obvious? Or at least add a
> comment?
>
> I wouldn't call it "canonicalisation" btw, LT is by no means more
> standard than UNGE is. You can say you are folding things so you later
> have to support fewer cases, or similar?
>
Thanks for the review! Sorry for the late reply (I'm just back from
vacation). I just posted v2 by adding more comments to describe the
reversions and changing the bad "canonicalisation" word, hope it looks
better to you. :)
v2: https://gcc.gnu.org/pipermail/gcc-patches/2022-April/592624.html
BR,
Kewen