Lines Matching refs:llvm
37 class RSX86TranslateGEPPass : public llvm::FunctionPass {
40 llvm::LLVMContext *Context;
41 const llvm::DataLayout DL;
44 bool GEPIndexesStructType(const llvm::GetElementPtrInst *GEP) { in GEPIndexesStructType()
45 for (llvm::gep_type_iterator GTI = gep_type_begin(GEP), in GEPIndexesStructType()
48 if (llvm::dyn_cast<llvm::StructType>(*GTI)) { in GEPIndexesStructType()
56 llvm::Value *incrementOffset(llvm::Value *accum, llvm::Value *incr, in incrementOffset()
57 llvm::Instruction *InsertBefore) { in incrementOffset()
60 return llvm::BinaryOperator::CreateAdd(accum, incr, "", InsertBefore); in incrementOffset()
69 llvm::Value *computeGEPOffset(llvm::GetElementPtrInst *GEP) { in computeGEPOffset()
70 llvm::Value *Offset = nullptr; in computeGEPOffset()
72 for (llvm::gep_type_iterator GTI = gep_type_begin(GEP), in computeGEPOffset()
75 if (llvm::StructType *STy = llvm::dyn_cast<llvm::StructType>(*GTI)) { in computeGEPOffset()
76 llvm::ConstantInt *OpC = llvm::dyn_cast<llvm::ConstantInt>(GTI.getOperand()); in computeGEPOffset()
83 const llvm::StructLayout *SL = DL.getStructLayout(STy); in computeGEPOffset()
85 llvm::Value *Incr = llvm::ConstantInt::get( in computeGEPOffset()
86 llvm::Type::getInt32Ty(*Context), EltOffset); in computeGEPOffset()
90 llvm::Value *EltSize = llvm::ConstantInt::get( in computeGEPOffset()
91 llvm::Type::getInt32Ty(*Context), in computeGEPOffset()
93 llvm::Value *Incr = llvm::BinaryOperator::CreateMul( in computeGEPOffset()
103 void translateGEP(llvm::GetElementPtrInst *GEP) { in translateGEP()
105 llvm::CastInst *Int8Ptr = llvm::CastInst::CreatePointerCast( in translateGEP()
107 llvm::Type::getInt8PtrTy(*Context), in translateGEP()
110 llvm::Value *Indices[1] = {computeGEPOffset(GEP)}; in translateGEP()
113 llvm::GetElementPtrInst *Int8PtrGEP = llvm::GetElementPtrInst::Create( in translateGEP()
114 llvm::Type::getInt8Ty(*Context), Int8Ptr, llvm::makeArrayRef(Indices), in translateGEP()
119 llvm::CastInst *OutCast = llvm::CastInst::CreatePointerCast( in translateGEP()
130 virtual void getAnalysisUsage(llvm::AnalysisUsage &AU) const override { in getAnalysisUsage()
136 virtual bool runOnFunction(llvm::Function &F) override { in runOnFunction()
143 std::vector<llvm::GetElementPtrInst *> GEPsToHandle; in runOnFunction()
147 if (auto *GEP = llvm::dyn_cast<llvm::GetElementPtrInst>(&I)) { in runOnFunction()
176 llvm::FunctionPass *