1 //===- ReplaceWithVeclib.h - Replace vector instrinsics with veclib calls -===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Replaces calls to LLVM vector intrinsics (i.e., calls to LLVM intrinsics
10 // with vector operands) with matching calls to functions from a vector
11 // library (e.g., libmvec, SVML) according to TargetLibraryInfo.
12 //
13 //===----------------------------------------------------------------------===//
14 #ifndef LLVM_CODEGEN_REPLACEWITHVECLIB_H
15 #define LLVM_CODEGEN_REPLACEWITHVECLIB_H
16 
17 #include "llvm/IR/PassManager.h"
18 #include "llvm/InitializePasses.h"
19 
20 namespace llvm {
21 struct ReplaceWithVeclib : public PassInfoMixin<ReplaceWithVeclib> {
22   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
23 };
24 
25 // Legacy pass
26 struct ReplaceWithVeclibLegacy : public FunctionPass {
27   static char ID;
28   ReplaceWithVeclibLegacy() : FunctionPass(ID) {
29     initializeReplaceWithVeclibLegacyPass(*PassRegistry::getPassRegistry());
30   }
31   void getAnalysisUsage(AnalysisUsage &AU) const override;
32   bool runOnFunction(Function &F) override;
33 };
34 
35 } // End namespace llvm
36 #endif // LLVM_CODEGEN_REPLACEWITHVECLIB_H
37