<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Hi,<div class=""><br class=""></div><div class="">Did you get Chandler approval before committing as it was requested during the review?</div><div class=""><br class=""></div><div class="">— </div><div class="">Mehdi</div><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Jan 13, 2017, at 3:20 AM, Serge Pavlov via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Hi Tobias,<div class=""><br class=""></div><div class="">Thank you for fixing it.</div><div class="">It looks like none of the region passes in main llvm repository is an analysis, otherwise the bug should have been caught during check-llvm.</div><div class="gmail_extra"><br clear="all" class=""><div class=""><div class="gmail_signature" data-smartmail="gmail_signature">Thanks,<br class="">--Serge<br class=""></div></div>
<br class=""><div class="gmail_quote">2017-01-13 16:13 GMT+07:00 Tobias Grosser <span dir="ltr" class=""><<a href="mailto:tobias.grosser@inf.ethz.ch" target="_blank" class="">tobias.grosser@inf.ethz.ch</a>></span>:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Serge,<br class="">
<br class="">
this change broke the RegionPasses used by Polly. I tried to fix the<br class="">
problem in<br class="">
r291887, but would appreciate if you could post-commit review the fix I<br class="">
committed.<br class="">
<br class="">
Best,<br class="">
Tobias<br class="">
<div class="HOEnZb"><div class="h5"><br class="">
On Fri, Jan 13, 2017, at 07:09 AM, Serge Pavlov via llvm-commits wrote:<br class="">
> Author: sepavloff<br class="">
> Date: Fri Jan 13 00:09:54 2017<br class="">
> New Revision: 291882<br class="">
><br class="">
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=291882&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project?rev=291882&view=rev</a><br class="">
> Log:<br class="">
> Track validity of pass results<br class="">
><br class="">
> Running tests with expensive checks enabled exhibits some problems with<br class="">
> verification of pass results.<br class="">
><br class="">
> First, the pass verification may require results of analysis that are not<br class="">
> available. For instance, verification of loop info requires results of<br class="">
> dominator<br class="">
> tree analysis. A pass may be marked as conserving loop info but does not<br class="">
> need to<br class="">
> be dependent on DominatorTreePass. When a pass manager tries to verify<br class="">
> that loop<br class="">
> info is valid, it needs dominator tree, but corresponding analysis may be<br class="">
> already destroyed as no user of it remained.<br class="">
><br class="">
> Another case is a pass that is skipped. For instance, entities with<br class="">
> linkage<br class="">
> available_externally do not need code generation and such passes are<br class="">
> skipped for<br class="">
> them. In this case result verification must also be skipped.<br class="">
><br class="">
> To solve these problems this change introduces a special flag to the Pass<br class="">
> structure to mark passes that have valid results. If this flag is reset,<br class="">
> verifications dependent on the pass result are skipped.<br class="">
><br class="">
> Differential Revision: <a href="https://reviews.llvm.org/D27190" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/<wbr class="">D27190</a><br class="">
><br class="">
> Modified:<br class="">
> llvm/trunk/include/llvm/Pass.h<br class="">
> llvm/trunk/include/llvm/<wbr class="">PassAnalysisSupport.h<br class="">
> llvm/trunk/lib/Analysis/<wbr class="">CallGraphSCCPass.cpp<br class="">
> llvm/trunk/lib/Analysis/<wbr class="">LoopInfo.cpp<br class="">
> llvm/trunk/lib/Analysis/<wbr class="">LoopPass.cpp<br class="">
> llvm/trunk/lib/CodeGen/<wbr class="">MachineDominators.cpp<br class="">
> llvm/trunk/lib/CodeGen/<wbr class="">MachineFunctionPass.cpp<br class="">
> llvm/trunk/lib/IR/<wbr class="">LegacyPassManager.cpp<br class="">
> llvm/trunk/lib/IR/Pass.cpp<br class="">
> llvm/trunk/test/CodeGen/<wbr class="">Generic/externally_available.<wbr class="">ll<br class="">
> llvm/trunk/test/CodeGen/Mips/<wbr class="">mul.ll<br class="">
><br class="">
> Modified: llvm/trunk/include/llvm/Pass.h<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Pass.h?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/include/<wbr class="">llvm/Pass.h?rev=291882&r1=<wbr class="">291881&r2=291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/include/llvm/Pass.h (original)<br class="">
> +++ llvm/trunk/include/llvm/Pass.h Fri Jan 13 00:09:54 2017<br class="">
> @@ -29,6 +29,7 @@<br class="">
> #ifndef LLVM_PASS_H<br class="">
> #define LLVM_PASS_H<br class="">
><br class="">
> +#include <assert.h><br class="">
> #include <string><br class="">
><br class="">
> namespace llvm {<br class="">
> @@ -82,17 +83,40 @@ class Pass {<br class="">
> AnalysisResolver *Resolver; // Used to resolve analysis<br class="">
> const void *PassID;<br class="">
> PassKind Kind;<br class="">
> + bool Executed;<br class="">
> +<br class="">
> void operator=(const Pass&) = delete;<br class="">
> Pass(const Pass &) = delete;<br class="">
><br class="">
> public:<br class="">
> explicit Pass(PassKind K, char &pid)<br class="">
> - : Resolver(nullptr), PassID(&pid), Kind(K) { }<br class="">
> + : Resolver(nullptr), PassID(&pid), Kind(K), Executed(false) { }<br class="">
> virtual ~Pass();<br class="">
><br class="">
> -<br class="">
> PassKind getPassKind() const { return Kind; }<br class="">
><br class="">
> + /// Returns true if the pass has already executed.<br class="">
> + ///<br class="">
> + /// For an analysis pass it means the result is available. If the<br class="">
> function<br class="">
> + /// returns false, the pass was not run, was skipped or freed.<br class="">
> + ///<br class="">
> + bool isExecuted() const { return Executed; }<br class="">
> +<br class="">
> + /// Marks the pass as executed or not.<br class="">
> + ///<br class="">
> + /// A pass should be marked as executed, if its 'runOn*' method<br class="">
> successfully<br class="">
> + /// finished. When the pass is not needed anymore, it is marked as<br class="">
> + /// 'non-executed', it takes place in \c freePass. It also occurs when<br class="">
> the<br class="">
> + /// pass is skipped for some reason.<br class="">
> + ///<br class="">
> + /// The flag should be set prior to call to 'runOn*' method. If it<br class="">
> decides<br class="">
> + /// that the pass should be skipped, it will reset the flag.<br class="">
> + ///<br class="">
> + void setExecuted(bool x) {<br class="">
> + assert(x || !getAsImmutablePass()); // Immutable pass cannot be<br class="">
> invalidated.<br class="">
> + Executed = x;<br class="">
> + }<br class="">
> +<br class="">
> /// getPassName - Return a nice clean name for a pass. This usually<br class="">
> /// implemented in terms of the name that is registered by one of the<br class="">
> /// Registration templates, but can be overloaded directly.<br class="">
> @@ -279,8 +303,7 @@ public:<br class="">
> ///<br class="">
> bool runOnModule(Module &) override { return false; }<br class="">
><br class="">
> - explicit ImmutablePass(char &pid)<br class="">
> - : ModulePass(pid) {}<br class="">
> + explicit ImmutablePass(char &pid) : ModulePass(pid) {<br class="">
> setExecuted(true); }<br class="">
><br class="">
> // Force out-of-line virtual method.<br class="">
> ~ImmutablePass() override;<br class="">
> @@ -316,8 +339,9 @@ public:<br class="">
> protected:<br class="">
> /// Optional passes call this function to check whether the pass<br class="">
> should be<br class="">
> /// skipped. This is the case when Attribute::OptimizeNone is set or<br class="">
> when<br class="">
> - /// optimization bisect is over the limit.<br class="">
> - bool skipFunction(const Function &F) const;<br class="">
> + /// optimization bisect is over the limit. It also resets flag<br class="">
> Executed on<br class="">
> + /// the pass.<br class="">
> + bool skipFunction(const Function &F);<br class="">
> };<br class="">
><br class="">
><br class="">
><br class="">
> Modified: llvm/trunk/include/llvm/<wbr class="">PassAnalysisSupport.h<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/PassAnalysisSupport.h?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/include/<wbr class="">llvm/PassAnalysisSupport.h?<wbr class="">rev=291882&r1=291881&r2=<wbr class="">291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/include/llvm/<wbr class="">PassAnalysisSupport.h (original)<br class="">
> +++ llvm/trunk/include/llvm/<wbr class="">PassAnalysisSupport.h Fri Jan 13 00:09:54<br class="">
> 2017<br class="">
> @@ -206,6 +206,9 @@ AnalysisType *Pass::getAnalysisIfAvailab<br class="">
> Pass *ResultPass = Resolver-><wbr class="">getAnalysisIfAvailable(PI, true);<br class="">
> if (!ResultPass) return nullptr;<br class="">
><br class="">
> + if (!ResultPass->isExecuted())<br class="">
> + return nullptr;<br class="">
> +<br class="">
> // Because the AnalysisType may not be a subclass of pass (for<br class="">
> // AnalysisGroups), we use getAdjustedAnalysisPointer here to<br class="">
> potentially<br class="">
> // adjust the return pointer (because the class may multiply inherit,<br class="">
> once<br class="">
> @@ -234,6 +237,8 @@ AnalysisType &Pass::getAnalysisID(Analys<br class="">
> assert (ResultPass &&<br class="">
> "getAnalysis*() called on an analysis that was not "<br class="">
> "'required' by pass!");<br class="">
> + assert(ResultPass->isExecuted(<wbr class="">) &&<br class="">
> + "getAnalysis*() called on an analysis that was freed");<br class="">
><br class="">
> // Because the AnalysisType may not be a subclass of pass (for<br class="">
> // AnalysisGroups), we use getAdjustedAnalysisPointer here to<br class="">
> potentially<br class="">
><br class="">
> Modified: llvm/trunk/lib/Analysis/<wbr class="">CallGraphSCCPass.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/CallGraphSCCPass.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/<wbr class="">Analysis/CallGraphSCCPass.cpp?<wbr class="">rev=291882&r1=291881&r2=<wbr class="">291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/Analysis/<wbr class="">CallGraphSCCPass.cpp (original)<br class="">
> +++ llvm/trunk/lib/Analysis/<wbr class="">CallGraphSCCPass.cpp Fri Jan 13 00:09:54 2017<br class="">
> @@ -414,6 +414,7 @@ bool CGPassManager::<wbr class="">RunAllPassesOnSCC(Ca<br class="">
> initializeAnalysisImpl(P);<br class="">
><br class="">
> // Actually run this pass on the current SCC.<br class="">
> + P->setExecuted(true);<br class="">
> Changed |= RunPassOnSCC(P, CurSCC, CG,<br class="">
> CallGraphUpToDate, DevirtualizedCall);<br class="">
><br class="">
><br class="">
> Modified: llvm/trunk/lib/Analysis/<wbr class="">LoopInfo.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopInfo.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/<wbr class="">Analysis/LoopInfo.cpp?rev=<wbr class="">291882&r1=291881&r2=291882&<wbr class="">view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/Analysis/<wbr class="">LoopInfo.cpp (original)<br class="">
> +++ llvm/trunk/lib/Analysis/<wbr class="">LoopInfo.cpp Fri Jan 13 00:09:54 2017<br class="">
> @@ -722,8 +722,10 @@ void LoopInfoWrapperPass::<wbr class="">verifyAnalysis<br class="">
> // checking by default, LoopPass has been taught to call verifyLoop<br class="">
> manually<br class="">
> // during loop pass sequences.<br class="">
> if (VerifyLoopInfo) {<br class="">
> - auto &DT = getAnalysis<<wbr class="">DominatorTreeWrapperPass>().<wbr class="">getDomTree();<br class="">
> - LI.verify(DT);<br class="">
> + if (auto *Analysis =<br class="">
> getAnalysisIfAvailable<<wbr class="">DominatorTreeWrapperPass>()) {<br class="">
> + auto &DT = Analysis->getDomTree();<br class="">
> + LI.verify(DT);<br class="">
> + }<br class="">
> }<br class="">
> }<br class="">
><br class="">
><br class="">
> Modified: llvm/trunk/lib/Analysis/<wbr class="">LoopPass.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/LoopPass.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/<wbr class="">Analysis/LoopPass.cpp?rev=<wbr class="">291882&r1=291881&r2=291882&<wbr class="">view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/Analysis/<wbr class="">LoopPass.cpp (original)<br class="">
> +++ llvm/trunk/lib/Analysis/<wbr class="">LoopPass.cpp Fri Jan 13 00:09:54 2017<br class="">
> @@ -198,6 +198,7 @@ bool LPPassManager::runOnFunction(<wbr class="">Functi<br class="">
> PassManagerPrettyStackEntry X(P, *CurrentLoop->getHeader());<br class="">
> TimeRegion PassTimer(getPassTimer(P));<br class="">
><br class="">
> + P->setExecuted(true);<br class="">
> Changed |= P->runOnLoop(CurrentLoop, *this);<br class="">
> }<br class="">
> LoopWasDeleted = CurrentLoop->isInvalid();<br class="">
><br class="">
> Modified: llvm/trunk/lib/CodeGen/<wbr class="">MachineDominators.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineDominators.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/<wbr class="">CodeGen/MachineDominators.cpp?<wbr class="">rev=291882&r1=291881&r2=<wbr class="">291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/CodeGen/<wbr class="">MachineDominators.cpp (original)<br class="">
> +++ llvm/trunk/lib/CodeGen/<wbr class="">MachineDominators.cpp Fri Jan 13 00:09:54 2017<br class="">
> @@ -69,7 +69,7 @@ void MachineDominatorTree::<wbr class="">releaseMemory<br class="">
> }<br class="">
><br class="">
> void MachineDominatorTree::<wbr class="">verifyAnalysis() const {<br class="">
> - if (VerifyMachineDomInfo)<br class="">
> + if (VerifyMachineDomInfo && isExecuted())<br class="">
> verifyDomTree();<br class="">
> }<br class="">
><br class="">
><br class="">
> Modified: llvm/trunk/lib/CodeGen/<wbr class="">MachineFunctionPass.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/MachineFunctionPass.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/<wbr class="">CodeGen/MachineFunctionPass.<wbr class="">cpp?rev=291882&r1=291881&r2=<wbr class="">291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/CodeGen/<wbr class="">MachineFunctionPass.cpp (original)<br class="">
> +++ llvm/trunk/lib/CodeGen/<wbr class="">MachineFunctionPass.cpp Fri Jan 13 00:09:54<br class="">
> 2017<br class="">
> @@ -38,8 +38,10 @@ Pass *MachineFunctionPass::<wbr class="">createPrinter<br class="">
> bool MachineFunctionPass::<wbr class="">runOnFunction(Function &F) {<br class="">
> // Do not codegen any 'available_externally' functions at all, they<br class="">
> have<br class="">
> // definitions outside the translation unit.<br class="">
> - if (F.<wbr class="">hasAvailableExternallyLinkage(<wbr class="">))<br class="">
> + if (F.<wbr class="">hasAvailableExternallyLinkage(<wbr class="">)) {<br class="">
> + setExecuted(false);<br class="">
> return false;<br class="">
> + }<br class="">
><br class="">
> MachineModuleInfo &MMI = getAnalysis<MachineModuleInfo><wbr class="">();<br class="">
> MachineFunction &MF = MMI.getMachineFunction(F);<br class="">
><br class="">
> Modified: llvm/trunk/lib/IR/<wbr class="">LegacyPassManager.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/LegacyPassManager.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/IR/<wbr class="">LegacyPassManager.cpp?rev=<wbr class="">291882&r1=291881&r2=291882&<wbr class="">view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/IR/<wbr class="">LegacyPassManager.cpp (original)<br class="">
> +++ llvm/trunk/lib/IR/<wbr class="">LegacyPassManager.cpp Fri Jan 13 00:09:54 2017<br class="">
> @@ -955,6 +955,9 @@ void PMDataManager::freePass(Pass *P, St<br class="">
> AvailableAnalysis.erase(Pos);<br class="">
> }<br class="">
> }<br class="">
> +<br class="">
> + if (!P->getAsImmutablePass())<br class="">
> + P->setExecuted(false);<br class="">
> }<br class="">
><br class="">
> /// Add pass P into the PassVector. Update<br class="">
> @@ -1293,6 +1296,7 @@ bool BBPassManager::runOnFunction(<wbr class="">Functi<br class="">
> PassManagerPrettyStackEntry X(BP, *I);<br class="">
> TimeRegion PassTimer(getPassTimer(BP));<br class="">
><br class="">
> + BP->setExecuted(true);<br class="">
> LocalChanged |= BP->runOnBasicBlock(*I);<br class="">
> }<br class="">
><br class="">
> @@ -1459,7 +1463,9 @@ bool FunctionPassManagerImpl::run(<wbr class="">Functi<br class="">
><br class="">
> initializeAllAnalysisInfo();<br class="">
> for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {<br class="">
> - Changed |= getContainedManager(Index)-><wbr class="">runOnFunction(F);<br class="">
> + FPPassManager *P = getContainedManager(Index);<br class="">
> + P->setExecuted(true);<br class="">
> + Changed |= P->runOnFunction(F);<br class="">
> F.getContext().yield();<br class="">
> }<br class="">
><br class="">
> @@ -1510,6 +1516,7 @@ bool FPPassManager::runOnFunction(<wbr class="">Functi<br class="">
> PassManagerPrettyStackEntry X(FP, F);<br class="">
> TimeRegion PassTimer(getPassTimer(FP));<br class="">
><br class="">
> + FP->setExecuted(true);<br class="">
> LocalChanged |= FP->runOnFunction(F);<br class="">
> }<br class="">
><br class="">
> @@ -1530,8 +1537,10 @@ bool FPPassManager::runOnFunction(<wbr class="">Functi<br class="">
> bool FPPassManager::runOnModule(<wbr class="">Module &M) {<br class="">
> bool Changed = false;<br class="">
><br class="">
> - for (Function &F : M)<br class="">
> + for (Function &F : M) {<br class="">
> + setExecuted(true);<br class="">
> Changed |= runOnFunction(F);<br class="">
> + }<br class="">
><br class="">
> return Changed;<br class="">
> }<br class="">
> @@ -1587,6 +1596,7 @@ MPPassManager::runOnModule(<wbr class="">Module &M) {<br class="">
> PassManagerPrettyStackEntry X(MP, M);<br class="">
> TimeRegion PassTimer(getPassTimer(MP));<br class="">
><br class="">
> + MP->setExecuted(true);<br class="">
> LocalChanged |= MP->runOnModule(M);<br class="">
> }<br class="">
><br class="">
> @@ -1690,7 +1700,9 @@ bool PassManagerImpl::run(Module &M) {<br class="">
><br class="">
> initializeAllAnalysisInfo();<br class="">
> for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {<br class="">
> - Changed |= getContainedManager(Index)-><wbr class="">runOnModule(M);<br class="">
> + MPPassManager *P = getContainedManager(Index);<br class="">
> + P->setExecuted(true);<br class="">
> + Changed |= P->runOnModule(M);<br class="">
> M.getContext().yield();<br class="">
> }<br class="">
><br class="">
><br class="">
> Modified: llvm/trunk/lib/IR/Pass.cpp<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Pass.cpp?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/lib/IR/<wbr class="">Pass.cpp?rev=291882&r1=291881&<wbr class="">r2=291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/lib/IR/Pass.cpp (original)<br class="">
> +++ llvm/trunk/lib/IR/Pass.cpp Fri Jan 13 00:09:54 2017<br class="">
> @@ -146,13 +146,16 @@ PassManagerType FunctionPass::getPotenti<br class="">
> return PMT_FunctionPassManager;<br class="">
> }<br class="">
><br class="">
> -bool FunctionPass::skipFunction(<wbr class="">const Function &F) const {<br class="">
> - if (!F.getContext().getOptBisect(<wbr class="">).shouldRunPass(this, F))<br class="">
> +bool FunctionPass::skipFunction(<wbr class="">const Function &F) {<br class="">
> + if (!F.getContext().getOptBisect(<wbr class="">).shouldRunPass(this, F)) {<br class="">
> + setExecuted(false);<br class="">
> return true;<br class="">
> + }<br class="">
><br class="">
> if (F.hasFnAttribute(Attribute::<wbr class="">OptimizeNone)) {<br class="">
> DEBUG(dbgs() << "Skipping pass '" << getPassName() << "' on function<br class="">
> "<br class="">
> << F.getName() << "\n");<br class="">
> + setExecuted(false);<br class="">
> return true;<br class="">
> }<br class="">
> return false;<br class="">
><br class="">
> Modified: llvm/trunk/test/CodeGen/<wbr class="">Generic/externally_available.<wbr class="">ll<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Generic/externally_available.ll?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/test/<wbr class="">CodeGen/Generic/externally_<wbr class="">available.ll?rev=291882&r1=<wbr class="">291881&r2=291882&view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/test/CodeGen/<wbr class="">Generic/externally_available.<wbr class="">ll (original)<br class="">
> +++ llvm/trunk/test/CodeGen/<wbr class="">Generic/externally_available.<wbr class="">ll Fri Jan 13<br class="">
> 00:09:54 2017<br class="">
> @@ -1,4 +1,4 @@<br class="">
> -; RUN: llc < %s | not grep test_<br class="">
> +; RUN: llc -verify-machine-dom-info < %s | not grep test_<br class="">
><br class="">
> ; test_function should not be emitted to the .s file.<br class="">
> define available_externally i32 @test_function() {<br class="">
><br class="">
> Modified: llvm/trunk/test/CodeGen/Mips/<wbr class="">mul.ll<br class="">
> URL:<br class="">
> <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/mul.ll?rev=291882&r1=291881&r2=291882&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-<wbr class="">project/llvm/trunk/test/<wbr class="">CodeGen/Mips/mul.ll?rev=<wbr class="">291882&r1=291881&r2=291882&<wbr class="">view=diff</a><br class="">
> ==============================<wbr class="">==============================<wbr class="">==================<br class="">
> --- llvm/trunk/test/CodeGen/Mips/<wbr class="">mul.ll (original)<br class="">
> +++ llvm/trunk/test/CodeGen/Mips/<wbr class="">mul.ll Fri Jan 13 00:09:54 2017<br class="">
> @@ -1,4 +1,4 @@<br class="">
> -; RUN: llc -march=mipsel -mattr=mips16 -relocation-model=pic -O3 < %s |<br class="">
> FileCheck %s -check-prefix=16<br class="">
> +; RUN: llc -march=mipsel -mattr=mips16 -relocation-model=pic -O3<br class="">
> -verify-loop-info < %s | FileCheck %s -check-prefix=16<br class="">
><br class="">
> @iiii = global i32 5, align 4<br class="">
> @jjjj = global i32 -6, align 4<br class="">
><br class="">
><br class="">
> ______________________________<wbr class="">_________________<br class="">
> llvm-commits mailing list<br class="">
> <a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">http://lists.llvm.org/cgi-bin/<wbr class="">mailman/listinfo/llvm-commits</a><br class="">
</div></div></blockquote></div><br class=""></div></div>
_______________________________________________<br class="">llvm-commits mailing list<br class=""><a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a><br class="">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits<br class=""></div></blockquote></div><br class=""></div></body></html>