Home | History | Annotate | Download | only in gallivm

Lines Matching defs:gallivm

109 create_pass_manager(struct gallivm_state *gallivm)
111 assert(!gallivm->passmgr);
112 assert(gallivm->target);
114 gallivm->passmgr = LLVMCreateFunctionPassManagerForModule(gallivm->module);
115 if (!gallivm->passmgr)
125 LLVMAddTargetData(gallivm->target, gallivm->passmgr);
131 td_str = LLVMCopyStringRepOfTargetData(gallivm->target);
132 LLVMSetDataLayout(gallivm->module, td_str);
141 LLVMAddScalarReplAggregatesPass(gallivm->passmgr);
142 LLVMAddLICMPass(gallivm->passmgr);
143 LLVMAddCFGSimplificationPass(gallivm->passmgr);
144 LLVMAddReassociatePass(gallivm->passmgr);
145 LLVMAddPromoteMemoryToRegisterPass(gallivm->passmgr);
146 LLVMAddConstantPropagationPass(gallivm->passmgr);
147 LLVMAddInstructionCombiningPass(gallivm->passmgr);
148 LLVMAddGVNPass(gallivm->passmgr);
154 LLVMAddPromoteMemoryToRegisterPass(gallivm->passmgr);
162 * Free gallivm object's LLVM allocations, but not any generated code
163 * nor the gallivm object itself.
166 gallivm_free_ir(struct gallivm_state *gallivm)
168 if (gallivm->passmgr) {
169 LLVMDisposePassManager(gallivm->passmgr);
172 if (gallivm->engine) {
174 LLVMDisposeExecutionEngine(gallivm->engine);
175 } else if (gallivm->module) {
176 LLVMDisposeModule(gallivm->module);
179 FREE(gallivm->module_name);
184 if (gallivm->target) {
185 LLVMDisposeTargetData(gallivm->target);
189 if (gallivm->builder)
190 LLVMDisposeBuilder(gallivm->builder);
192 /* The LLVMContext should be owned by the parent of gallivm. */
194 gallivm->engine = NULL;
195 gallivm->target = NULL;
196 gallivm->module = NULL;
197 gallivm->module_name = NULL;
198 gallivm->passmgr = NULL;
199 gallivm->context = NULL;
200 gallivm->builder = NULL;
208 gallivm_free_code(struct gallivm_state *gallivm)
210 assert(!gallivm->module);
211 assert(!gallivm->engine);
212 lp_free_generated_code(gallivm->code);
213 gallivm->code = NULL;
214 lp_free_memory_manager(gallivm->memorymgr);
215 gallivm->memorymgr = NULL;
220 init_gallivm_engine(struct gallivm_state *gallivm)
234 ret = lp_build_create_jit_compiler_for_module(&gallivm->engine,
235 &gallivm->code,
236 gallivm->module,
237 gallivm->memorymgr,
249 gallivm->target = LLVMGetExecutionEngineTargetData(gallivm->engine);
250 if (!gallivm->target)
258 LLVMTargetDataRef target = LLVMGetExecutionEngineTargetData(gallivm->engine);
262 data_layout = LLVMCopyStringRepOfTargetData(gallivm->target);
283 * Allocate gallivm LLVM objects.
287 init_gallivm_state(struct gallivm_state *gallivm, const char *name,
290 assert(!gallivm->context);
291 assert(!gallivm->module);
296 gallivm->context = context;
298 if (!gallivm->context)
301 gallivm->module_name = NULL;
304 gallivm->module_name = MALLOC(size);
305 if (gallivm->module_name) {
306 memcpy(gallivm->module_name, name, size);
310 gallivm->module = LLVMModuleCreateWithNameInContext(name,
311 gallivm->context);
312 if (!gallivm->module)
315 gallivm->builder = LLVMCreateBuilderInContext(gallivm->context);
316 if (!gallivm->builder)
319 gallivm->memorymgr = lp_get_default_memory_manager();
320 if (!gallivm->memorymgr)
328 if (!init_gallivm_engine(gallivm)) {
361 gallivm->target = LLVMCreateTargetData(layout);
362 if (!gallivm->target) {
368 if (!create_pass_manager(gallivm))
374 gallivm_free_ir(gallivm);
375 gallivm_free_code(gallivm);
500 struct gallivm_state *gallivm;
502 gallivm = CALLOC_STRUCT(gallivm_state);
503 if (gallivm) {
504 if (!init_gallivm_state(gallivm, name, context)) {
505 FREE(gallivm);
506 gallivm = NULL;
510 return gallivm;
518 gallivm_destroy(struct gallivm_state *gallivm)
520 gallivm_free_ir(gallivm);
521 gallivm_free_code(gallivm);
522 FREE(gallivm);
531 gallivm_verify_function(struct gallivm_state *gallivm,
556 gallivm_compile_module(struct gallivm_state *gallivm)
561 assert(!gallivm->compiled);
563 if (gallivm->builder) {
564 LLVMDisposeBuilder(gallivm->builder);
565 gallivm->builder = NULL;
572 LLVMInitializeFunctionPassManager(gallivm->passmgr);
573 func = LLVMGetFirstFunction(gallivm->module);
588 LLVMRunFunctionPassManager(gallivm->passmgr, func);
591 LLVMFinalizeFunctionPassManager(gallivm->passmgr);
596 assert(gallivm->module_name);
598 gallivm->module_name, time_msec);
604 assert(gallivm->module_name);
605 util_snprintf(filename, sizeof(filename), "ir_%s.bc", gallivm->module_name);
606 LLVMWriteBitcodeToFile(gallivm->module, filename);
632 LLVMSetDataLayout(gallivm->module, "");
633 assert(!gallivm->engine);
634 if (!init_gallivm_engine(gallivm)) {
638 assert(gallivm->engine);
640 ++gallivm->compiled;
643 LLVMValueRef llvm_func = LLVMGetFirstFunction(gallivm->module);
652 void *func_code = LLVMGetPointerToGlobal(gallivm->engine, llvm_func);
661 LLVMValueRef llvm_func = LLVMGetFirstFunction(gallivm->module);
665 void *func_code = LLVMGetPointerToGlobal(gallivm->engine, llvm_func);
677 gallivm_jit_function(struct gallivm_state *gallivm,
684 assert(gallivm->compiled);
685 assert(gallivm->engine);
690 code = LLVMGetPointerToGlobal(gallivm->engine, func);