[llvm-dev] Dataflow analysis regression in 3.7
Davide Italiano via llvm-dev
llvm-dev at lists.llvm.org
Wed Jul 5 22:00:35 PDT 2017
On Wed, Jul 5, 2017 at 3:59 PM, Johan Engelen via llvm-dev
<llvm-dev at lists.llvm.org> wrote:
> Hi all,
> I just found an optimization regression regarding simple
> dataflow/constprop analysis:
> https://godbolt.org/g/Uz8P7t
>
> This code
> ```
> int dataflow(int b) {
> int a;
>
> if (b==4)
> a = 3*b; // fully optimized when changed to a = 3;
> else
> a = 5;
>
> if (a == 4)
> return 0;
> else
> return 1;
> }
> ```
> is no longer optimized to just a "return 1". The regression happened in LLVM
> 3.6 --> 3.7.
>
> Is this a known regression? I couldn't find it in the bug tracker (but don't
> really know which keywords to look for...)
>
> Kind regards,
> Johan
>
This regressed when SimplifyCFG changed the threshold for PHI nodes
folding from 1 to 2.
(see lib/Transforms/Utils/SimplifyCFG.cpp)
+PHINodeFoldingThreshold("phi-node-folding-threshold", cl::Hidden, cl::init(2),
+ cl::desc("Control the amount of phi node folding to perform
(default = 2)"));
This could be re-evaluated, maybe, or some other transformation could
catch this case.
(e.g. a more powerful range solver could realize that a is always in
the range [5;12]).
FWIW, GCC does this.
I don't think this very case has been reported, so feel free to do it.
--
Davide
More information about the llvm-dev
mailing list