diff options
Diffstat (limited to 'llvm/include')
-rw-r--r-- | llvm/include/llvm-c/DebugInfo.h | 24 | ||||
-rw-r--r-- | llvm/include/llvm/ADT/APFloat.h | 152 | ||||
-rw-r--r-- | llvm/include/llvm/Analysis/LoopAnalysisManager.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/Analysis/LoopInfo.h | 2 | ||||
-rw-r--r-- | llvm/include/llvm/Analysis/ScalarEvolution.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h | 12 | ||||
-rw-r--r-- | llvm/include/llvm/IR/DebugProgramInstruction.h | 10 | ||||
-rw-r--r-- | llvm/include/llvm/IR/Value.h | 4 | ||||
-rw-r--r-- | llvm/include/llvm/LTO/LTO.h | 6 | ||||
-rw-r--r-- | llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h | 1 | ||||
-rw-r--r-- | llvm/include/llvm/Transforms/IPO/MemProfContextDisambiguation.h | 10 | ||||
-rw-r--r-- | llvm/include/llvm/Transforms/Scalar/LoopPassManager.h | 15 |
12 files changed, 128 insertions, 111 deletions
diff --git a/llvm/include/llvm-c/DebugInfo.h b/llvm/include/llvm-c/DebugInfo.h index 2ecd69a..70da3a6 100644 --- a/llvm/include/llvm-c/DebugInfo.h +++ b/llvm/include/llvm-c/DebugInfo.h @@ -204,6 +204,11 @@ enum { typedef unsigned LLVMMetadataKind; /** + * The kind of checksum to emit. + */ +typedef enum { CSK_MD5, CSK_SHA1, CSK_SHA256 } LLVMChecksumKind; + +/** * An LLVM DWARF type encoding. */ typedef unsigned LLVMDWARFTypeEncoding; @@ -327,6 +332,25 @@ LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateFile(LLVMDIBuilderRef Builder, size_t DirectoryLen); /** + * Create a file descriptor to hold debugging information for a file. + * \param Builder The \c DIBuilder. + * \param Filename File name. + * \param FilenameLen The length of the C string passed to \c Filename. + * \param Directory Directory. + * \param DirectoryLen The length of the C string passed to \c Directory. + * \param ChecksumKind The kind of checksum. eg MD5, SHA256 + * \param Checksum The checksum. + * \param ChecksumLen The length of the checksum. + * \param Souce The embedded source. + * \param SourceLen The length of the source. + */ +LLVM_C_ABI LLVMMetadataRef LLVMDIBuilderCreateFileWithChecksum( + LLVMDIBuilderRef Builder, const char *Filename, size_t FilenameLen, + const char *Directory, size_t DirectoryLen, LLVMChecksumKind ChecksumKind, + const char *Checksum, size_t ChecksumLen, const char *Source, + size_t SourceLen); + +/** * Creates a new descriptor for a module with the specified parent scope. * \param Builder The \c DIBuilder. * \param ParentScope The parent scope containing this module declaration. diff --git a/llvm/include/llvm/ADT/APFloat.h b/llvm/include/llvm/ADT/APFloat.h index a1bfce7..bccdb89 100644 --- a/llvm/include/llvm/ADT/APFloat.h +++ b/llvm/include/llvm/ADT/APFloat.h @@ -138,10 +138,16 @@ enum lostFraction { // Example of truncated bits: /// New operations: sqrt, IEEE remainder, C90 fmod, nexttoward. /// +namespace detail { +class IEEEFloat; +class DoubleAPFloat; +} // namespace detail + // This is the common type definitions shared by APFloat and its internal // implementation classes. This struct should not define any non-static data // members. -struct APFloatBase { +class APFloatBase { +public: typedef APInt::WordType integerPart; static constexpr unsigned integerPartWidth = APInt::APINT_BITS_PER_WORD; @@ -257,30 +263,64 @@ struct APFloatBase { LLVM_ABI static const llvm::fltSemantics &EnumToSemantics(Semantics S); LLVM_ABI static Semantics SemanticsToEnum(const llvm::fltSemantics &Sem); - LLVM_ABI static const fltSemantics &IEEEhalf() LLVM_READNONE; - LLVM_ABI static const fltSemantics &BFloat() LLVM_READNONE; - LLVM_ABI static const fltSemantics &IEEEsingle() LLVM_READNONE; - LLVM_ABI static const fltSemantics &IEEEdouble() LLVM_READNONE; - LLVM_ABI static const fltSemantics &IEEEquad() LLVM_READNONE; - LLVM_ABI static const fltSemantics &PPCDoubleDouble() LLVM_READNONE; - LLVM_ABI static const fltSemantics &PPCDoubleDoubleLegacy() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E5M2() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E5M2FNUZ() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E4M3() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E4M3FN() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E4M3FNUZ() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E4M3B11FNUZ() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E3M4() LLVM_READNONE; - LLVM_ABI static const fltSemantics &FloatTF32() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float8E8M0FNU() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float6E3M2FN() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float6E2M3FN() LLVM_READNONE; - LLVM_ABI static const fltSemantics &Float4E2M1FN() LLVM_READNONE; - LLVM_ABI static const fltSemantics &x87DoubleExtended() LLVM_READNONE; +private: + LLVM_ABI static const fltSemantics semIEEEhalf; + LLVM_ABI static const fltSemantics semBFloat; + LLVM_ABI static const fltSemantics semIEEEsingle; + LLVM_ABI static const fltSemantics semIEEEdouble; + LLVM_ABI static const fltSemantics semIEEEquad; + LLVM_ABI static const fltSemantics semFloat8E5M2; + LLVM_ABI static const fltSemantics semFloat8E5M2FNUZ; + LLVM_ABI static const fltSemantics semFloat8E4M3; + LLVM_ABI static const fltSemantics semFloat8E4M3FN; + LLVM_ABI static const fltSemantics semFloat8E4M3FNUZ; + LLVM_ABI static const fltSemantics semFloat8E4M3B11FNUZ; + LLVM_ABI static const fltSemantics semFloat8E3M4; + LLVM_ABI static const fltSemantics semFloatTF32; + LLVM_ABI static const fltSemantics semFloat8E8M0FNU; + LLVM_ABI static const fltSemantics semFloat6E3M2FN; + LLVM_ABI static const fltSemantics semFloat6E2M3FN; + LLVM_ABI static const fltSemantics semFloat4E2M1FN; + LLVM_ABI static const fltSemantics semX87DoubleExtended; + LLVM_ABI static const fltSemantics semBogus; + LLVM_ABI static const fltSemantics semPPCDoubleDouble; + LLVM_ABI static const fltSemantics semPPCDoubleDoubleLegacy; + + friend class detail::IEEEFloat; + friend class detail::DoubleAPFloat; + friend class APFloat; + +public: + static const fltSemantics &IEEEhalf() { return semIEEEhalf; } + static const fltSemantics &BFloat() { return semBFloat; } + static const fltSemantics &IEEEsingle() { return semIEEEsingle; } + static const fltSemantics &IEEEdouble() { return semIEEEdouble; } + static const fltSemantics &IEEEquad() { return semIEEEquad; } + static const fltSemantics &PPCDoubleDouble() { return semPPCDoubleDouble; } + static const fltSemantics &PPCDoubleDoubleLegacy() { + return semPPCDoubleDoubleLegacy; + } + static const fltSemantics &Float8E5M2() { return semFloat8E5M2; } + static const fltSemantics &Float8E5M2FNUZ() { return semFloat8E5M2FNUZ; } + static const fltSemantics &Float8E4M3() { return semFloat8E4M3; } + static const fltSemantics &Float8E4M3FN() { return semFloat8E4M3FN; } + static const fltSemantics &Float8E4M3FNUZ() { return semFloat8E4M3FNUZ; } + static const fltSemantics &Float8E4M3B11FNUZ() { + return semFloat8E4M3B11FNUZ; + } + static const fltSemantics &Float8E3M4() { return semFloat8E3M4; } + static const fltSemantics &FloatTF32() { return semFloatTF32; } + static const fltSemantics &Float8E8M0FNU() { return semFloat8E8M0FNU; } + static const fltSemantics &Float6E3M2FN() { return semFloat6E3M2FN; } + static const fltSemantics &Float6E2M3FN() { return semFloat6E2M3FN; } + static const fltSemantics &Float4E2M1FN() { return semFloat4E2M1FN; } + static const fltSemantics &x87DoubleExtended() { + return semX87DoubleExtended; + } /// A Pseudo fltsemantic used to construct APFloats that cannot conflict with /// anything real. - LLVM_ABI static const fltSemantics &Bogus() LLVM_READNONE; + static const fltSemantics &Bogus() { return semBogus; } // Returns true if any number described by this semantics can be precisely // represented by the specified semantics. Does not take into account @@ -927,69 +967,11 @@ class APFloat : public APFloatBase { llvm_unreachable("Unexpected semantics"); } - ~Storage() { - if (usesLayout<IEEEFloat>(*semantics)) { - IEEE.~IEEEFloat(); - return; - } - if (usesLayout<DoubleAPFloat>(*semantics)) { - Double.~DoubleAPFloat(); - return; - } - llvm_unreachable("Unexpected semantics"); - } - - Storage(const Storage &RHS) { - if (usesLayout<IEEEFloat>(*RHS.semantics)) { - new (this) IEEEFloat(RHS.IEEE); - return; - } - if (usesLayout<DoubleAPFloat>(*RHS.semantics)) { - new (this) DoubleAPFloat(RHS.Double); - return; - } - llvm_unreachable("Unexpected semantics"); - } - - Storage(Storage &&RHS) { - if (usesLayout<IEEEFloat>(*RHS.semantics)) { - new (this) IEEEFloat(std::move(RHS.IEEE)); - return; - } - if (usesLayout<DoubleAPFloat>(*RHS.semantics)) { - new (this) DoubleAPFloat(std::move(RHS.Double)); - return; - } - llvm_unreachable("Unexpected semantics"); - } - - Storage &operator=(const Storage &RHS) { - if (usesLayout<IEEEFloat>(*semantics) && - usesLayout<IEEEFloat>(*RHS.semantics)) { - IEEE = RHS.IEEE; - } else if (usesLayout<DoubleAPFloat>(*semantics) && - usesLayout<DoubleAPFloat>(*RHS.semantics)) { - Double = RHS.Double; - } else if (this != &RHS) { - this->~Storage(); - new (this) Storage(RHS); - } - return *this; - } - - Storage &operator=(Storage &&RHS) { - if (usesLayout<IEEEFloat>(*semantics) && - usesLayout<IEEEFloat>(*RHS.semantics)) { - IEEE = std::move(RHS.IEEE); - } else if (usesLayout<DoubleAPFloat>(*semantics) && - usesLayout<DoubleAPFloat>(*RHS.semantics)) { - Double = std::move(RHS.Double); - } else if (this != &RHS) { - this->~Storage(); - new (this) Storage(std::move(RHS)); - } - return *this; - } + LLVM_ABI ~Storage(); + LLVM_ABI Storage(const Storage &RHS); + LLVM_ABI Storage(Storage &&RHS); + LLVM_ABI Storage &operator=(const Storage &RHS); + LLVM_ABI Storage &operator=(Storage &&RHS); } U; template <typename T> static bool usesLayout(const fltSemantics &Semantics) { diff --git a/llvm/include/llvm/Analysis/LoopAnalysisManager.h b/llvm/include/llvm/Analysis/LoopAnalysisManager.h index fc69cb0..1755257 100644 --- a/llvm/include/llvm/Analysis/LoopAnalysisManager.h +++ b/llvm/include/llvm/Analysis/LoopAnalysisManager.h @@ -36,7 +36,6 @@ namespace llvm { class AAResults; class AssumptionCache; -class BlockFrequencyInfo; class DominatorTree; class Function; class Loop; @@ -58,7 +57,6 @@ struct LoopStandardAnalysisResults { ScalarEvolution &SE; TargetLibraryInfo &TLI; TargetTransformInfo &TTI; - BlockFrequencyInfo *BFI; MemorySSA *MSSA; }; diff --git a/llvm/include/llvm/Analysis/LoopInfo.h b/llvm/include/llvm/Analysis/LoopInfo.h index a7a6a27..0ecb114 100644 --- a/llvm/include/llvm/Analysis/LoopInfo.h +++ b/llvm/include/llvm/Analysis/LoopInfo.h @@ -617,7 +617,7 @@ public: }; /// Function to print a loop's contents as LLVM's text IR assembly. -LLVM_ABI void printLoop(Loop &L, raw_ostream &OS, +LLVM_ABI void printLoop(const Loop &L, raw_ostream &OS, const std::string &Banner = ""); /// Find and return the loop attribute node for the attribute @p Name in diff --git a/llvm/include/llvm/Analysis/ScalarEvolution.h b/llvm/include/llvm/Analysis/ScalarEvolution.h index e5a6c8c..3d3ec14 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolution.h +++ b/llvm/include/llvm/Analysis/ScalarEvolution.h @@ -1345,6 +1345,7 @@ public: class LoopGuards { DenseMap<const SCEV *, const SCEV *> RewriteMap; + SmallDenseSet<std::pair<const SCEV *, const SCEV *>> NotEqual; bool PreserveNUW = false; bool PreserveNSW = false; ScalarEvolution &SE; diff --git a/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h b/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h index 68198ec..9354eef 100644 --- a/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h +++ b/llvm/include/llvm/Analysis/ScalarEvolutionPatternMatch.h @@ -256,6 +256,18 @@ m_scev_UDiv(const Op0_t &Op0, const Op1_t &Op1) { return m_scev_Binary<SCEVUDivExpr>(Op0, Op1); } +template <typename Op0_t, typename Op1_t> +inline SCEVBinaryExpr_match<SCEVSMaxExpr, Op0_t, Op1_t> +m_scev_SMax(const Op0_t &Op0, const Op1_t &Op1) { + return m_scev_Binary<SCEVSMaxExpr>(Op0, Op1); +} + +template <typename Op0_t, typename Op1_t> +inline SCEVBinaryExpr_match<SCEVMinMaxExpr, Op0_t, Op1_t> +m_scev_MinMax(const Op0_t &Op0, const Op1_t &Op1) { + return m_scev_Binary<SCEVMinMaxExpr>(Op0, Op1); +} + /// Match unsigned remainder pattern. /// Matches patterns generated by getURemExpr. template <typename Op0_t, typename Op1_t> struct SCEVURem_match { diff --git a/llvm/include/llvm/IR/DebugProgramInstruction.h b/llvm/include/llvm/IR/DebugProgramInstruction.h index e0292c2..457c60e3b 100644 --- a/llvm/include/llvm/IR/DebugProgramInstruction.h +++ b/llvm/include/llvm/IR/DebugProgramInstruction.h @@ -14,7 +14,7 @@ // dbg.value(metadata i32 %foo, ...) // %bar = void call @ext(%foo); // -// and all information is stored in the Value / Metadata hierachy defined +// and all information is stored in the Value / Metadata hierarchy defined // elsewhere in LLVM. In the "DbgRecord" design, each instruction /may/ have a // connection with a DbgMarker, which identifies a position immediately before // the instruction, and each DbgMarker /may/ then have connections to DbgRecords @@ -37,7 +37,7 @@ // // This structure separates the two concerns of the position of the debug-info // in the function, and the Value that it refers to. It also creates a new -// "place" in-between the Value / Metadata hierachy where we can customise +// "place" in-between the Value / Metadata hierarchy where we can customise // storage and allocation techniques to better suite debug-info workloads. // NB: as of the initial prototype, none of that has actually been attempted // yet. @@ -162,7 +162,7 @@ public: LLVM_ABI bool isIdenticalToWhenDefined(const DbgRecord &R) const; /// Convert this DbgRecord back into an appropriate llvm.dbg.* intrinsic. /// \p InsertBefore Optional position to insert this intrinsic. - /// \returns A new llvm.dbg.* intrinsic representiung this DbgRecord. + /// \returns A new llvm.dbg.* intrinsic representing this DbgRecord. LLVM_ABI DbgInfoIntrinsic * createDebugIntrinsic(Module *M, Instruction *InsertBefore) const; ///@} @@ -530,7 +530,7 @@ public: LLVM_ABI void setKillAddress(); /// Check whether this kills the address component. This doesn't take into /// account the position of the intrinsic, therefore a returned value of false - /// does not guarentee the address is a valid location for the variable at the + /// does not guarantee the address is a valid location for the variable at the /// intrinsic's position in IR. LLVM_ABI bool isKillAddress() const; @@ -539,7 +539,7 @@ public: LLVM_ABI DbgVariableRecord *clone() const; /// Convert this DbgVariableRecord back into a dbg.value intrinsic. /// \p InsertBefore Optional position to insert this intrinsic. - /// \returns A new dbg.value intrinsic representiung this DbgVariableRecord. + /// \returns A new dbg.value intrinsic representing this DbgVariableRecord. LLVM_ABI DbgVariableIntrinsic * createDebugIntrinsic(Module *M, Instruction *InsertBefore) const; diff --git a/llvm/include/llvm/IR/Value.h b/llvm/include/llvm/IR/Value.h index 04d0391..58822a0 100644 --- a/llvm/include/llvm/IR/Value.h +++ b/llvm/include/llvm/IR/Value.h @@ -484,8 +484,8 @@ public: /// Remove every uses that can safely be removed. /// /// This will remove for example uses in llvm.assume. - /// This should be used when performing want to perform a tranformation but - /// some Droppable uses pervent it. + /// This should be used when performing want to perform a transformation but + /// some Droppable uses prevent it. /// This function optionally takes a filter to only remove some droppable /// uses. LLVM_ABI void diff --git a/llvm/include/llvm/LTO/LTO.h b/llvm/include/llvm/LTO/LTO.h index 3a9a7f7..000472f 100644 --- a/llvm/include/llvm/LTO/LTO.h +++ b/llvm/include/llvm/LTO/LTO.h @@ -105,12 +105,6 @@ setupStatsFile(StringRef StatsFilename); /// ordered indices to elements in the input array. LLVM_ABI std::vector<int> generateModulesOrdering(ArrayRef<BitcodeModule *> R); -/// Updates MemProf attributes (and metadata) based on whether the index -/// has recorded that we are linking with allocation libraries containing -/// the necessary APIs for downstream transformations. -LLVM_ABI void updateMemProfAttributes(Module &Mod, - const ModuleSummaryIndex &Index); - class LTO; struct SymbolResolution; diff --git a/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h b/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h index faaff4a..4aa6c01 100644 --- a/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h +++ b/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h @@ -121,6 +121,7 @@ enum attributeBits { "The Dynamic Duo! Prefer over all else because this changes " \ "most operands' meaning") \ ENUM_ENTRY(IC_64BIT_REX2, 2, "requires a REX2 prefix") \ + ENUM_ENTRY(IC_64BIT_REX2_REXW, 3, "requires a REX2 and the W prefix") \ ENUM_ENTRY(IC_VEX, 1, "requires a VEX prefix") \ ENUM_ENTRY(IC_VEX_XS, 2, "requires VEX and the XS prefix") \ ENUM_ENTRY(IC_VEX_XD, 2, "requires VEX and the XD prefix") \ diff --git a/llvm/include/llvm/Transforms/IPO/MemProfContextDisambiguation.h b/llvm/include/llvm/Transforms/IPO/MemProfContextDisambiguation.h index f2de083..576f1eb 100644 --- a/llvm/include/llvm/Transforms/IPO/MemProfContextDisambiguation.h +++ b/llvm/include/llvm/Transforms/IPO/MemProfContextDisambiguation.h @@ -95,6 +95,16 @@ public: function_ref<bool(GlobalValue::GUID, const GlobalValueSummary *)> isPrevailing); }; + +/// Strips MemProf attributes and metadata. Can be invoked by the pass pipeline +/// when we don't have an index that has recorded that we are linking with +/// allocation libraries containing the necessary APIs for downstream +/// transformations. +class MemProfRemoveInfo : public PassInfoMixin<MemProfRemoveInfo> { +public: + PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM); +}; + } // end namespace llvm #endif // LLVM_TRANSFORMS_IPO_MEMPROF_CONTEXT_DISAMBIGUATION_H diff --git a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h index 750f954..1842d2d 100644 --- a/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h +++ b/llvm/include/llvm/Transforms/Scalar/LoopPassManager.h @@ -404,10 +404,8 @@ public: explicit FunctionToLoopPassAdaptor(std::unique_ptr<PassConceptT> Pass, bool UseMemorySSA = false, - bool UseBlockFrequencyInfo = false, bool LoopNestMode = false) : Pass(std::move(Pass)), UseMemorySSA(UseMemorySSA), - UseBlockFrequencyInfo(UseBlockFrequencyInfo), LoopNestMode(LoopNestMode) { LoopCanonicalizationFPM.addPass(LoopSimplifyPass()); LoopCanonicalizationFPM.addPass(LCSSAPass()); @@ -429,7 +427,6 @@ private: FunctionPassManager LoopCanonicalizationFPM; bool UseMemorySSA = false; - bool UseBlockFrequencyInfo = false; const bool LoopNestMode; }; @@ -442,8 +439,7 @@ private: /// \c LoopPassManager and the returned adaptor will be in loop-nest mode. template <typename LoopPassT> inline FunctionToLoopPassAdaptor -createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA = false, - bool UseBlockFrequencyInfo = false) { +createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA = false) { if constexpr (is_detected<HasRunOnLoopT, LoopPassT>::value) { using PassModelT = detail::PassModel<Loop, LoopPassT, LoopAnalysisManager, @@ -453,7 +449,7 @@ createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA = false, return FunctionToLoopPassAdaptor( std::unique_ptr<FunctionToLoopPassAdaptor::PassConceptT>( new PassModelT(std::forward<LoopPassT>(Pass))), - UseMemorySSA, UseBlockFrequencyInfo, false); + UseMemorySSA, false); } else { LoopPassManager LPM; LPM.addPass(std::forward<LoopPassT>(Pass)); @@ -465,7 +461,7 @@ createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA = false, return FunctionToLoopPassAdaptor( std::unique_ptr<FunctionToLoopPassAdaptor::PassConceptT>( new PassModelT(std::move(LPM))), - UseMemorySSA, UseBlockFrequencyInfo, true); + UseMemorySSA, true); } } @@ -474,8 +470,7 @@ createFunctionToLoopPassAdaptor(LoopPassT &&Pass, bool UseMemorySSA = false, template <> inline FunctionToLoopPassAdaptor createFunctionToLoopPassAdaptor<LoopPassManager>(LoopPassManager &&LPM, - bool UseMemorySSA, - bool UseBlockFrequencyInfo) { + bool UseMemorySSA) { // Check if LPM contains any loop pass and if it does not, returns an adaptor // in loop-nest mode. using PassModelT = @@ -487,7 +482,7 @@ createFunctionToLoopPassAdaptor<LoopPassManager>(LoopPassManager &&LPM, return FunctionToLoopPassAdaptor( std::unique_ptr<FunctionToLoopPassAdaptor::PassConceptT>( new PassModelT(std::move(LPM))), - UseMemorySSA, UseBlockFrequencyInfo, LoopNestMode); + UseMemorySSA, LoopNestMode); } /// Pass for printing a loop's contents as textual IR. |