gallium: remove pipe_surface::usage
[mesa.git] / src / gallium / drivers / r600 / llvm_wrapper.cpp
1 #include <llvm/ADT/OwningPtr.h>
2 #include <llvm/ADT/StringRef.h>
3 #include <llvm/LLVMContext.h>
4 #include <llvm/PassManager.h>
5 #include <llvm/Support/IRReader.h>
6 #include <llvm/Support/MemoryBuffer.h>
7 #include <llvm/Support/SourceMgr.h>
8 #include <llvm/Transforms/IPO.h>
9
10 #include "llvm_wrapper.h"
11
12
13 extern "C" LLVMModuleRef llvm_parse_bitcode(const unsigned char * bitcode, unsigned bitcode_len)
14 {
15 llvm::OwningPtr<llvm::Module> M;
16 llvm::StringRef str((const char*)bitcode, bitcode_len);
17 llvm::MemoryBuffer* buffer = llvm::MemoryBuffer::getMemBufferCopy(str);
18 llvm::SMDiagnostic Err;
19 M.reset(llvm::ParseIR(buffer, Err, llvm::getGlobalContext()));
20 return wrap(M.take());
21 }
22
23 extern "C" void llvm_strip_unused_kernels(LLVMModuleRef mod, const char *kernel_name)
24 {
25 llvm::Module *M = llvm::unwrap(mod);
26 std::vector<const char *> export_list;
27 export_list.push_back(kernel_name);
28 llvm::PassManager PM;
29 PM.add(llvm::createInternalizePass(export_list));
30 PM.add(llvm::createGlobalDCEPass());
31 PM.run(*M);
32 }
33
34 extern "C" unsigned llvm_get_num_kernels(const unsigned char *bitcode,
35 unsigned bitcode_len)
36 {
37 LLVMModuleRef mod = llvm_parse_bitcode(bitcode, bitcode_len);
38 llvm::Module *M = llvm::unwrap(mod);
39 const llvm::NamedMDNode *kernel_node
40 = M->getNamedMetadata("opencl.kernels");
41 unsigned kernel_count = kernel_node->getNumOperands();
42 delete M;
43 return kernel_count;
44 }
45
46 extern "C" LLVMModuleRef llvm_get_kernel_module(unsigned index,
47 const unsigned char *bitcode, unsigned bitcode_len)
48 {
49 LLVMModuleRef mod = llvm_parse_bitcode(bitcode, bitcode_len);
50 llvm::Module *M = llvm::unwrap(mod);
51 const llvm::NamedMDNode *kernel_node =
52 M->getNamedMetadata("opencl.kernels");
53 const char* kernel_name = kernel_node->getOperand(index)->
54 getOperand(0)->getName().data();
55 llvm_strip_unused_kernels(mod, kernel_name);
56 return mod;
57 }