[llvm-bugs] [Bug 33336] New: Regression with builtin_expect over multiple predicates
via llvm-bugs
llvm-bugs at lists.llvm.org
Tue Jun 6 17:52:07 PDT 2017
https://bugs.llvm.org/show_bug.cgi?id=33336
Bug ID: 33336
Summary: Regression with builtin_expect over multiple
predicates
Product: libraries
Version: trunk
Hardware: PC
OS: Linux
Status: NEW
Severity: normal
Priority: P
Component: Common Code Generator Code
Assignee: unassignedbugs at nondot.org
Reporter: zamsden at cloudera.com
CC: llvm-bugs at lists.llvm.org
Created attachment 18584
--> https://bugs.llvm.org/attachment.cgi?id=18584&action=edit
Reproducing case
Testing using an UNLIKELY macro built around builtin_expect found a regression
from 3.7 -> 3.8 that is still present in the 4.0 and likely trunk (untested)
branches of llvm. The unlikely condition is not propagated to both
sub-expressions when combined with an OR clause. Using multiple invocations of
such a macro gives the expected result.
Apparently the branch probabilities are no longer being propagated correctly to
child expressions.
I bisected llvm and clang in parallel on release_37 and release_38 branches to
find the responsible change and found this change to be responsible. Seems
entirely plausible as it introduces a new branch:
[JumpThreading] Split select that has constant conditions coming from the
PHI node
Look for PHI/Select in the same BB of the form
bb:
%p = phi [false, %bb1], [true, %bb2], [false, %bb3], [true, %bb4], ...
%s = select p, trueval, falseval
And expand the select into a branch structure. This later enables
jump-threading over bb in this pass.
Using the similar approach of SimplifyCFG::FoldCondBranchOnPHI(), unfold
select if the associated PHI has at least one constant. If the unfolded
select is not jump-threaded, it will be folded again in the later
optimizations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257198
91177308-0d34-0410-b5e6-96231b3b80d
Attached code which generates a reproduction - you can see the sub-optimal
branch generated in the asm output. Let me know if you want IR output as well,
but this reproduces quite easily. I copied my reproducing case verbatim, there
is almost certainly a more minimal case that doesn't involve floating point,
but this works reliably - Godbolt link: https://godbolt.org/g/vBwwQU
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20170607/254533e2/attachment.html>
More information about the llvm-bugs
mailing list