[PATCH] Disable passes on optnone functions
Robinson, Paul
Paul_Robinson at playstation.sony.com
Thu Jan 30 14:30:07 PST 2014
> -----Original Message-----
> From: Nick Lewycky [mailto:nlewycky at google.com]
> Sent: Wednesday, January 29, 2014 4:02 PM
> To: chandlerc at gmail.com; Robinson, Paul
> Cc: llvm-commits at cs.uiuc.edu; silvas at purdue.edu; nlewycky at google.com
> Subject: Re: [PATCH] Disable passes on optnone functions
>
>
> Please split the patch in two, one for changes to IR-level passes and
> pass manager (which should land first -- that should help disambiguate
> when there are pieces that both depend on), one for the codegen changes.
Okay. New patches coming, although it may take a little while, see
the comments below re. loop and basic-block testing.
>
> I'm unsure about the codegen changes here. You're adding a test at the
> beginning of "runOnMachineFunction" to each machine-level pass. The
> machine level requires a fixed set of passes to work in a certain way,
> you can't just disable some passes and expect it to work, the way you
> can with the IR-level passes.
Let me get the revised IR-level patch done, then we can get back to the
machine-level part.
>
> The rationale for making the passes individually disable themselves on
> optnone is because some passes need to ignore optnone -- the always-
> inliner for example.
>
> The test probably ought to go into test/Feature/optnone.ll ? Running -
> O1 and -O2, and opt and llc, it's not really testing the functionattrs
> pass.
Okay, I misunderstood the intent of test/Transforms/FunctionAttrs.
>
> I've reviewed everything except for lib/CodeGen/* and consider it good
> to commit. Sorry for the delays in review!
Thanks for doing it! Now my plans for the next social can change
from "bring a laptop and two goons to make somebody review this" to
"lemme buy you a drink." :-)
>
>
> ================
> Comment at: lib/IR/LegacyPassManager.cpp:1292
> @@ -1291,1 +1291,3 @@
> return false;
> + if (F.hasFnAttribute(Attribute::OptimizeNone)) {
> + DEBUG(dbgs() << "Skipping pass '" << getPassName()
> ----------------
> I thought you weren't going to add it to pass managers but to individual
> passes? This is a pass manager.
>
> ================
> Comment at: lib/Analysis/LoopPass.cpp:180
> @@ -179,1 +179,3 @@
> bool LPPassManager::runOnFunction(Function &F) {
> + if (F.hasFnAttribute(Attribute::OptimizeNone)) {
> + DEBUG(dbgs() << "Skipping pass '" << getPassName()
> ----------------
> This is a pass manager?
BBPassManager and LPPassManager are themselves function passes.
I disabled the function passes that are the collection of basic-block
passes and the collection of loop passes, respectively, on the theory
that optnone is a function-level attribute. However, I can see given
events such as Chandler's recent conversion of a loop pass to a
function pass that disabling the passes individually could be safer.
I've worked out how to find the function attributes from a basic
block or loop. However it's really not feasible (AFAICT) to print out
a "skipping" diagnostic once per function, if the passes are disabled
at the loop or basic block level. That will make testing these things
distinctly more tedious; basically I'll have to take a functional test
for each optimization, slap 'optnone' on it, and verify that the
optimization did NOT happen. So it may take a little while before I
can turn in revised patches.
>
>
> http://llvm-reviews.chandlerc.com/D2369
Thanks,
--paulr
More information about the llvm-commits
mailing list