Home | History | Annotate | Download | only in llvm

Lines Matching full:llvm

27 #include <llvm/IR/Constants.h>
28 #include <llvm/IR/DerivedTypes.h>
29 #include <llvm/IR/IRBuilder.h>
30 #include <llvm/IR/LLVMContext.h>
31 #include <llvm/IR/Type.h>
32 #include <llvm/Support/NoFolder.h>
38 namespace llvm {
40 class InserterWithDexOffset : public ::llvm::IRBuilderDefaultInserter<true> {
44 void InsertHelper(::llvm::Instruction *I, const ::llvm::Twine &Name,
45 ::llvm::BasicBlock *BB,
46 ::llvm::BasicBlock::iterator InsertPt) const {
47 ::llvm::IRBuilderDefaultInserter<true>::InsertHelper(I, Name, BB, InsertPt);
53 void SetDexOffset(::llvm::MDNode* node) {
57 ::llvm::MDNode* node_;
60 typedef ::llvm::IRBuilder<true, ::llvm::ConstantFolder, InserterWithDexOffset> LLVMIRBuilder;
71 IRBuilder(::llvm::LLVMContext& context, ::llvm::Module& module,
79 ::llvm::LoadInst* CreateLoad(::llvm::Value* ptr, ::llvm::MDNode* tbaa_info) {
80 ::llvm::LoadInst* inst = LLVMIRBuilder::CreateLoad(ptr);
81 inst->setMetadata(::llvm::LLVMContext::MD_tbaa, tbaa_info);
85 ::llvm::StoreInst* CreateStore(::llvm::Value* val, ::llvm::Value* ptr, ::llvm::MDNode* tbaa_info) {
86 ::llvm::StoreInst* inst = LLVMIRBuilder::CreateStore(val, ptr);
87 inst->setMetadata(::llvm::LLVMContext::MD_tbaa, tbaa_info);
91 ::llvm::AtomicCmpXchgInst*
92 CreateAtomicCmpXchgInst(::llvm::Value* ptr, ::llvm::Value* cmp, ::llvm::Value* val,
93 ::llvm::MDNode* tbaa_info) {
94 ::llvm::AtomicCmpXchgInst* inst =
95 LLVMIRBuilder::CreateAtomicCmpXchg(ptr, cmp, val, ::llvm::Acquire);
96 inst->setMetadata(::llvm::LLVMContext::MD_tbaa, tbaa_info);
106 CreateFence(::llvm::SequentiallyConsistent);
115 ::llvm::LoadInst* CreateLoad(::llvm::Value* ptr, TBAASpecialType special_ty) {
119 ::llvm::StoreInst* CreateStore(::llvm::Value* val, ::llvm::Value* ptr, TBAASpecialType special_ty) {
124 ::llvm::LoadInst* CreateLoad(::llvm::Value* ptr, TBAASpecialType special_ty, JType j_ty) {
128 ::llvm::StoreInst* CreateStore(::llvm::Value* val, ::llvm::Value* ptr,
134 ::llvm::LoadInst* LoadFromObjectOffset(::llvm::Value* object_addr,
136 ::llvm::Type* type,
141 void StoreToObjectOffset(::llvm::Value* object_addr,
143 ::llvm::Value* new_value,
149 ::llvm::LoadInst* LoadFromObjectOffset(::llvm::Value* object_addr,
151 ::llvm::Type* type,
156 void StoreToObjectOffset(::llvm::Value* object_addr,
158 ::llvm::Value* new_value,
164 ::llvm::AtomicCmpXchgInst*
165 CompareExchangeObjectOffset(::llvm::Value* object_addr,
167 ::llvm::Value* cmp_value,
168 ::llvm::Value* new_value,
175 void SetTBAA(::llvm::Instruction* inst, TBAASpecialType special_ty) {
176 inst->setMetadata(::llvm::LLVMContext::MD_tbaa, mdb_.GetTBAASpecialType(special_ty));
186 ::llvm::BranchInst* CreateCondBr(::llvm::Value *cond,
187 ::llvm::BasicBlock* true_bb,
188 ::llvm::BasicBlock* false_bb,
190 ::llvm::BranchInst* branch_inst = CreateCondBr(cond, true_bb, false_bb);
193 branch_inst->setMetadata(::llvm::LLVMContext::MD_prof, mdb_.GetBranchWeights(expect));
203 ::llvm::IntegerType* getPtrEquivIntTy() {
211 ::llvm::ConstantInt* getSizeOfPtrEquivIntValue() {
215 ::llvm::ConstantInt* getPtrEquivInt(int64_t i) {
216 return ::llvm::ConstantInt::get(getPtrEquivIntTy(), i);
219 ::llvm::Value* CreatePtrDisp(::llvm::Value* base,
220 ::llvm::Value* offset,
221 ::llvm::PointerType* ret_ty) {
222 ::llvm::Value* base_int = CreatePtrToInt(base, getPtrEquivIntTy());
223 ::llvm::Value* result_int = CreateAdd(base_int, offset);
224 ::llvm::Value* result = CreateIntToPtr(result_int, ret_ty);
229 ::llvm::Value* CreatePtrDisp(::llvm::Value* base,
230 ::llvm::Value* bs,
231 ::llvm::Value* count,
232 ::llvm::Value* offset,
233 ::llvm::PointerType* ret_ty) {
234 ::llvm::Value* block_offset = CreateMul(bs, count);
235 ::llvm::Value* total_offset = CreateAdd(block_offset, offset);
240 ::llvm::LoadInst* LoadFromObjectOffset(::llvm::Value* object_addr,
242 ::llvm::Type* type,
243 ::llvm::MDNode* tbaa_info) {
244 // Convert offset to ::llvm::value
245 ::llvm::Value* llvm_offset = getPtrEquivInt(offset);
247 ::llvm::Value* value_addr = CreatePtrDisp(object_addr, llvm_offset, type->getPointerTo());
252 void StoreToObjectOffset(::llvm::Value* object_addr,
254 ::llvm::Value* new_value,
255 ::llvm::MDNode* tbaa_info) {
256 // Convert offset to ::llvm::value
257 ::llvm::Value* llvm_offset = getPtrEquivInt(offset);
259 ::llvm::Value* value_addr = CreatePtrDisp(object_addr,
266 ::llvm::AtomicCmpXchgInst* CompareExchangeObjectOffset(::llvm::Value* object_addr,
268 ::llvm::Value* cmp_value,
269 ::llvm::Value* new_value,
270 ::llvm::MDNode* tbaa_info) {
271 // Convert offset to ::llvm::value
272 ::llvm::Value* llvm_offset = getPtrEquivInt(offset);
274 ::llvm::Value* value_addr = CreatePtrDisp(object_addr,
291 ::llvm::Function* GetRuntime(runtime_support::RuntimeId rt) {
309 ::llvm::Type* getJType(char shorty_jty) {
313 ::llvm::Type* getJType(JType jty);
315 ::llvm::Type* getJVoidTy() {
319 ::llvm::IntegerType* getJBooleanTy() {
323 ::llvm::IntegerType* getJByteTy() {
327 ::llvm::IntegerType* getJCharTy() {
331 ::llvm::IntegerType* getJShortTy() {
335 ::llvm::IntegerType* getJIntTy() {
339 ::llvm::IntegerType* getJLongTy() {
343 ::llvm::Type* getJFloatTy() {
347 ::llvm::Type* getJDoubleTy() {
351 ::llvm::PointerType* getJObjectTy() {
355 ::llvm::PointerType* getJMethodTy() {
359 ::llvm::PointerType* getJThreadTy() {
363 ::llvm::Type* getArtFrameTy() {
367 ::llvm::PointerType* getJEnvTy() {
371 ::llvm::Type* getJValueTy() {
373 // short, int, long, float, double, Object. However, LLVM itself does
379 ::llvm::StructType* getShadowFrameTy(uint32_t vreg_size);
386 ::llvm::ConstantInt* getJBoolean(bool is_true) {
390 ::llvm::ConstantInt* getJByte(int8_t i) {
391 return ::llvm::ConstantInt::getSigned(getJByteTy(), i);
394 ::llvm::ConstantInt* getJChar(int16_t i) {
395 return ::llvm::ConstantInt::getSigned(getJCharTy(), i);
398 ::llvm::ConstantInt* getJShort(int16_t i) {
399 return ::llvm::ConstantInt::getSigned(getJShortTy(), i);
402 ::llvm::ConstantInt* getJInt(int32_t i) {
403 return ::llvm::ConstantInt::getSigned(getJIntTy(), i);
406 ::llvm::ConstantInt* getJLong(int64_t i) {
407 return ::llvm::ConstantInt::getSigned(getJLongTy(), i);
410 ::llvm::Constant* getJFloat(float f) {
411 return ::llvm::ConstantFP::get(getJFloatTy(), f);
414 ::llvm::Constant* getJDouble(double d) {
415 return ::llvm::ConstantFP::get(getJDoubleTy(), d);
418 ::llvm::ConstantPointerNull* getJNull() {
419 return ::llvm::ConstantPointerNull::get(getJObjectTy());
422 ::llvm::Constant* getJZero(char shorty_jty) {
426 ::llvm::Constant* getJZero(JType jty) {
467 ::llvm::Module* module_;
471 ::llvm::PointerType* java_object_type_;
472 ::llvm::PointerType* java_method_type_;
473 ::llvm::PointerType* java_thread_type_;
475 ::llvm::PointerType* jenv_type_;
477 ::llvm::StructType* art_frame_type_;
485 } // namespace llvm