Matteo Favaro via llvm-dev
2020-Jul-29 16:05 UTC
[llvm-dev] Possible missing x86 JCC rules in the backend
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/20200729/87bba743/attachment.html>
Matteo Favaro via llvm-dev
2020-Aug-03 07:05 UTC
[llvm-dev] Possible missing x86 JCC rules in the backend
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>