Lines Matching refs:llvm

24 #include <llvm/IR/Function.h>
25 #include <llvm/IR/Instructions.h>
26 #include <llvm/IR/Module.h>
27 #include <llvm/Pass.h>
28 #include <llvm/IR/GetElementPtrTypeIterator.h>
37 class RSX86TranslateGEPPass : public llvm::FunctionPass {
40 llvm::LLVMContext *Context;
41 const llvm::DataLayout DL;
44 bool GEPIndexesStructType(const llvm::GetElementPtrInst *GEP) {
45 for (llvm::gep_type_iterator GTI = gep_type_begin(GEP),
48 if (llvm::dyn_cast<llvm::StructType>(*GTI)) {
55 // Helper method to add two llvm::Value parameters
56 llvm::Value *incrementOffset(llvm::Value *accum, llvm::Value *incr,
57 llvm::Instruction *InsertBefore) {
60 return llvm::BinaryOperator::CreateAdd(accum, incr, "", InsertBefore);
64 // Based on visitGetElementPtrInst in llvm/lib/Transforms/Scalar/SROA.cpp.
69 llvm::Value *computeGEPOffset(llvm::GetElementPtrInst *GEP) {
70 llvm::Value *Offset = nullptr;
72 for (llvm::gep_type_iterator GTI = gep_type_begin(GEP),
75 if (llvm::StructType *STy = llvm::dyn_cast<llvm::StructType>(*GTI)) {
76 llvm::ConstantInt *OpC = llvm::dyn_cast<llvm::ConstantInt>(GTI.getOperand());
83 const llvm::StructLayout *SL = DL.getStructLayout(STy);
85 llvm::Value *Incr = llvm::ConstantInt::get(
86 llvm::Type::getInt32Ty(*Context), EltOffset);
90 llvm::Value *EltSize = llvm::ConstantInt::get(
91 llvm::Type::getInt32Ty(*Context),
93 llvm::Value *Incr = llvm::BinaryOperator::CreateMul(
103 void translateGEP(llvm::GetElementPtrInst *GEP) {
105 llvm::CastInst *Int8Ptr = llvm::CastInst::CreatePointerCast(
107 llvm::Type::getInt8PtrTy(*Context),
110 llvm::Value *Indices[1] = {computeGEPOffset(GEP)};
113 llvm::GetElementPtrInst *Int8PtrGEP = llvm::GetElementPtrInst::Create(
114 llvm::Type::getInt8Ty(*Context), Int8Ptr, llvm::makeArrayRef(Indices),
119 llvm::CastInst *OutCast = llvm::CastInst::CreatePointerCast(
130 virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
136 virtual bool runOnFunction(llvm::Function &F) override {
143 std::vector<llvm::GetElementPtrInst *> GEPsToHandle;
147 if (auto *GEP = llvm::dyn_cast<llvm::GetElementPtrInst>(&I)) {
176 llvm::FunctionPass *