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

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 4 14:28:49 PDT 2018


moved back in r333954 - left the one function used in Analysis in
Analysis/Utils/Local.h (& included that from Transform/Utils/Local.h)

On Mon, Jun 4, 2018 at 11:46 AM Chandler Carruth <chandlerc at gmail.com>
wrote:

> 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/36255eed/attachment-0001.html>


More information about the llvm-commits mailing list