Target.cpp revision 249423
1193323Sed//===-- Target.cpp --------------------------------------------------------===// 2193323Sed// 3193323Sed// The LLVM Compiler Infrastructure 4193323Sed// 5193323Sed// This file is distributed under the University of Illinois Open Source 6193323Sed// License. See LICENSE.TXT for details. 7193323Sed// 8193323Sed//===----------------------------------------------------------------------===// 9193323Sed// 10218893Sdim// This file implements the common infrastructure (including C bindings) for 11218893Sdim// libLLVMTarget.a, which implements target information. 12193323Sed// 13193323Sed//===----------------------------------------------------------------------===// 14193323Sed 15193323Sed#include "llvm-c/Target.h" 16218893Sdim#include "llvm-c/Initialization.h" 17249423Sdim#include "llvm/IR/DataLayout.h" 18249423Sdim#include "llvm/IR/LLVMContext.h" 19218893Sdim#include "llvm/InitializePasses.h" 20193323Sed#include "llvm/PassManager.h" 21226633Sdim#include "llvm/Target/TargetLibraryInfo.h" 22193323Sed#include <cstring> 23193323Sed 24193323Sedusing namespace llvm; 25193323Sed 26218893Sdimvoid llvm::initializeTarget(PassRegistry &Registry) { 27243830Sdim initializeDataLayoutPass(Registry); 28218893Sdim initializeTargetLibraryInfoPass(Registry); 29218893Sdim} 30218893Sdim 31218893Sdimvoid LLVMInitializeTarget(LLVMPassRegistryRef R) { 32218893Sdim initializeTarget(*unwrap(R)); 33218893Sdim} 34218893Sdim 35193323SedLLVMTargetDataRef LLVMCreateTargetData(const char *StringRep) { 36243830Sdim return wrap(new DataLayout(StringRep)); 37193323Sed} 38193323Sed 39193323Sedvoid LLVMAddTargetData(LLVMTargetDataRef TD, LLVMPassManagerRef PM) { 40243830Sdim unwrap(PM)->add(new DataLayout(*unwrap(TD))); 41193323Sed} 42193323Sed 43226633Sdimvoid LLVMAddTargetLibraryInfo(LLVMTargetLibraryInfoRef TLI, 44226633Sdim LLVMPassManagerRef PM) { 45226633Sdim unwrap(PM)->add(new TargetLibraryInfo(*unwrap(TLI))); 46226633Sdim} 47226633Sdim 48193323Sedchar *LLVMCopyStringRepOfTargetData(LLVMTargetDataRef TD) { 49193323Sed std::string StringRep = unwrap(TD)->getStringRepresentation(); 50193323Sed return strdup(StringRep.c_str()); 51193323Sed} 52193323Sed 53193323SedLLVMByteOrdering LLVMByteOrder(LLVMTargetDataRef TD) { 54202375Srdivacky return unwrap(TD)->isLittleEndian() ? LLVMLittleEndian : LLVMBigEndian; 55193323Sed} 56193323Sed 57193323Sedunsigned LLVMPointerSize(LLVMTargetDataRef TD) { 58243830Sdim return unwrap(TD)->getPointerSize(0); 59193323Sed} 60193323Sed 61243830Sdimunsigned LLVMPointerSizeForAS(LLVMTargetDataRef TD, unsigned AS) { 62243830Sdim return unwrap(TD)->getPointerSize(AS); 63243830Sdim} 64243830Sdim 65193323SedLLVMTypeRef LLVMIntPtrType(LLVMTargetDataRef TD) { 66198090Srdivacky return wrap(unwrap(TD)->getIntPtrType(getGlobalContext())); 67193323Sed} 68193323Sed 69243830SdimLLVMTypeRef LLVMIntPtrTypeForAS(LLVMTargetDataRef TD, unsigned AS) { 70243830Sdim return wrap(unwrap(TD)->getIntPtrType(getGlobalContext(), AS)); 71243830Sdim} 72243830Sdim 73193323Sedunsigned long long LLVMSizeOfTypeInBits(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 74193323Sed return unwrap(TD)->getTypeSizeInBits(unwrap(Ty)); 75193323Sed} 76193323Sed 77193323Sedunsigned long long LLVMStoreSizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 78193323Sed return unwrap(TD)->getTypeStoreSize(unwrap(Ty)); 79193323Sed} 80193323Sed 81193323Sedunsigned long long LLVMABISizeOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 82193323Sed return unwrap(TD)->getTypeAllocSize(unwrap(Ty)); 83193323Sed} 84193323Sed 85193323Sedunsigned LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 86193323Sed return unwrap(TD)->getABITypeAlignment(unwrap(Ty)); 87193323Sed} 88193323Sed 89193323Sedunsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 90193323Sed return unwrap(TD)->getCallFrameTypeAlignment(unwrap(Ty)); 91193323Sed} 92193323Sed 93193323Sedunsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) { 94193323Sed return unwrap(TD)->getPrefTypeAlignment(unwrap(Ty)); 95193323Sed} 96193323Sed 97193323Sedunsigned LLVMPreferredAlignmentOfGlobal(LLVMTargetDataRef TD, 98193323Sed LLVMValueRef GlobalVar) { 99193323Sed return unwrap(TD)->getPreferredAlignment(unwrap<GlobalVariable>(GlobalVar)); 100193323Sed} 101193323Sed 102193323Sedunsigned LLVMElementAtOffset(LLVMTargetDataRef TD, LLVMTypeRef StructTy, 103193323Sed unsigned long long Offset) { 104226633Sdim StructType *STy = unwrap<StructType>(StructTy); 105193323Sed return unwrap(TD)->getStructLayout(STy)->getElementContainingOffset(Offset); 106193323Sed} 107193323Sed 108193323Sedunsigned long long LLVMOffsetOfElement(LLVMTargetDataRef TD, LLVMTypeRef StructTy, 109193323Sed unsigned Element) { 110226633Sdim StructType *STy = unwrap<StructType>(StructTy); 111193323Sed return unwrap(TD)->getStructLayout(STy)->getElementOffset(Element); 112193323Sed} 113193323Sed 114193323Sedvoid LLVMDisposeTargetData(LLVMTargetDataRef TD) { 115193323Sed delete unwrap(TD); 116193323Sed} 117