003 File Manager
Current Path:
/usr/src/contrib/llvm-project/llvm/include/llvm/Transforms/Utils
usr
/
src
/
contrib
/
llvm-project
/
llvm
/
include
/
llvm
/
Transforms
/
Utils
/
📁
..
📄
AMDGPUEmitPrintf.h
(864 B)
📄
ASanStackFrameLayout.h
(3.51 KB)
📄
AddDiscriminators.h
(1.04 KB)
📄
AssumeBundleBuilder.h
(2.29 KB)
📄
BasicBlockUtils.h
(20.81 KB)
📄
BreakCriticalEdges.h
(1.16 KB)
📄
BuildLibCalls.h
(9.67 KB)
📄
BypassSlowDivision.h
(2.55 KB)
📄
CallGraphUpdater.h
(3.84 KB)
📄
CallPromotionUtils.h
(3.41 KB)
📄
CanonicalizeAliases.h
(998 B)
📄
CanonicalizeFreezeInLoops.h
(1.15 KB)
📄
Cloning.h
(12.34 KB)
📄
CodeExtractor.h
(9.58 KB)
📄
CodeMoverUtils.h
(2.85 KB)
📄
CtorUtils.h
(1021 B)
📄
Debugify.h
(3.36 KB)
📄
EntryExitInstrumenter.h
(1.16 KB)
📄
EscapeEnumerator.h
(1.56 KB)
📄
Evaluator.h
(4.69 KB)
📄
FunctionComparator.h
(17.12 KB)
📄
FunctionImportUtils.h
(5.73 KB)
📄
GlobalStatus.h
(2.97 KB)
📄
GuardUtils.h
(1.92 KB)
📄
ImportedFunctionsInliningStatistics.h
(4.35 KB)
📄
InjectTLIMappings.h
(1.27 KB)
📄
IntegerDivision.h
(2.88 KB)
📄
LCSSA.h
(1.56 KB)
📄
LibCallsShrinkWrap.h
(908 B)
📄
Local.h
(24.77 KB)
📄
LoopRotationUtils.h
(1.54 KB)
📄
LoopSimplify.h
(2.85 KB)
📄
LoopUtils.h
(21.25 KB)
📄
LoopVersioning.h
(5.87 KB)
📄
LowerInvoke.h
(1.08 KB)
📄
LowerMemIntrinsics.h
(2.14 KB)
📄
Mem2Reg.h
(921 B)
📄
MisExpect.h
(1.81 KB)
📄
ModuleUtils.h
(5.04 KB)
📄
NameAnonGlobals.h
(1.03 KB)
📄
PredicateInfo.h
(7.76 KB)
📄
PromoteMemToReg.h
(1.57 KB)
📄
SSAUpdater.h
(6.12 KB)
📄
SSAUpdaterBulk.h
(3.18 KB)
📄
SSAUpdaterImpl.h
(15.75 KB)
📄
SanitizerStats.h
(1.53 KB)
📄
ScalarEvolutionExpander.h
(17.87 KB)
📄
SimplifyIndVar.h
(2.12 KB)
📄
SimplifyLibCalls.h
(10.85 KB)
📄
SizeOpts.h
(4.84 KB)
📄
SplitModule.h
(1.53 KB)
📄
SymbolRewriter.h
(5.02 KB)
📄
UnifyFunctionExitNodes.h
(1.83 KB)
📄
UniqueInternalLinkageNames.h
(1.07 KB)
📄
UnrollLoop.h
(6.05 KB)
📄
VNCoercion.h
(4.99 KB)
📄
ValueMapper.h
(11.67 KB)
Editing: CallPromotionUtils.h
//===- CallPromotionUtils.h - Utilities for call promotion ------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file declares utilities useful for promoting indirect call sites to // direct call sites. // //===----------------------------------------------------------------------===// #ifndef LLVM_TRANSFORMS_UTILS_CALLPROMOTIONUTILS_H #define LLVM_TRANSFORMS_UTILS_CALLPROMOTIONUTILS_H namespace llvm { class CallBase; class CastInst; class Function; class MDNode; /// Return true if the given indirect call site can be made to call \p Callee. /// /// This function ensures that the number and type of the call site's arguments /// and return value match those of the given function. If the types do not /// match exactly, they must at least be bitcast compatible. If \p FailureReason /// is non-null and the indirect call cannot be promoted, the failure reason /// will be stored in it. bool isLegalToPromote(const CallBase &CB, Function *Callee, const char **FailureReason = nullptr); /// Promote the given indirect call site to unconditionally call \p Callee. /// /// This function promotes the given call site, returning the direct call or /// invoke instruction. If the function type of the call site doesn't match that /// of the callee, bitcast instructions are inserted where appropriate. If \p /// RetBitCast is non-null, it will be used to store the return value bitcast, /// if created. CallBase &promoteCall(CallBase &CB, Function *Callee, CastInst **RetBitCast = nullptr); /// Promote the given indirect call site to conditionally call \p Callee. /// /// This function creates an if-then-else structure at the location of the call /// site. The original call site is moved into the "else" block. A clone of the /// indirect call site is promoted, placed in the "then" block, and returned. If /// \p BranchWeights is non-null, it will be used to set !prof metadata on the /// new conditional branch. CallBase &promoteCallWithIfThenElse(CallBase &CB, Function *Callee, MDNode *BranchWeights = nullptr); /// Try to promote (devirtualize) a virtual call on an Alloca. Return true on /// success. /// /// Look for a pattern like: /// /// %o = alloca %class.Impl /// %1 = getelementptr %class.Impl, %class.Impl* %o, i64 0, i32 0, i32 0 /// store i32 (...)** bitcast (i8** getelementptr inbounds /// ({ [3 x i8*] }, { [3 x i8*] }* @_ZTV4Impl, i64 0, inrange i32 0, i64 2) /// to i32 (...)**), i32 (...)*** %1 /// %2 = getelementptr inbounds %class.Impl, %class.Impl* %o, i64 0, i32 0 /// %3 = bitcast %class.Interface* %2 to void (%class.Interface*)*** /// %vtable.i = load void (%class.Interface*)**, void (%class.Interface*)*** %3 /// %4 = load void (%class.Interface*)*, void (%class.Interface*)** %vtable.i /// call void %4(%class.Interface* nonnull %2) /// /// @_ZTV4Impl = linkonce_odr dso_local unnamed_addr constant { [3 x i8*] } /// { [3 x i8*] /// [i8* null, i8* bitcast ({ i8*, i8*, i8* }* @_ZTI4Impl to i8*), /// i8* bitcast (void (%class.Impl*)* @_ZN4Impl3RunEv to i8*)] } /// bool tryPromoteCall(CallBase &CB); } // end namespace llvm #endif // LLVM_TRANSFORMS_UTILS_CALLPROMOTIONUTILS_H
Upload File
Create Folder