[llvm-dev] Possible missing x86 JCC rules in the backend

Matteo Favaro via llvm-dev
2020-08-03T07:05:37Z

Answering my own question, just for future reference: the ideal solution
seems to be adding a custom FunctionPass based on the PatternMatch API to
match and convert the patterns to the proper ICmpInst instructions,
enabling the backend to generate the correct conditional jumps. Hence, this
could be something to be integrated into InstCombine, unless there's a more
specific pass to match and normalise the conditional jumps at the LLVM-IR
level.

Il giorno mer 29 lug 2020 alle ore 18:05 Matteo Favaro <fvrmatteo at
gmail.com>
ha scritto:

> Hi,
>
> I was trying to verify if it's possible to generate all the possible
x86
> conditional jumps from Clang, but I didn't manage to obtain 3 jumps:
> JA/JNA, JL/JGE, JG/JLE
>
> This is an example illustrating the flags calculation (hopefully correct)
> and the conditional jump generation: https://godbolt.org/z/a13qPa. I know
> these jumps are not common and that the example is weird, but I still think
> they should be foldable.
>
> My assumption is that there are no backend rules to fold the generated
> patterns (including Jcc and SETcc instruction) into a single conditional
> jump instruction, but maybe I'm just missing a command line argument.
>
> Am I missing something? If the rules are missing, what would it be the
> best place to implement them?
>
> Thanks, Matteo
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20200803/80223570/attachment.html>