Lines Matching refs:llvm

23 #include <llvm/IR/Constant.h>
24 #include <llvm/IR/Constants.h>
25 #include <llvm/IR/Type.h>
26 #include <llvm/IR/Module.h>
27 #include <llvm/IR/Function.h>
28 #include <llvm/Pass.h>
66 class RSGlobalInfoPass: public llvm::ModulePass {
74 static uint32_t getEncodedProperties(const llvm::GlobalVariable &GV) {
90 if (GV.getLinkage() == llvm::GlobalValue::InternalLinkage) {
105 void getAnalysisUsage(llvm::AnalysisUsage &AU) const override {
110 bool runOnModule(llvm::Module &M) override {
111 std::vector<llvm::Constant *> GVAddresses;
112 std::vector<llvm::Constant *> GVNames;
118 const llvm::DataLayout &DL = M.getDataLayout();
126 llvm::Type *VoidPtrTy = llvm::Type::getInt8PtrTy(M.getContext());
129 llvm::Type *Int32Ty = llvm::Type::getInt32Ty(M.getContext());
132 llvm::Type *SizeTy = llvm::Type::getIntNTy(M.getContext(),
142 if (GV.getName().startswith("llvm.")) {
148 GVAddresses.push_back(llvm::ConstantExpr::getBitCast(&GV, VoidPtrTy));
169 llvm::Constant *C =
170 llvm::ConstantDataArray::getString(M.getContext(), GVN);
173 llvm::Value *V = M.getOrInsertGlobal(VarName.str(), C->getType());
174 llvm::GlobalVariable *VarAsStr = llvm::dyn_cast<llvm::GlobalVariable>(V);
177 VarAsStr->setLinkage(llvm::GlobalValue::PrivateLinkage);
178 VarAsStr->setUnnamedAddr(llvm::GlobalValue::UnnamedAddr::Global);
181 GVNames.push_back(llvm::ConstantExpr::getBitCast(VarAsStr, VoidPtrTy));
197 llvm::ArrayType *VoidPtrArrayTy = llvm::ArrayType::get(VoidPtrTy,
200 llvm::ArrayType *SizeArrayTy = llvm::ArrayType::get(SizeTy, NumGlobals);
203 llvm::ArrayType *Int32ArrayTy = llvm::ArrayType::get(Int32Ty, NumGlobals);
206 llvm::Value *V = M.getOrInsertGlobal(kRsGlobalEntries, Int32Ty);
207 llvm::GlobalVariable *GlobalEntries =
208 llvm::dyn_cast<llvm::GlobalVariable>(V);
209 llvm::Constant *GlobalEntriesInit =
210 llvm::ConstantInt::get(Int32Ty, NumGlobals);
216 llvm::GlobalVariable *GlobalNames =
217 llvm::dyn_cast<llvm::GlobalVariable>(V);
218 llvm::Constant *GlobalNamesInit =
219 llvm::ConstantArray::get(VoidPtrArrayTy, GVNames);
225 llvm::GlobalVariable *GlobalAddresses =
226 llvm::dyn_cast<llvm::GlobalVariable>(V);
227 llvm::Constant *GlobalAddressesInit =
228 llvm::ConstantArray::get(VoidPtrArrayTy, GVAddresses);
235 llvm::GlobalVariable *GlobalSizes =
236 llvm::dyn_cast<llvm::GlobalVariable>(V);
237 llvm::Constant *GlobalSizesInit;
239 GlobalSizesInit = llvm::ConstantDataArray::get(M.getContext(), GVSizes32);
241 GlobalSizesInit = llvm::ConstantDataArray::get(M.getContext(), GVSizes64);
248 llvm::GlobalVariable *GlobalProperties =
249 llvm::dyn_cast<llvm::GlobalVariable>(V);
250 llvm::Constant *GlobalPropertiesInit =
251 llvm::ConstantDataArray::get(M.getContext(), GVProperties);
272 static llvm::RegisterPass<RSGlobalInfoPass> X("embed-rs-global-info",
277 llvm::ModulePass * createRSGlobalInfoPass(bool pSkipConstants) {