//===- SimplifyLibCalls.h - Library call simplifier -------------*- 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 exposes an interface to build some C language libcalls for // optimization passes that need to call the various functions. // //===----------------------------------------------------------------------===// #ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYLIBCALLS_H #define LLVM_TRANSFORMS_UTILS_SIMPLIFYLIBCALLS_H #include "llvm/ADT/STLFunctionalExtras.h" #include "llvm/Analysis/TargetLibraryInfo.h" namespace llvm { class AssumptionCache; class StringRef; class Value; class CallInst; class DataLayout; class Instruction; class IRBuilderBase; class Function; class OptimizationRemarkEmitter; class BlockFrequencyInfo; class ProfileSummaryInfo; /// This class implements simplifications for calls to fortified library /// functions (__st*cpy_chk, __memcpy_chk, __memmove_chk, __memset_chk), to, /// when possible, replace them with their non-checking counterparts. /// Other optimizations can also be done, but it's possible to disable them and /// only simplify needless use of the checking versions (when the object size /// is unknown) by passing true for OnlyLowerUnknownSize. class FortifiedLibCallSimplifier { … }; /// LibCallSimplifier - This class implements a collection of optimizations /// that replace well formed calls to library functions with a more optimal /// form. For example, replacing 'printf("Hello!")' with 'puts("Hello!")'. class LibCallSimplifier { … }; } // End llvm namespace #endif