Lines Matching refs:llvm

24 #include <llvm/IR/CallSite.h>
25 #include <llvm/IR/Type.h>
26 #include <llvm/IR/Instructions.h>
27 #include <llvm/IR/Module.h>
28 #include <llvm/IR/Function.h>
29 #include <llvm/Pass.h>
42 class RSX86_64CallConvPass: public llvm::ModulePass {
44 bool IsRSFunctionOfInterest(llvm::Function &F) {
49 // llvm intrinsic or internal function
50 llvm::StringRef FName = F.getName();
51 if (FName.startswith("llvm."))
60 bool IsDerefNeeded(llvm::Function *F, llvm::Argument &Arg) {
62 llvm::Type *ArgTy = Arg.getType();
74 llvm::Type *StructTy = ArgTy->getPointerElementType();
79 llvm::StringRef FName = F->getName();
94 bool FillArgsToDeref(llvm::Function *F, std::vector<unsigned> &ArgNums) {
110 llvm::Function *RedefineFn(llvm::Function *OrigFn,
113 llvm::FunctionType *FTy = OrigFn->getFunctionType();
114 std::vector<llvm::Type *> Params(FTy->param_begin(), FTy->param_end());
116 llvm::FunctionType *NewTy = llvm::FunctionType::get(FTy->getReturnType(),
119 llvm::Function *NewFn = llvm::Function::Create(NewTy,
128 NewFn->addAttribute(i+1, llvm::Attribute::ByVal);
143 void ReplaceCallInsn(llvm::CallSite &CS,
144 llvm::Function *NewFn,
147 llvm::CallInst *CI = llvm::cast<llvm::CallInst>(CS.getInstruction());
148 std::vector<llvm::Value *> Args(CS.arg_begin(), CS.arg_end());
149 auto NewCI = llvm::CallInst::Create(NewFn, Args, "", CI);
155 NewCI->addAttribute(i+1, llvm::Attribute::ByVal);
173 virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
178 bool runOnModule(llvm::Module &M) override {
181 std::vector<llvm::Function *> FunctionsToHandle;
196 llvm::Function *NewFn = RedefineFn(OrigFn, ArgsToDeref);
198 llvm::CallSite CS(OrigFn->user_back());
213 static llvm::RegisterPass<RSX86_64CallConvPass> X("X86-64-calling-conv",
218 llvm::ModulePass *