[X86CmovConversion] Make heuristic for optimized cmov depth more conservative (PR44539)
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 6 Feb 2020 20:16:10 +0000 (21:16 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 11 Feb 2020 16:33:11 +0000 (17:33 +0100)
commit5eb19bf4a2b0c29a8d4d48dfb0276f096eff9bec
treeb66ea327303d32e36b7827779ab487f3da5ccac4
parent37f46650c3866c06c6108740fd15a34ebcb6a404
[X86CmovConversion] Make heuristic for optimized cmov depth more conservative (PR44539)

Fix/workaround for https://bugs.llvm.org/show_bug.cgi?id=44539.
As discussed there, this pass makes some overly optimistic
assumptions, as it does not have access to actual branch weights.

This patch makes the computation of the depth of the optimized cmov
more conservative, by assuming a distribution of 75/25 rather than
50/50 and placing the weights to get the more conservative result
(larger depth). The fully conservative choice would be
std::max(TrueOpDepth, FalseOpDepth), but that would break at least
one existing test (which may or may not be an issue in practice).

Differential Revision: https://reviews.llvm.org/D74155
llvm/lib/Target/X86/X86CmovConversion.cpp