[llvm-dev] Is there any real downside to constructing the new SimplifyQuery once

Daniel Berlin via llvm-dev llvm-dev at lists.llvm.org
Tue Apr 25 21:32:52 PDT 2017

For those not following along, startingin r301379, Simplify* in
InstructionSimplify now can just take a query struct  instead of 8000
optional arguments.  Nothing is really new since it used the same thing
under the covers.

I'm slowly converting the old uses away (deletion of the old APIs is a
different question).
Staring at most of them, i could just directly convert them using braced
list initialization, and construct the objects again and again, but the
vast majority of uses actually:

A. don't change the relevant query arguments over the lifetime of the pass
B. actually have more information sitting around than they are passing

For example, instcombine has a DomTree and AssumptionCache that are
required, but it doesn't pass them to SimplifyBinOp in a bunch of cases.

JumpThreading has TLI but doesn't pass it to SimplifyCmpInst.

CVP at least admits it has a problem:
"CorrelatedValuePropagation.cpp:  // FIXME: Provide TLI, DT, AT to
CorrelatedValuePropagation.cpp:  if (Value *V = SimplifyInstruction(P, DL))
(This is because it uses LVI, which requires those things, but it doesn't
ask for them itself)

Assuming this is not deliberate, it would seem to me to just be easiest to
set up the query structure once in the pass and use it everywhere, which
would hopefully avoid these issues in the future, besides making most of
the call strings dramatically shorter :)

Is there any real downside (compile time performance, etc) to this vs what
we do now (which is basically constructing the query objects again and
again under the covers) that anyone can think of?

(again, assuming we are not deliberately avoiding passing info to Simplify*
in most of these cases)

I figured i'd ask before i went writing the scripts/etc to help convert a
bunch of this stuff :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170425/9e0d6e0e/attachment.html>

More information about the llvm-dev mailing list