[llvm] r328165 - Fix a couple of layering violations in Transforms

Chandler Carruth via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 4 11:46:09 PDT 2018


On Mon, Jun 4, 2018 at 8:25 PM David Blaikie via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> On Mon, Jun 4, 2018 at 11:16 AM Chandler Carruth <chandlerc at gmail.com>
> wrote:
>
>> On Mon, Jun 4, 2018 at 8:11 PM David Blaikie via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> On Fri, May 25, 2018 at 11:11 PM Chandler Carruth <chandlerc at gmail.com>
>>> wrote:
>>>
>>>> On Wed, Mar 21, 2018 at 3:36 PM David Blaikie via llvm-commits <
>>>> llvm-commits at lists.llvm.org> wrote:
>>>>
>>>>> Author: dblaikie
>>>>> Date: Wed Mar 21 15:34:23 2018
>>>>> New Revision: 328165
>>>>>
>>>>> URL: http://llvm.org/viewvc/llvm-project?rev=328165&view=rev
>>>>> Log:
>>>>> Fix a couple of layering violations in Transforms
>>>>>
>>>>> Remove #include of Transforms/Scalar.h from Transform/Utils to fix
>>>>> layering.
>>>>>
>>>>> Transforms depends on Transforms/Utils, not the other way around. So
>>>>> remove the header and the "createStripGCRelocatesPass" function
>>>>> declaration (& definition) that is unused and motivated this
>>>>> dependency.
>>>>>
>>>>> Move Transforms/Utils/Local.h into Analysis because it's used by
>>>>> Analysis/MemoryBuiltins.cpp.
>>>>>
>>>>> Added:
>>>>>     llvm/trunk/include/llvm/Analysis/Utils/
>>>>>     llvm/trunk/include/llvm/Analysis/Utils/Local.h
>>>>>       - copied, changed from r328163,
>>>>> llvm/trunk/include/llvm/Transforms/Utils/Local.h
>>>>>
>>>>
>>>> This part of the change somewhat bothers me. Most of Local.h really is
>>>> involved in *mutating* the IR and so shouldn't be used from Analysis
>>>> anyways. Would it be possible to extract the interfaces that
>>>> MemoryBuiltins.cpp is relying on into a separate API that fits better in
>>>> Analysis and put this back into Transforms/Utils?
>>>>
>>>
>>> I'm open to ideas - though the API that MemoryBuiltins.cpp is using is
>>> "EmitGEPOffset" - (building a pair of Value*).
>>>
>>> So it is really building IR? I'm not sure there's a specific subset
>>> that's more suitable for Analysis than the rest of it?
>>>
>>
>> There is a bigger problem. The *definition* is still in Transforms/Utils,
>> so this really just papers over the layering issue, without solving it. =[[[
>>
>
> Ah, sorry I didn't catch that. Seems the one entry point used
> (EmitGEPOFfset) is a template/inline in the header, so doesn't show up in
> linker layering constraints.
>
>
>> I don't have strong opinions about whether the usage should be sunk or
>> the bits used should be hoisted. But i feel pretty confiden tthat *all* of
>> it shouldn't be hoisted.
>>
>
> I'm not sure the usage can be hoisted - MemoryBuiltins.cpp is building
> these Value*s to compute some property, but not actually mutating IR in an
> analysis.
>
> I can move just that one function out (which is to say, move the rest of
> it back) & rename al the includes back. I don't much mind - it just seems a
> weird/arbitrary split to me, which is why I moved the whole header. (seemed
> reasonable that if there can be one use of building IR in Analysis (so long
> as it's not actually mutating the Module being analyzed) then there could
> be others later/tomorrow/etc).
>

Totally agree that there can be more. I'm not a huge fan of analyses
creating IR, but we have clear examples of that already and fixing it seems
waaaaaay out of scope.

But I would suggest extracting the EmitGEPOffset stuff and handling it
separetly from the rest of the routines in Local.h and Local.cpp. We can
move more things if motiavtion arrives, but i don't see any reason to do
that eagerly etiher.

I see a few places this can go:
- A new header in Analysis
- A method on IRBuilder
- A helper in the IRBuilder header but not directly attached to IRBuilder
- A new header in the IR library.

I don't have a strong opinion about where it goes among those choices.


>
>
>>
>>
>>>
>>>
>>>>
>>>>
>>>>> Removed:
>>>>>     llvm/trunk/include/llvm/Transforms/Utils/Local.h
>>>>> Modified:
>>>>>     llvm/trunk/include/llvm/Transforms/Scalar.h
>>>>>     llvm/trunk/include/llvm/Transforms/Scalar/SimplifyCFG.h
>>>>>     llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
>>>>>     llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp
>>>>>     llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
>>>>>     llvm/trunk/lib/CodeGen/SafeStack.cpp
>>>>>     llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp
>>>>>     llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
>>>>>     llvm/trunk/lib/Target/AMDGPU/AMDGPUUnifyDivergentExitNodes.cpp
>>>>>     llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp
>>>>>     llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp
>>>>>     llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
>>>>>     llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp
>>>>>     llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp
>>>>>     llvm/trunk/lib/Transforms/Coroutines/CoroFrame.cpp
>>>>>     llvm/trunk/lib/Transforms/Coroutines/CoroSplit.cpp
>>>>>     llvm/trunk/lib/Transforms/Coroutines/Coroutines.cpp
>>>>>     llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
>>>>>     llvm/trunk/lib/Transforms/IPO/Inliner.cpp
>>>>>     llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
>>>>>     llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp
>>>>>     llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
>>>>>     llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
>>>>>     llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h
>>>>>
>>>>> llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
>>>>>     llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp
>>>>>     llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
>>>>>     llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>>>>>     llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
>>>>>     llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>>>>>     llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp
>>>>>     llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>>>>>     llvm/trunk/lib/Transforms/ObjCARC/ObjCARC.h
>>>>>     llvm/trunk/lib/Transforms/Scalar/BDCE.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/DCE.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/DeadStoreElimination.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/EarlyCSE.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/FlattenCFGPass.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/GVN.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/GVNHoist.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/GVNSink.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/IndVarSimplify.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/InferAddressSpaces.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/JumpThreading.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LICM.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopRerollPass.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopRotation.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopSimplifyCFG.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopSink.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopStrengthReduce.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/LoopUnswitch.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/MemCpyOptimizer.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/NaryReassociate.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/NewGVN.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/PlaceSafepoints.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/Reassociate.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/Reg2Mem.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/SCCP.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/SROA.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/SimplifyCFGPass.cpp
>>>>>     llvm/trunk/lib/Transforms/Scalar/StraightLineStrengthReduce.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/BasicBlockUtils.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/BypassSlowDivision.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/CloneFunction.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/DemoteRegToStack.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/EscapeEnumerator.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/FlattenCFG.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/InlineFunction.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/LCSSA.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/Local.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/LoopSimplify.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/LoopUnroll.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/PromoteMemoryToRegister.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/SimplifyCFG.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/SimplifyInstructions.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp
>>>>>     llvm/trunk/lib/Transforms/Utils/StripGCRelocates.cpp
>>>>>     llvm/trunk/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
>>>>>     llvm/trunk/tools/bugpoint/CrashDebugger.cpp
>>>>>     llvm/trunk/unittests/Transforms/Utils/Local.cpp
>>>>>
>>>>> Copied: llvm/trunk/include/llvm/Analysis/Utils/Local.h (from r328163,
>>>>> llvm/trunk/include/llvm/Transforms/Utils/Local.h)
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Analysis/Utils/Local.h?p2=llvm/trunk/include/llvm/Analysis/Utils/Local.h&p1=llvm/trunk/include/llvm/Transforms/Utils/Local.h&r1=328163&r2=328165&rev=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/include/llvm/Transforms/Utils/Local.h (original)
>>>>> +++ llvm/trunk/include/llvm/Analysis/Utils/Local.h Wed Mar 21 15:34:23
>>>>> 2018
>>>>> @@ -12,8 +12,8 @@
>>>>>  //
>>>>>
>>>>>  //===----------------------------------------------------------------------===//
>>>>>
>>>>> -#ifndef LLVM_TRANSFORMS_UTILS_LOCAL_H
>>>>> -#define LLVM_TRANSFORMS_UTILS_LOCAL_H
>>>>> +#ifndef LLVM_ANALYSIS_UTILS_LOCAL_H
>>>>> +#define LLVM_ANALYSIS_UTILS_LOCAL_H
>>>>>
>>>>>  #include "llvm/ADT/ArrayRef.h"
>>>>>  #include "llvm/ADT/SmallPtrSet.h"
>>>>>
>>>>> Modified: llvm/trunk/include/llvm/Transforms/Scalar.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar.h?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/include/llvm/Transforms/Scalar.h (original)
>>>>> +++ llvm/trunk/include/llvm/Transforms/Scalar.h Wed Mar 21 15:34:23
>>>>> 2018
>>>>> @@ -526,13 +526,6 @@ ModulePass *createRewriteStatepointsForG
>>>>>
>>>>>
>>>>>  //===----------------------------------------------------------------------===//
>>>>>  //
>>>>> -// StripGCRelocates - Remove GC relocates that have been inserted by
>>>>> -// RewriteStatepointsForGC. The resulting IR is incorrect, but this
>>>>> is useful
>>>>> -// for manual inspection.
>>>>> -FunctionPass *createStripGCRelocatesPass();
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//
>>>>>  // Float2Int - Demote floats to ints where possible.
>>>>>  //
>>>>>  FunctionPass *createFloat2IntPass();
>>>>>
>>>>> Modified: llvm/trunk/include/llvm/Transforms/Scalar/SimplifyCFG.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Scalar/SimplifyCFG.h?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/include/llvm/Transforms/Scalar/SimplifyCFG.h (original)
>>>>> +++ llvm/trunk/include/llvm/Transforms/Scalar/SimplifyCFG.h Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -15,9 +15,9 @@
>>>>>  #ifndef LLVM_TRANSFORMS_SCALAR_SIMPLIFYCFG_H
>>>>>  #define LLVM_TRANSFORMS_SCALAR_SIMPLIFYCFG_H
>>>>>
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Function.h"
>>>>>  #include "llvm/IR/PassManager.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>
>>>>>  namespace llvm {
>>>>>
>>>>>
>>>>> Removed: llvm/trunk/include/llvm/Transforms/Utils/Local.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Utils/Local.h?rev=328164&view=auto
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/include/llvm/Transforms/Utils/Local.h (original)
>>>>> +++ llvm/trunk/include/llvm/Transforms/Utils/Local.h (removed)
>>>>> @@ -1,507 +0,0 @@
>>>>> -//===- Local.h - Functions to perform local transformations -----*-
>>>>> C++ -*-===//
>>>>> -//
>>>>> -//                     The LLVM Compiler Infrastructure
>>>>> -//
>>>>> -// This file is distributed under the University of Illinois Open
>>>>> Source
>>>>> -// License. See LICENSE.TXT for details.
>>>>> -//
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//
>>>>> -// This family of functions perform various local transformations to
>>>>> the
>>>>> -// program.
>>>>> -//
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -
>>>>> -#ifndef LLVM_TRANSFORMS_UTILS_LOCAL_H
>>>>> -#define LLVM_TRANSFORMS_UTILS_LOCAL_H
>>>>> -
>>>>> -#include "llvm/ADT/ArrayRef.h"
>>>>> -#include "llvm/ADT/SmallPtrSet.h"
>>>>> -#include "llvm/ADT/SmallVector.h"
>>>>> -#include "llvm/ADT/TinyPtrVector.h"
>>>>> -#include "llvm/Analysis/AliasAnalysis.h"
>>>>> -#include "llvm/IR/CallSite.h"
>>>>> -#include "llvm/IR/Constant.h"
>>>>> -#include "llvm/IR/Constants.h"
>>>>> -#include "llvm/IR/DataLayout.h"
>>>>> -#include "llvm/IR/Dominators.h"
>>>>> -#include "llvm/IR/GetElementPtrTypeIterator.h"
>>>>> -#include "llvm/IR/Operator.h"
>>>>> -#include "llvm/IR/Type.h"
>>>>> -#include "llvm/IR/User.h"
>>>>> -#include "llvm/IR/Value.h"
>>>>> -#include "llvm/Support/Casting.h"
>>>>> -#include <cstdint>
>>>>> -#include <limits>
>>>>> -
>>>>> -namespace llvm {
>>>>> -
>>>>> -class AllocaInst;
>>>>> -class AssumptionCache;
>>>>> -class BasicBlock;
>>>>> -class BranchInst;
>>>>> -class CallInst;
>>>>> -class DbgInfoIntrinsic;
>>>>> -class DbgValueInst;
>>>>> -class DIBuilder;
>>>>> -class Function;
>>>>> -class Instruction;
>>>>> -class LazyValueInfo;
>>>>> -class LoadInst;
>>>>> -class MDNode;
>>>>> -class PHINode;
>>>>> -class StoreInst;
>>>>> -class TargetLibraryInfo;
>>>>> -class TargetTransformInfo;
>>>>> -
>>>>> -/// A set of parameters used to control the transforms in the
>>>>> SimplifyCFG pass.
>>>>> -/// Options may change depending on the position in the optimization
>>>>> pipeline.
>>>>> -/// For example, canonical form that includes switches and branches
>>>>> may later be
>>>>> -/// replaced by lookup tables and selects.
>>>>> -struct SimplifyCFGOptions {
>>>>> -  int BonusInstThreshold;
>>>>> -  bool ForwardSwitchCondToPhi;
>>>>> -  bool ConvertSwitchToLookupTable;
>>>>> -  bool NeedCanonicalLoop;
>>>>> -  bool SinkCommonInsts;
>>>>> -  AssumptionCache *AC;
>>>>> -
>>>>> -  SimplifyCFGOptions(unsigned BonusThreshold = 1,
>>>>> -                     bool ForwardSwitchCond = false,
>>>>> -                     bool SwitchToLookup = false, bool CanonicalLoops
>>>>> = true,
>>>>> -                     bool SinkCommon = false,
>>>>> -                     AssumptionCache *AssumpCache = nullptr)
>>>>> -      : BonusInstThreshold(BonusThreshold),
>>>>> -        ForwardSwitchCondToPhi(ForwardSwitchCond),
>>>>> -        ConvertSwitchToLookupTable(SwitchToLookup),
>>>>> -        NeedCanonicalLoop(CanonicalLoops),
>>>>> -        SinkCommonInsts(SinkCommon),
>>>>> -        AC(AssumpCache) {}
>>>>> -
>>>>> -  // Support 'builder' pattern to set members by name at construction
>>>>> time.
>>>>> -  SimplifyCFGOptions &bonusInstThreshold(int I) {
>>>>> -    BonusInstThreshold = I;
>>>>> -    return *this;
>>>>> -  }
>>>>> -  SimplifyCFGOptions &forwardSwitchCondToPhi(bool B) {
>>>>> -    ForwardSwitchCondToPhi = B;
>>>>> -    return *this;
>>>>> -  }
>>>>> -  SimplifyCFGOptions &convertSwitchToLookupTable(bool B) {
>>>>> -    ConvertSwitchToLookupTable = B;
>>>>> -    return *this;
>>>>> -  }
>>>>> -  SimplifyCFGOptions &needCanonicalLoops(bool B) {
>>>>> -    NeedCanonicalLoop = B;
>>>>> -    return *this;
>>>>> -  }
>>>>> -  SimplifyCFGOptions &sinkCommonInsts(bool B) {
>>>>> -    SinkCommonInsts = B;
>>>>> -    return *this;
>>>>> -  }
>>>>> -  SimplifyCFGOptions &setAssumptionCache(AssumptionCache *Cache) {
>>>>> -    AC = Cache;
>>>>> -    return *this;
>>>>> -  }
>>>>> -};
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//  Local constant propagation.
>>>>> -//
>>>>> -
>>>>> -/// If a terminator instruction is predicated on a constant value,
>>>>> convert it
>>>>> -/// into an unconditional branch to the constant destination.
>>>>> -/// This is a nontrivial operation because the successors of this
>>>>> basic block
>>>>> -/// must have their PHI nodes updated.
>>>>> -/// Also calls RecursivelyDeleteTriviallyDeadInstructions() on any
>>>>> branch/switch
>>>>> -/// conditions and indirectbr addresses this might make dead if
>>>>> -/// DeleteDeadConditions is true.
>>>>> -bool ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions
>>>>> = false,
>>>>> -                            const TargetLibraryInfo *TLI = nullptr,
>>>>> -                            DeferredDominance *DDT = nullptr);
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//  Local dead code elimination.
>>>>> -//
>>>>> -
>>>>> -/// Return true if the result produced by the instruction is not
>>>>> used, and the
>>>>> -/// instruction has no side effects.
>>>>> -bool isInstructionTriviallyDead(Instruction *I,
>>>>> -                                const TargetLibraryInfo *TLI =
>>>>> nullptr);
>>>>> -
>>>>> -/// Return true if the result produced by the instruction would have
>>>>> no side
>>>>> -/// effects if it was not used. This is equivalent to checking whether
>>>>> -/// isInstructionTriviallyDead would be true if the use count was 0.
>>>>> -bool wouldInstructionBeTriviallyDead(Instruction *I,
>>>>> -                                     const TargetLibraryInfo *TLI =
>>>>> nullptr);
>>>>> -
>>>>> -/// If the specified value is a trivially dead instruction, delete it.
>>>>> -/// If that makes any of its operands trivially dead, delete them too,
>>>>> -/// recursively. Return true if any instructions were deleted.
>>>>> -bool RecursivelyDeleteTriviallyDeadInstructions(Value *V,
>>>>> -                                        const TargetLibraryInfo *TLI
>>>>> = nullptr);
>>>>> -
>>>>> -/// If the specified value is an effectively dead PHI node, due to
>>>>> being a
>>>>> -/// def-use chain of single-use nodes that either forms a cycle or is
>>>>> terminated
>>>>> -/// by a trivially dead instruction, delete it. If that makes any of
>>>>> its
>>>>> -/// operands trivially dead, delete them too, recursively. Return
>>>>> true if a
>>>>> -/// change was made.
>>>>> -bool RecursivelyDeleteDeadPHINode(PHINode *PN,
>>>>> -                                  const TargetLibraryInfo *TLI =
>>>>> nullptr);
>>>>> -
>>>>> -/// Scan the specified basic block and try to simplify any
>>>>> instructions in it
>>>>> -/// and recursively delete dead instructions.
>>>>> -///
>>>>> -/// This returns true if it changed the code, note that it can delete
>>>>> -/// instructions in other blocks as well in this block.
>>>>> -bool SimplifyInstructionsInBlock(BasicBlock *BB,
>>>>> -                                 const TargetLibraryInfo *TLI =
>>>>> nullptr);
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//  Control Flow Graph Restructuring.
>>>>> -//
>>>>> -
>>>>> -/// Like BasicBlock::removePredecessor, this method is called when
>>>>> we're about
>>>>> -/// to delete Pred as a predecessor of BB. If BB contains any PHI
>>>>> nodes, this
>>>>> -/// drops the entries in the PHI nodes for Pred.
>>>>> -///
>>>>> -/// Unlike the removePredecessor method, this attempts to simplify
>>>>> uses of PHI
>>>>> -/// nodes that collapse into identity values.  For example, if we
>>>>> have:
>>>>> -///   x = phi(1, 0, 0, 0)
>>>>> -///   y = and x, z
>>>>> -///
>>>>> -/// .. and delete the predecessor corresponding to the '1', this will
>>>>> attempt to
>>>>> -/// recursively fold the 'and' to 0.
>>>>> -void RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred,
>>>>> -                                  DeferredDominance *DDT = nullptr);
>>>>> -
>>>>> -/// BB is a block with one predecessor and its predecessor is known
>>>>> to have one
>>>>> -/// successor (BB!). Eliminate the edge between them, moving the
>>>>> instructions in
>>>>> -/// the predecessor into BB. This deletes the predecessor block.
>>>>> -void MergeBasicBlockIntoOnlyPred(BasicBlock *BB, DominatorTree *DT =
>>>>> nullptr,
>>>>> -                                 DeferredDominance *DDT = nullptr);
>>>>> -
>>>>> -/// BB is known to contain an unconditional branch, and contains no
>>>>> instructions
>>>>> -/// other than PHI nodes, potential debug intrinsics and the branch.
>>>>> If
>>>>> -/// possible, eliminate BB by rewriting all the predecessors to
>>>>> branch to the
>>>>> -/// successor block and return true. If we can't transform, return
>>>>> false.
>>>>> -bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
>>>>> -                                             DeferredDominance *DDT =
>>>>> nullptr);
>>>>> -
>>>>> -/// Check for and eliminate duplicate PHI nodes in this block. This
>>>>> doesn't try
>>>>> -/// to be clever about PHI nodes which differ only in the order of
>>>>> the incoming
>>>>> -/// values, but instcombine orders them so it usually won't matter.
>>>>> -bool EliminateDuplicatePHINodes(BasicBlock *BB);
>>>>> -
>>>>> -/// This function is used to do simplification of a CFG.  For
>>>>> example, it
>>>>> -/// adjusts branches to branches to eliminate the extra hop, it
>>>>> eliminates
>>>>> -/// unreachable basic blocks, and does other peephole optimization of
>>>>> the CFG.
>>>>> -/// It returns true if a modification was made, possibly deleting the
>>>>> basic
>>>>> -/// block that was pointed to. LoopHeaders is an optional input
>>>>> parameter
>>>>> -/// providing the set of loop headers that SimplifyCFG should not
>>>>> eliminate.
>>>>> -bool simplifyCFG(BasicBlock *BB, const TargetTransformInfo &TTI,
>>>>> -                 const SimplifyCFGOptions &Options = {},
>>>>> -                 SmallPtrSetImpl<BasicBlock *> *LoopHeaders =
>>>>> nullptr);
>>>>> -
>>>>> -/// This function is used to flatten a CFG. For example, it uses
>>>>> parallel-and
>>>>> -/// and parallel-or mode to collapse if-conditions and merge
>>>>> if-regions with
>>>>> -/// identical statements.
>>>>> -bool FlattenCFG(BasicBlock *BB, AliasAnalysis *AA = nullptr);
>>>>> -
>>>>> -/// If this basic block is ONLY a setcc and a branch, and if a
>>>>> predecessor
>>>>> -/// branches to us and one of our successors, fold the setcc into the
>>>>> -/// predecessor and use logical operations to pick the right
>>>>> destination.
>>>>> -bool FoldBranchToCommonDest(BranchInst *BI, unsigned
>>>>> BonusInstThreshold = 1);
>>>>> -
>>>>> -/// This function takes a virtual register computed by an Instruction
>>>>> and
>>>>> -/// replaces it with a slot in the stack frame, allocated via alloca.
>>>>> -/// This allows the CFG to be changed around without fear of
>>>>> invalidating the
>>>>> -/// SSA information for the value. It returns the pointer to the
>>>>> alloca inserted
>>>>> -/// to create a stack slot for X.
>>>>> -AllocaInst *DemoteRegToStack(Instruction &X,
>>>>> -                             bool VolatileLoads = false,
>>>>> -                             Instruction *AllocaPoint = nullptr);
>>>>> -
>>>>> -/// This function takes a virtual register computed by a phi node and
>>>>> replaces
>>>>> -/// it with a slot in the stack frame, allocated via alloca. The phi
>>>>> node is
>>>>> -/// deleted and it returns the pointer to the alloca inserted.
>>>>> -AllocaInst *DemotePHIToStack(PHINode *P, Instruction *AllocaPoint =
>>>>> nullptr);
>>>>> -
>>>>> -/// Try to ensure that the alignment of \p V is at least \p PrefAlign
>>>>> bytes. If
>>>>> -/// the owning object can be modified and has an alignment less than
>>>>> \p
>>>>> -/// PrefAlign, it will be increased and \p PrefAlign returned. If the
>>>>> alignment
>>>>> -/// cannot be increased, the known alignment of the value is returned.
>>>>> -///
>>>>> -/// It is not always possible to modify the alignment of the
>>>>> underlying object,
>>>>> -/// so if alignment is important, a more reliable approach is to
>>>>> simply align
>>>>> -/// all global variables and allocation instructions to their
>>>>> preferred
>>>>> -/// alignment from the beginning.
>>>>> -unsigned getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign,
>>>>> -                                    const DataLayout &DL,
>>>>> -                                    const Instruction *CxtI = nullptr,
>>>>> -                                    AssumptionCache *AC = nullptr,
>>>>> -                                    const DominatorTree *DT =
>>>>> nullptr);
>>>>> -
>>>>> -/// Try to infer an alignment for the specified pointer.
>>>>> -inline unsigned getKnownAlignment(Value *V, const DataLayout &DL,
>>>>> -                                  const Instruction *CxtI = nullptr,
>>>>> -                                  AssumptionCache *AC = nullptr,
>>>>> -                                  const DominatorTree *DT = nullptr) {
>>>>> -  return getOrEnforceKnownAlignment(V, 0, DL, CxtI, AC, DT);
>>>>> -}
>>>>> -
>>>>> -/// Given a getelementptr instruction/constantexpr, emit the code
>>>>> necessary to
>>>>> -/// compute the offset from the base pointer (without adding in the
>>>>> base
>>>>> -/// pointer). Return the result as a signed integer of intptr size.
>>>>> -/// When NoAssumptions is true, no assumptions about index
>>>>> computation not
>>>>> -/// overflowing is made.
>>>>> -template <typename IRBuilderTy>
>>>>> -Value *EmitGEPOffset(IRBuilderTy *Builder, const DataLayout &DL, User
>>>>> *GEP,
>>>>> -                     bool NoAssumptions = false) {
>>>>> -  GEPOperator *GEPOp = cast<GEPOperator>(GEP);
>>>>> -  Type *IntPtrTy = DL.getIntPtrType(GEP->getType());
>>>>> -  Value *Result = Constant::getNullValue(IntPtrTy);
>>>>> -
>>>>> -  // If the GEP is inbounds, we know that none of the addressing
>>>>> operations will
>>>>> -  // overflow in an unsigned sense.
>>>>> -  bool isInBounds = GEPOp->isInBounds() && !NoAssumptions;
>>>>> -
>>>>> -  // Build a mask for high order bits.
>>>>> -  unsigned IntPtrWidth =
>>>>> IntPtrTy->getScalarType()->getIntegerBitWidth();
>>>>> -  uint64_t PtrSizeMask =
>>>>> -      std::numeric_limits<uint64_t>::max() >> (64 - IntPtrWidth);
>>>>> -
>>>>> -  gep_type_iterator GTI = gep_type_begin(GEP);
>>>>> -  for (User::op_iterator i = GEP->op_begin() + 1, e = GEP->op_end();
>>>>> i != e;
>>>>> -       ++i, ++GTI) {
>>>>> -    Value *Op = *i;
>>>>> -    uint64_t Size = DL.getTypeAllocSize(GTI.getIndexedType()) &
>>>>> PtrSizeMask;
>>>>> -    if (Constant *OpC = dyn_cast<Constant>(Op)) {
>>>>> -      if (OpC->isZeroValue())
>>>>> -        continue;
>>>>> -
>>>>> -      // Handle a struct index, which adds its field offset to the
>>>>> pointer.
>>>>> -      if (StructType *STy = GTI.getStructTypeOrNull()) {
>>>>> -        if (OpC->getType()->isVectorTy())
>>>>> -          OpC = OpC->getSplatValue();
>>>>> -
>>>>> -        uint64_t OpValue = cast<ConstantInt>(OpC)->getZExtValue();
>>>>> -        Size = DL.getStructLayout(STy)->getElementOffset(OpValue);
>>>>> -
>>>>> -        if (Size)
>>>>> -          Result = Builder->CreateAdd(Result,
>>>>> ConstantInt::get(IntPtrTy, Size),
>>>>> -                                      GEP->getName()+".offs");
>>>>> -        continue;
>>>>> -      }
>>>>> -
>>>>> -      Constant *Scale = ConstantInt::get(IntPtrTy, Size);
>>>>> -      Constant *OC = ConstantExpr::getIntegerCast(OpC, IntPtrTy, true
>>>>> /*SExt*/);
>>>>> -      Scale = ConstantExpr::getMul(OC, Scale, isInBounds/*NUW*/);
>>>>> -      // Emit an add instruction.
>>>>> -      Result = Builder->CreateAdd(Result, Scale,
>>>>> GEP->getName()+".offs");
>>>>> -      continue;
>>>>> -    }
>>>>> -    // Convert to correct type.
>>>>> -    if (Op->getType() != IntPtrTy)
>>>>> -      Op = Builder->CreateIntCast(Op, IntPtrTy, true,
>>>>> Op->getName()+".c");
>>>>> -    if (Size != 1) {
>>>>> -      // We'll let instcombine(mul) convert this to a shl if possible.
>>>>> -      Op = Builder->CreateMul(Op, ConstantInt::get(IntPtrTy, Size),
>>>>> -                              GEP->getName()+".idx", isInBounds
>>>>> /*NUW*/);
>>>>> -    }
>>>>> -
>>>>> -    // Emit an add instruction.
>>>>> -    Result = Builder->CreateAdd(Op, Result, GEP->getName()+".offs");
>>>>> -  }
>>>>> -  return Result;
>>>>> -}
>>>>> -
>>>>>
>>>>> -///===---------------------------------------------------------------------===//
>>>>> -///  Dbg Intrinsic utilities
>>>>> -///
>>>>> -
>>>>> -/// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd
>>>>> value
>>>>> -/// that has an associated llvm.dbg.declare or llvm.dbg.addr
>>>>> intrinsic.
>>>>> -void ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
>>>>> -                                     StoreInst *SI, DIBuilder
>>>>> &Builder);
>>>>> -
>>>>> -/// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd
>>>>> value
>>>>> -/// that has an associated llvm.dbg.declare or llvm.dbg.addr
>>>>> intrinsic.
>>>>> -void ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
>>>>> -                                     LoadInst *LI, DIBuilder
>>>>> &Builder);
>>>>> -
>>>>> -/// Inserts a llvm.dbg.value intrinsic after a phi that has an
>>>>> associated
>>>>> -/// llvm.dbg.declare or llvm.dbg.addr intrinsic.
>>>>> -void ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
>>>>> -                                     PHINode *LI, DIBuilder &Builder);
>>>>> -
>>>>> -/// Lowers llvm.dbg.declare intrinsics into appropriate set of
>>>>> -/// llvm.dbg.value intrinsics.
>>>>> -bool LowerDbgDeclare(Function &F);
>>>>> -
>>>>> -/// Propagate dbg.value intrinsics through the newly inserted PHIs.
>>>>> -void insertDebugValuesForPHIs(BasicBlock *BB,
>>>>> -                              SmallVectorImpl<PHINode *>
>>>>> &InsertedPHIs);
>>>>> -
>>>>> -/// Finds all intrinsics declaring local variables as living in the
>>>>> memory that
>>>>> -/// 'V' points to. This may include a mix of dbg.declare and
>>>>> -/// dbg.addr intrinsics.
>>>>> -TinyPtrVector<DbgInfoIntrinsic *> FindDbgAddrUses(Value *V);
>>>>> -
>>>>> -/// Finds the llvm.dbg.value intrinsics describing a value.
>>>>> -void findDbgValues(SmallVectorImpl<DbgValueInst *> &DbgValues, Value
>>>>> *V);
>>>>> -
>>>>> -/// Finds the debug info intrinsics describing a value.
>>>>> -void findDbgUsers(SmallVectorImpl<DbgInfoIntrinsic *> &DbgInsts,
>>>>> Value *V);
>>>>> -
>>>>> -/// Replaces llvm.dbg.declare instruction when the address it
>>>>> -/// describes is replaced with a new value. If Deref is true, an
>>>>> -/// additional DW_OP_deref is prepended to the expression. If Offset
>>>>> -/// is non-zero, a constant displacement is added to the expression
>>>>> -/// (between the optional Deref operations). Offset can be negative.
>>>>> -bool replaceDbgDeclare(Value *Address, Value *NewAddress,
>>>>> -                       Instruction *InsertBefore, DIBuilder &Builder,
>>>>> -                       bool DerefBefore, int Offset, bool DerefAfter);
>>>>> -
>>>>> -/// Replaces llvm.dbg.declare instruction when the alloca it describes
>>>>> -/// is replaced with a new value. If Deref is true, an additional
>>>>> -/// DW_OP_deref is prepended to the expression. If Offset is non-zero,
>>>>> -/// a constant displacement is added to the expression (between the
>>>>> -/// optional Deref operations). Offset can be negative. The new
>>>>> -/// llvm.dbg.declare is inserted immediately before AI.
>>>>> -bool replaceDbgDeclareForAlloca(AllocaInst *AI, Value
>>>>> *NewAllocaAddress,
>>>>> -                                DIBuilder &Builder, bool DerefBefore,
>>>>> -                                int Offset, bool DerefAfter);
>>>>> -
>>>>> -/// Replaces multiple llvm.dbg.value instructions when the alloca it
>>>>> describes
>>>>> -/// is replaced with a new value. If Offset is non-zero, a constant
>>>>> displacement
>>>>> -/// is added to the expression (after the mandatory Deref). Offset
>>>>> can be
>>>>> -/// negative. New llvm.dbg.value instructions are inserted at the
>>>>> locations of
>>>>> -/// the instructions they replace.
>>>>> -void replaceDbgValueForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
>>>>> -                              DIBuilder &Builder, int Offset = 0);
>>>>> -
>>>>> -/// Assuming the instruction \p I is going to be deleted, attempt to
>>>>> salvage any
>>>>> -/// dbg.value intrinsics referring to \p I by rewriting its effect
>>>>> into a
>>>>> -/// DIExpression.
>>>>> -void salvageDebugInfo(Instruction &I);
>>>>> -
>>>>> -/// Remove all instructions from a basic block other than it's
>>>>> terminator
>>>>> -/// and any present EH pad instructions.
>>>>> -unsigned removeAllNonTerminatorAndEHPadInstructions(BasicBlock *BB);
>>>>> -
>>>>> -/// Insert an unreachable instruction before the specified
>>>>> -/// instruction, making it and the rest of the code in the block dead.
>>>>> -unsigned changeToUnreachable(Instruction *I, bool UseLLVMTrap,
>>>>> -                             bool PreserveLCSSA = false,
>>>>> -                             DeferredDominance *DDT = nullptr);
>>>>> -
>>>>> -/// Convert the CallInst to InvokeInst with the specified unwind edge
>>>>> basic
>>>>> -/// block.  This also splits the basic block where CI is located,
>>>>> because
>>>>> -/// InvokeInst is a terminator instruction.  Returns the newly split
>>>>> basic
>>>>> -/// block.
>>>>> -BasicBlock *changeToInvokeAndSplitBasicBlock(CallInst *CI,
>>>>> -                                             BasicBlock *UnwindEdge);
>>>>> -
>>>>> -/// Replace 'BB's terminator with one that does not have an unwind
>>>>> successor
>>>>> -/// block. Rewrites `invoke` to `call`, etc. Updates any PHIs in
>>>>> unwind
>>>>> -/// successor.
>>>>> -///
>>>>> -/// \param BB  Block whose terminator will be replaced.  Its
>>>>> terminator must
>>>>> -///            have an unwind successor.
>>>>> -void removeUnwindEdge(BasicBlock *BB, DeferredDominance *DDT =
>>>>> nullptr);
>>>>> -
>>>>> -/// Remove all blocks that can not be reached from the function's
>>>>> entry.
>>>>> -///
>>>>> -/// Returns true if any basic block was removed.
>>>>> -bool removeUnreachableBlocks(Function &F, LazyValueInfo *LVI =
>>>>> nullptr,
>>>>> -                             DeferredDominance *DDT = nullptr);
>>>>> -
>>>>> -/// Combine the metadata of two instructions so that K can replace J
>>>>> -///
>>>>> -/// Metadata not listed as known via KnownIDs is removed
>>>>> -void combineMetadata(Instruction *K, const Instruction *J,
>>>>> ArrayRef<unsigned> KnownIDs);
>>>>> -
>>>>> -/// Combine the metadata of two instructions so that K can replace J.
>>>>> This
>>>>> -/// specifically handles the case of CSE-like transformations.
>>>>> -///
>>>>> -/// Unknown metadata is removed.
>>>>> -void combineMetadataForCSE(Instruction *K, const Instruction *J);
>>>>> -
>>>>> -// Replace each use of 'From' with 'To', if that use does not belong
>>>>> to basic
>>>>> -// block where 'From' is defined. Returns the number of replacements
>>>>> made.
>>>>> -unsigned replaceNonLocalUsesWith(Instruction *From, Value *To);
>>>>> -
>>>>> -/// Replace each use of 'From' with 'To' if that use is dominated by
>>>>> -/// the given edge.  Returns the number of replacements made.
>>>>> -unsigned replaceDominatedUsesWith(Value *From, Value *To,
>>>>> DominatorTree &DT,
>>>>> -                                  const BasicBlockEdge &Edge);
>>>>> -/// Replace each use of 'From' with 'To' if that use is dominated by
>>>>> -/// the end of the given BasicBlock. Returns the number of
>>>>> replacements made.
>>>>> -unsigned replaceDominatedUsesWith(Value *From, Value *To,
>>>>> DominatorTree &DT,
>>>>> -                                  const BasicBlock *BB);
>>>>> -
>>>>> -/// Return true if the CallSite CS calls a gc leaf function.
>>>>> -///
>>>>> -/// A leaf function is a function that does not safepoint the thread
>>>>> during its
>>>>> -/// execution.  During a call or invoke to such a function, the
>>>>> callers stack
>>>>> -/// does not have to be made parseable.
>>>>> -///
>>>>> -/// Most passes can and should ignore this information, and it is
>>>>> only used
>>>>> -/// during lowering by the GC infrastructure.
>>>>> -bool callsGCLeafFunction(ImmutableCallSite CS, const
>>>>> TargetLibraryInfo &TLI);
>>>>> -
>>>>> -/// Copy a nonnull metadata node to a new load instruction.
>>>>> -///
>>>>> -/// This handles mapping it to range metadata if the new load is an
>>>>> integer
>>>>> -/// load instead of a pointer load.
>>>>> -void copyNonnullMetadata(const LoadInst &OldLI, MDNode *N, LoadInst
>>>>> &NewLI);
>>>>> -
>>>>> -/// Copy a range metadata node to a new load instruction.
>>>>> -///
>>>>> -/// This handles mapping it to nonnull metadata if the new load is a
>>>>> pointer
>>>>> -/// load instead of an integer load and the range doesn't cover null.
>>>>> -void copyRangeMetadata(const DataLayout &DL, const LoadInst &OldLI,
>>>>> MDNode *N,
>>>>> -                       LoadInst &NewLI);
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//  Intrinsic pattern matching
>>>>> -//
>>>>> -
>>>>> -/// Try to match a bswap or bitreverse idiom.
>>>>> -///
>>>>> -/// If an idiom is matched, an intrinsic call is inserted before \c
>>>>> I. Any added
>>>>> -/// instructions are returned in \c InsertedInsts. They will all have
>>>>> been added
>>>>> -/// to a basic block.
>>>>> -///
>>>>> -/// A bitreverse idiom normally requires around 2*BW nodes to be
>>>>> searched (where
>>>>> -/// BW is the bitwidth of the integer type). A bswap idiom requires
>>>>> anywhere up
>>>>> -/// to BW / 4 nodes to be searched, so is significantly faster.
>>>>> -///
>>>>> -/// This function returns true on a successful match or false
>>>>> otherwise.
>>>>> -bool recognizeBSwapOrBitReverseIdiom(
>>>>> -    Instruction *I, bool MatchBSwaps, bool MatchBitReversals,
>>>>> -    SmallVectorImpl<Instruction *> &InsertedInsts);
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//  Sanitizer utilities
>>>>> -//
>>>>> -
>>>>> -/// Given a CallInst, check if it calls a string function known to
>>>>> CodeGen,
>>>>> -/// and mark it with NoBuiltin if so.  To be used by sanitizers that
>>>>> intend
>>>>> -/// to intercept string functions and want to avoid converting them
>>>>> to target
>>>>> -/// specific instructions.
>>>>> -void maybeMarkSanitizerLibraryCallNoBuiltin(CallInst *CI,
>>>>> -                                            const TargetLibraryInfo
>>>>> *TLI);
>>>>> -
>>>>>
>>>>> -//===----------------------------------------------------------------------===//
>>>>> -//  Transform predicates
>>>>> -//
>>>>> -
>>>>> -/// Given an instruction, is it legal to set operand OpIdx to a
>>>>> non-constant
>>>>> -/// value?
>>>>> -bool canReplaceOperandWithVariable(const Instruction *I, unsigned
>>>>> OpIdx);
>>>>> -
>>>>> -} // end namespace llvm
>>>>> -
>>>>> -#endif // LLVM_TRANSFORMS_UTILS_LOCAL_H
>>>>>
>>>>> Modified: llvm/trunk/lib/Analysis/MemoryBuiltins.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/MemoryBuiltins.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Analysis/MemoryBuiltins.cpp (original)
>>>>> +++ llvm/trunk/lib/Analysis/MemoryBuiltins.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -21,6 +21,7 @@
>>>>>  #include "llvm/ADT/StringRef.h"
>>>>>  #include "llvm/Analysis/TargetFolder.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/Argument.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>> @@ -40,7 +41,6 @@
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Support/MathExtras.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cassert>
>>>>>  #include <cstdint>
>>>>>  #include <iterator>
>>>>>
>>>>> Modified: llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp (original)
>>>>> +++ llvm/trunk/lib/CodeGen/CodeGenPrepare.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -30,6 +30,7 @@
>>>>>  #include "llvm/Analysis/ProfileSummaryInfo.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/CodeGen/Analysis.h"
>>>>>  #include "llvm/CodeGen/ISDOpcodes.h"
>>>>> @@ -85,7 +86,6 @@
>>>>>  #include "llvm/Target/TargetOptions.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>>  #include "llvm/Transforms/Utils/BypassSlowDivision.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/SimplifyLibCalls.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>
>>>>> Modified: llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp (original)
>>>>> +++ llvm/trunk/lib/CodeGen/DwarfEHPrepare.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -18,6 +18,7 @@
>>>>>  #include "llvm/Analysis/CFG.h"
>>>>>  #include "llvm/Analysis/EHPersonalities.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/CodeGen/RuntimeLibcalls.h"
>>>>>  #include "llvm/CodeGen/TargetLowering.h"
>>>>>  #include "llvm/CodeGen/TargetPassConfig.h"
>>>>> @@ -33,7 +34,6 @@
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Support/Casting.h"
>>>>>  #include "llvm/Target/TargetMachine.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cstddef>
>>>>>
>>>>>  using namespace llvm;
>>>>>
>>>>> Modified: llvm/trunk/lib/CodeGen/SafeStack.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SafeStack.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/CodeGen/SafeStack.cpp (original)
>>>>> +++ llvm/trunk/lib/CodeGen/SafeStack.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -29,6 +29,7 @@
>>>>>  #include "llvm/Analysis/ScalarEvolution.h"
>>>>>  #include "llvm/Analysis/ScalarEvolutionExpressions.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/CodeGen/TargetLowering.h"
>>>>>  #include "llvm/CodeGen/TargetPassConfig.h"
>>>>>  #include "llvm/CodeGen/TargetSubtargetInfo.h"
>>>>> @@ -63,7 +64,6 @@
>>>>>  #include "llvm/Target/TargetMachine.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>>  #include "llvm/Transforms/Utils/Cloning.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>  #include <cstdint>
>>>>>
>>>>> Modified: llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp (original)
>>>>> +++ llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -16,6 +16,7 @@
>>>>>  #include "llvm/ADT/SmallPtrSet.h"
>>>>>  #include "llvm/ADT/SmallVector.h"
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/CodeGen/Passes.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>>  #include "llvm/IR/DataLayout.h"
>>>>> @@ -27,7 +28,6 @@
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  using namespace llvm;
>>>>>
>>>>>  #define DEBUG_TYPE "sjljehprepare"
>>>>>
>>>>> Modified: llvm/trunk/lib/CodeGen/WinEHPrepare.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/WinEHPrepare.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/CodeGen/WinEHPrepare.cpp (original)
>>>>> +++ llvm/trunk/lib/CodeGen/WinEHPrepare.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -21,6 +21,7 @@
>>>>>  #include "llvm/ADT/STLExtras.h"
>>>>>  #include "llvm/Analysis/CFG.h"
>>>>>  #include "llvm/Analysis/EHPersonalities.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/CodeGen/MachineBasicBlock.h"
>>>>>  #include "llvm/CodeGen/Passes.h"
>>>>>  #include "llvm/CodeGen/WinEHFuncInfo.h"
>>>>> @@ -31,7 +32,6 @@
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>>  #include "llvm/Transforms/Utils/Cloning.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/SSAUpdater.h"
>>>>>
>>>>>  using namespace llvm;
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Target/AMDGPU/AMDGPUUnifyDivergentExitNodes.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/AMDGPUUnifyDivergentExitNodes.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Target/AMDGPU/AMDGPUUnifyDivergentExitNodes.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Target/AMDGPU/AMDGPUUnifyDivergentExitNodes.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -28,6 +28,7 @@
>>>>>  #include "llvm/Analysis/DivergenceAnalysis.h"
>>>>>  #include "llvm/Analysis/PostDominators.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>> @@ -39,7 +40,6 @@
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Support/Casting.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>
>>>>>  using namespace llvm;
>>>>>
>>>>>
>>>>> Modified: llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp (original)
>>>>> +++ llvm/trunk/lib/Target/AMDGPU/SIAnnotateControlFlow.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -18,6 +18,7 @@
>>>>>  #include "llvm/ADT/SmallVector.h"
>>>>>  #include "llvm/Analysis/DivergenceAnalysis.h"
>>>>>  #include "llvm/Analysis/LoopInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>>  #include "llvm/IR/Constant.h"
>>>>> @@ -37,7 +38,6 @@
>>>>>  #include "llvm/Support/ErrorHandling.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cassert>
>>>>>  #include <utility>
>>>>>
>>>>>
>>>>> Modified: llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp (original)
>>>>> +++ llvm/trunk/lib/Target/Hexagon/HexagonCommonGEP.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -16,6 +16,7 @@
>>>>>  #include "llvm/ADT/StringRef.h"
>>>>>  #include "llvm/Analysis/LoopInfo.h"
>>>>>  #include "llvm/Analysis/PostDominators.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/Constant.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>> @@ -36,7 +37,6 @@
>>>>>  #include "llvm/Support/Compiler.h"
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>  #include <cstddef>
>>>>>
>>>>> Modified: llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -26,6 +26,7 @@
>>>>>  #include "llvm/Analysis/ScalarEvolutionExpander.h"
>>>>>  #include "llvm/Analysis/ScalarEvolutionExpressions.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>> @@ -56,7 +57,6 @@
>>>>>  #include "llvm/Support/KnownBits.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <algorithm>
>>>>>  #include <array>
>>>>>  #include <cassert>
>>>>>
>>>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp (original)
>>>>> +++ llvm/trunk/lib/Target/PowerPC/PPCCTRLoops.cpp Wed Mar 21 15:34:23
>>>>> 2018
>>>>> @@ -35,6 +35,7 @@
>>>>>  #include "llvm/Analysis/ScalarEvolutionExpander.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/CodeGen/TargetPassConfig.h"
>>>>>  #include "llvm/CodeGen/TargetSchedule.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>> @@ -51,7 +52,6 @@
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/LoopUtils.h"
>>>>>
>>>>>  #ifndef NDEBUG
>>>>>
>>>>> Modified: llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp (original)
>>>>> +++ llvm/trunk/lib/Target/PowerPC/PPCLoopPreIncPrep.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -33,6 +33,7 @@
>>>>>  #include "llvm/Analysis/ScalarEvolution.h"
>>>>>  #include "llvm/Analysis/ScalarEvolutionExpander.h"
>>>>>  #include "llvm/Analysis/ScalarEvolutionExpressions.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>>  #include "llvm/IR/Dominators.h"
>>>>> @@ -48,7 +49,6 @@
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/LoopUtils.h"
>>>>>  #include <cassert>
>>>>>  #include <iterator>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Coroutines/CoroFrame.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Coroutines/CoroFrame.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Coroutines/CoroFrame.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Coroutines/CoroFrame.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -19,6 +19,7 @@
>>>>>
>>>>>  #include "CoroInternal.h"
>>>>>  #include "llvm/ADT/BitVector.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>>  #include "llvm/IR/Dominators.h"
>>>>>  #include "llvm/IR/IRBuilder.h"
>>>>> @@ -27,7 +28,6 @@
>>>>>  #include "llvm/Support/MathExtras.h"
>>>>>  #include "llvm/Support/circular_raw_ostream.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>
>>>>>  using namespace llvm;
>>>>>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Coroutines/CoroSplit.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Coroutines/CoroSplit.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Coroutines/CoroSplit.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Coroutines/CoroSplit.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -28,6 +28,7 @@
>>>>>  #include "llvm/ADT/Twine.h"
>>>>>  #include "llvm/Analysis/CallGraph.h"
>>>>>  #include "llvm/Analysis/CallGraphSCCPass.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Argument.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>> @@ -59,7 +60,6 @@
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>>  #include "llvm/Transforms/Utils/Cloning.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/ValueMapper.h"
>>>>>  #include <cassert>
>>>>>  #include <cstddef>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Coroutines/Coroutines.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Coroutines/Coroutines.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Coroutines/Coroutines.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Coroutines/Coroutines.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -11,12 +11,14 @@
>>>>>  //
>>>>>
>>>>>  //===----------------------------------------------------------------------===//
>>>>>
>>>>> +#include "llvm/Transforms/Coroutines.h"
>>>>>  #include "CoroInstr.h"
>>>>>  #include "CoroInternal.h"
>>>>>  #include "llvm/ADT/SmallVector.h"
>>>>>  #include "llvm/ADT/StringRef.h"
>>>>>  #include "llvm/Analysis/CallGraph.h"
>>>>>  #include "llvm/Analysis/CallGraphSCCPass.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/CallSite.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>> @@ -31,10 +33,8 @@
>>>>>  #include "llvm/IR/Type.h"
>>>>>  #include "llvm/Support/Casting.h"
>>>>>  #include "llvm/Support/ErrorHandling.h"
>>>>> -#include "llvm/Transforms/Coroutines.h"
>>>>>  #include "llvm/Transforms/IPO.h"
>>>>>  #include "llvm/Transforms/IPO/PassManagerBuilder.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cassert>
>>>>>  #include <cstddef>
>>>>>  #include <utility>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/IPO/GlobalOpt.cpp Wed Mar 21 15:34:23
>>>>> 2018
>>>>> @@ -27,6 +27,7 @@
>>>>>  #include "llvm/Analysis/MemoryBuiltins.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/BinaryFormat/Dwarf.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>> @@ -66,7 +67,6 @@
>>>>>  #include "llvm/Transforms/Utils/CtorUtils.h"
>>>>>  #include "llvm/Transforms/Utils/Evaluator.h"
>>>>>  #include "llvm/Transforms/Utils/GlobalStatus.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cassert>
>>>>>  #include <cstdint>
>>>>>  #include <utility>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/IPO/Inliner.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/Inliner.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/IPO/Inliner.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/IPO/Inliner.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -35,6 +35,7 @@
>>>>>  #include "llvm/Analysis/ProfileSummaryInfo.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/CallSite.h"
>>>>> @@ -59,7 +60,6 @@
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Utils/Cloning.h"
>>>>>  #include "llvm/Transforms/Utils/ImportedFunctionsInliningStatistics.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/ModuleUtils.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/IPO/PruneEH.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/PruneEH.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/IPO/PruneEH.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/IPO/PruneEH.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -19,6 +19,7 @@
>>>>>  #include "llvm/Analysis/CallGraph.h"
>>>>>  #include "llvm/Analysis/CallGraphSCCPass.h"
>>>>>  #include "llvm/Analysis/EHPersonalities.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>>  #include "llvm/IR/Function.h"
>>>>> @@ -27,7 +28,6 @@
>>>>>  #include "llvm/IR/LLVMContext.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/IPO.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <algorithm>
>>>>>  using namespace llvm;
>>>>>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/IPO/StripSymbols.cpp Wed Mar 21 15:34:23
>>>>> 2018
>>>>> @@ -21,6 +21,7 @@
>>>>>
>>>>>  //===----------------------------------------------------------------------===//
>>>>>
>>>>>  #include "llvm/ADT/SmallPtrSet.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>>  #include "llvm/IR/DebugInfo.h"
>>>>>  #include "llvm/IR/DerivedTypes.h"
>>>>> @@ -30,7 +31,6 @@
>>>>>  #include "llvm/IR/ValueSymbolTable.h"
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Transforms/IPO.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  using namespace llvm;
>>>>>
>>>>>  namespace {
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -14,10 +14,10 @@
>>>>>  #include "InstCombineInternal.h"
>>>>>  #include "llvm/Analysis/CmpInstAnalysis.h"
>>>>>  #include "llvm/Analysis/InstructionSimplify.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/ConstantRange.h"
>>>>>  #include "llvm/IR/Intrinsics.h"
>>>>>  #include "llvm/IR/PatternMatch.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  using namespace llvm;
>>>>>  using namespace PatternMatch;
>>>>>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp Wed Mar
>>>>> 21 15:34:23 2018
>>>>> @@ -24,6 +24,7 @@
>>>>>  #include "llvm/Analysis/AssumptionCache.h"
>>>>>  #include "llvm/Analysis/InstructionSimplify.h"
>>>>>  #include "llvm/Analysis/MemoryBuiltins.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>> @@ -57,7 +58,6 @@
>>>>>  #include "llvm/Support/MathExtras.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/InstCombine/InstCombineWorklist.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/SimplifyLibCalls.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombineInternal.h Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -20,6 +20,7 @@
>>>>>  #include "llvm/Analysis/AliasAnalysis.h"
>>>>>  #include "llvm/Analysis/InstructionSimplify.h"
>>>>>  #include "llvm/Analysis/TargetFolder.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/Argument.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>> @@ -40,7 +41,6 @@
>>>>>  #include "llvm/Support/KnownBits.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/InstCombine/InstCombineWorklist.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cassert>
>>>>>  #include <cstdint>
>>>>>
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> ---
>>>>> llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp
>>>>> (original)
>>>>> +++
>>>>> llvm/trunk/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -16,6 +16,7 @@
>>>>>  #include "llvm/ADT/SmallString.h"
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>>  #include "llvm/Analysis/Loads.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/ConstantRange.h"
>>>>>  #include "llvm/IR/DataLayout.h"
>>>>>  #include "llvm/IR/IntrinsicInst.h"
>>>>> @@ -23,7 +24,6 @@
>>>>>  #include "llvm/IR/MDBuilder.h"
>>>>>  #include "llvm/IR/PatternMatch.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  using namespace llvm;
>>>>>  using namespace PatternMatch;
>>>>>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/InstCombine/InstCombinePHI.cpp Wed Mar
>>>>> 21 15:34:23 2018
>>>>> @@ -15,9 +15,9 @@
>>>>>  #include "llvm/ADT/STLExtras.h"
>>>>>  #include "llvm/ADT/SmallPtrSet.h"
>>>>>  #include "llvm/Analysis/InstructionSimplify.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/PatternMatch.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  using namespace llvm;
>>>>>  using namespace llvm::PatternMatch;
>>>>>
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/InstCombine/InstructionCombining.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -56,6 +56,7 @@
>>>>>  #include "llvm/Analysis/OptimizationRemarkEmitter.h"
>>>>>  #include "llvm/Analysis/TargetFolder.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>> @@ -95,7 +96,6 @@
>>>>>  #include "llvm/Transforms/InstCombine/InstCombine.h"
>>>>>  #include "llvm/Transforms/InstCombine/InstCombineWorklist.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>  #include <cstdint>
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -25,6 +25,7 @@
>>>>>  #include "llvm/ADT/Twine.h"
>>>>>  #include "llvm/Analysis/MemoryBuiltins.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/BinaryFormat/MachO.h"
>>>>>  #include "llvm/IR/Argument.h"
>>>>> @@ -71,7 +72,6 @@
>>>>>  #include "llvm/Transforms/Instrumentation.h"
>>>>>  #include "llvm/Transforms/Utils/ASanStackFrameLayout.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/ModuleUtils.h"
>>>>>  #include "llvm/Transforms/Utils/PromoteMemToReg.h"
>>>>>  #include <algorithm>
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/Instrumentation/DataFlowSanitizer.cpp
>>>>> Wed Mar 21 15:34:23 2018
>>>>> @@ -56,6 +56,7 @@
>>>>>  #include "llvm/ADT/StringExtras.h"
>>>>>  #include "llvm/ADT/StringRef.h"
>>>>>  #include "llvm/ADT/Triple.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/Argument.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>> @@ -90,7 +91,6 @@
>>>>>  #include "llvm/Support/SpecialCaseList.h"
>>>>>  #include "llvm/Transforms/Instrumentation.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>  #include <cstddef>
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>>>>> Wed Mar 21 15:34:23 2018
>>>>> @@ -23,6 +23,7 @@
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>>  #include "llvm/ADT/StringExtras.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Function.h"
>>>>>  #include "llvm/IR/IRBuilder.h"
>>>>>  #include "llvm/IR/IntrinsicInst.h"
>>>>> @@ -33,7 +34,6 @@
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Instrumentation.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/ModuleUtils.h"
>>>>>
>>>>>  using namespace llvm;
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -101,6 +101,7 @@
>>>>>  #include "llvm/ADT/StringRef.h"
>>>>>  #include "llvm/ADT/Triple.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Argument.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>> @@ -138,7 +139,6 @@
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Instrumentation.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/ModuleUtils.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Wed
>>>>> Mar 21 15:34:23 2018
>>>>> @@ -26,6 +26,7 @@
>>>>>  #include "llvm/ADT/StringExtras.h"
>>>>>  #include "llvm/Analysis/CaptureTracking.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/DataLayout.h"
>>>>>  #include "llvm/IR/Function.h"
>>>>> @@ -44,7 +45,6 @@
>>>>>  #include "llvm/Transforms/Instrumentation.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>>  #include "llvm/Transforms/Utils/EscapeEnumerator.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include "llvm/Transforms/Utils/ModuleUtils.h"
>>>>>
>>>>>  using namespace llvm;
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/ObjCARC/ObjCARC.h
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/ObjCARC/ObjCARC.h?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/ObjCARC/ObjCARC.h (original)
>>>>> +++ llvm/trunk/lib/Transforms/ObjCARC/ObjCARC.h Wed Mar 21 15:34:23
>>>>> 2018
>>>>> @@ -28,13 +28,13 @@
>>>>>  #include "llvm/Analysis/ObjCARCAnalysisUtils.h"
>>>>>  #include "llvm/Analysis/ObjCARCInstKind.h"
>>>>>  #include "llvm/Analysis/Passes.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/Analysis/ValueTracking.h"
>>>>>  #include "llvm/IR/CallSite.h"
>>>>>  #include "llvm/IR/InstIterator.h"
>>>>>  #include "llvm/IR/Module.h"
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Transforms/ObjCARC.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>
>>>>>  namespace llvm {
>>>>>  class raw_ostream;
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Scalar/BDCE.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/BDCE.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Scalar/BDCE.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Scalar/BDCE.cpp Wed Mar 21 15:34:23 2018
>>>>> @@ -20,13 +20,13 @@
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>>  #include "llvm/Analysis/DemandedBits.h"
>>>>>  #include "llvm/Analysis/GlobalsModRef.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/InstIterator.h"
>>>>>  #include "llvm/IR/Instructions.h"
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  using namespace llvm;
>>>>>
>>>>>  #define DEBUG_TYPE "bdce"
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Scalar/CallSiteSplitting.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -60,13 +60,13 @@
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/IntrinsicInst.h"
>>>>>  #include "llvm/IR/PatternMatch.h"
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>>  #include "llvm/Transforms/Utils/BasicBlockUtils.h"
>>>>>  #include "llvm/Transforms/Utils/Cloning.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>
>>>>>  using namespace llvm;
>>>>>  using namespace PatternMatch;
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Scalar/ConstantHoisting.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -43,8 +43,10 @@
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>>  #include "llvm/Analysis/BlockFrequencyInfo.h"
>>>>>  #include "llvm/Analysis/TargetTransformInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/Constants.h"
>>>>> +#include "llvm/IR/DebugInfoMetadata.h"
>>>>>  #include "llvm/IR/Dominators.h"
>>>>>  #include "llvm/IR/Function.h"
>>>>>  #include "llvm/IR/InstrTypes.h"
>>>>> @@ -59,8 +61,6 @@
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>> -#include "llvm/IR/DebugInfoMetadata.h"
>>>>>  #include <algorithm>
>>>>>  #include <cassert>
>>>>>  #include <cstdint>
>>>>>
>>>>> Modified: llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp (original)
>>>>> +++ llvm/trunk/lib/Transforms/Scalar/ConstantProp.cpp Wed Mar 21
>>>>> 15:34:23 2018
>>>>> @@ -21,12 +21,12 @@
>>>>>  #include "llvm/ADT/Statistic.h"
>>>>>  #include "llvm/Analysis/ConstantFolding.h"
>>>>>  #include "llvm/Analysis/TargetLibraryInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Constant.h"
>>>>>  #include "llvm/IR/InstIterator.h"
>>>>>  #include "llvm/IR/Instruction.h"
>>>>>  #include "llvm/Pass.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <set>
>>>>>  using namespace llvm;
>>>>>
>>>>>
>>>>> Modified:
>>>>> llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
>>>>> URL:
>>>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp?rev=328165&r1=328164&r2=328165&view=diff
>>>>>
>>>>> ==============================================================================
>>>>> --- llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
>>>>> (original)
>>>>> +++ llvm/trunk/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp
>>>>> Wed Mar 21 15:34:23 2018
>>>>> @@ -19,6 +19,7 @@
>>>>>  #include "llvm/Analysis/GlobalsModRef.h"
>>>>>  #include "llvm/Analysis/InstructionSimplify.h"
>>>>>  #include "llvm/Analysis/LazyValueInfo.h"
>>>>> +#include "llvm/Analysis/Utils/Local.h"
>>>>>  #include "llvm/IR/Attributes.h"
>>>>>  #include "llvm/IR/BasicBlock.h"
>>>>>  #include "llvm/IR/CFG.h"
>>>>> @@ -28,11 +29,11 @@
>>>>>  #include "llvm/IR/Constants.h"
>>>>>  #include "llvm/IR/DerivedTypes.h"
>>>>>  #include "llvm/IR/Function.h"
>>>>> +#include "llvm/IR/IRBuilder.h"
>>>>>  #include "llvm/IR/InstrTypes.h"
>>>>>  #include "llvm/IR/Instruction.h"
>>>>>  #include "llvm/IR/Instructions.h"
>>>>>  #include "llvm/IR/IntrinsicInst.h"
>>>>> -#include "llvm/IR/IRBuilder.h"
>>>>>  #include "llvm/IR/Operator.h"
>>>>>  #include "llvm/IR/PassManager.h"
>>>>>  #include "llvm/IR/Type.h"
>>>>> @@ -43,7 +44,6 @@
>>>>>  #include "llvm/Support/Debug.h"
>>>>>  #include "llvm/Support/raw_ostream.h"
>>>>>  #include "llvm/Transforms/Scalar.h"
>>>>> -#include "llvm/Transforms/Utils/Local.h"
>>>>>  #include <cassert>
>>>>>  #i
>>>>
>>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180604/8d2a8f3b/attachment-0001.html>


More information about the llvm-commits mailing list