mirror of
				https://github.com/c64scene-ar/llvm-6502.git
				synced 2025-11-04 05:17:07 +00:00 
			
		
		
		
	In practice this means:
  * Always using -g flag.
  * Embedding -cclib -lstdc++ into the corresponding cma/cmxa file.
    This also moves -lstdc++ in a single place.
  * Using caml_named_value instead of a homegrown mechanism.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@220843 91177308-0d34-0410-b5e6-96231b3b80d8
		
	
		
			
				
	
	
		
			112 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			112 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*===-- passmgr_builder_ocaml.c - LLVM OCaml Glue ---------------*- C++ -*-===*\
 | 
						|
|*                                                                            *|
 | 
						|
|*                     The LLVM Compiler Infrastructure                       *|
 | 
						|
|*                                                                            *|
 | 
						|
|* This file is distributed under the University of Illinois Open Source      *|
 | 
						|
|* License. See LICENSE.TXT for details.                                      *|
 | 
						|
|*                                                                            *|
 | 
						|
|*===----------------------------------------------------------------------===*|
 | 
						|
|*                                                                            *|
 | 
						|
|* This file glues LLVM's OCaml interface to its C interface. These functions *|
 | 
						|
|* are by and large transparent wrappers to the corresponding C functions.    *|
 | 
						|
|*                                                                            *|
 | 
						|
|* Note that these functions intentionally take liberties with the CAMLparamX *|
 | 
						|
|* macros, since most of the parameters are not GC heap objects.              *|
 | 
						|
|*                                                                            *|
 | 
						|
\*===----------------------------------------------------------------------===*/
 | 
						|
 | 
						|
#include "llvm-c/Transforms/PassManagerBuilder.h"
 | 
						|
#include "caml/mlvalues.h"
 | 
						|
#include "caml/custom.h"
 | 
						|
#include "caml/misc.h"
 | 
						|
 | 
						|
#define PMBuilder_val(v)  (*(LLVMPassManagerBuilderRef *)(Data_custom_val(v)))
 | 
						|
 | 
						|
static void llvm_finalize_pmbuilder(value PMB) {
 | 
						|
  LLVMPassManagerBuilderDispose(PMBuilder_val(PMB));
 | 
						|
}
 | 
						|
 | 
						|
static struct custom_operations pmbuilder_ops = {
 | 
						|
  (char *) "Llvm_passmgr_builder.t",
 | 
						|
  llvm_finalize_pmbuilder,
 | 
						|
  custom_compare_default,
 | 
						|
  custom_hash_default,
 | 
						|
  custom_serialize_default,
 | 
						|
  custom_deserialize_default,
 | 
						|
  custom_compare_ext_default
 | 
						|
};
 | 
						|
 | 
						|
static value alloc_pmbuilder(LLVMPassManagerBuilderRef Ref) {
 | 
						|
  value Val = alloc_custom(&pmbuilder_ops,
 | 
						|
                           sizeof(LLVMPassManagerBuilderRef), 0, 1);
 | 
						|
  PMBuilder_val(Val) = Ref;
 | 
						|
  return Val;
 | 
						|
}
 | 
						|
 | 
						|
/* t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_create(value Unit) {
 | 
						|
  return alloc_pmbuilder(LLVMPassManagerBuilderCreate());
 | 
						|
}
 | 
						|
 | 
						|
/* int -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_set_opt_level(value OptLevel, value PMB) {
 | 
						|
  LLVMPassManagerBuilderSetOptLevel(PMBuilder_val(PMB), Int_val(OptLevel));
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* int -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_set_size_level(value SizeLevel, value PMB) {
 | 
						|
  LLVMPassManagerBuilderSetSizeLevel(PMBuilder_val(PMB), Int_val(SizeLevel));
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* int -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_use_inliner_with_threshold(
 | 
						|
                      value Threshold, value PMB) {
 | 
						|
  LLVMPassManagerBuilderSetOptLevel(PMBuilder_val(PMB), Int_val(Threshold));
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* bool -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_set_disable_unit_at_a_time(
 | 
						|
                      value DisableUnitAtATime, value PMB) {
 | 
						|
  LLVMPassManagerBuilderSetDisableUnitAtATime(
 | 
						|
                      PMBuilder_val(PMB), Bool_val(DisableUnitAtATime));
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* bool -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_set_disable_unroll_loops(
 | 
						|
                      value DisableUnroll, value PMB) {
 | 
						|
  LLVMPassManagerBuilderSetDisableUnrollLoops(
 | 
						|
                      PMBuilder_val(PMB), Bool_val(DisableUnroll));
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* [ `Function ] Llvm.PassManager.t -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_populate_function_pass_manager(
 | 
						|
                      LLVMPassManagerRef PM, value PMB) {
 | 
						|
  LLVMPassManagerBuilderPopulateFunctionPassManager(
 | 
						|
                      PMBuilder_val(PMB), PM);
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* [ `Module ] Llvm.PassManager.t -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_populate_module_pass_manager(
 | 
						|
                      LLVMPassManagerRef PM, value PMB) {
 | 
						|
  LLVMPassManagerBuilderPopulateModulePassManager(
 | 
						|
                      PMBuilder_val(PMB), PM);
 | 
						|
  return Val_unit;
 | 
						|
}
 | 
						|
 | 
						|
/* [ `Module ] Llvm.PassManager.t ->
 | 
						|
   internalize:bool -> run_inliner:bool -> t -> unit */
 | 
						|
CAMLprim value llvm_pmbuilder_populate_lto_pass_manager(
 | 
						|
                      LLVMPassManagerRef PM, value Internalize, value RunInliner,
 | 
						|
                      value PMB) {
 | 
						|
  LLVMPassManagerBuilderPopulateLTOPassManager(
 | 
						|
                      PMBuilder_val(PMB), PM,
 | 
						|
                      Bool_val(Internalize), Bool_val(RunInliner));
 | 
						|
  return Val_unit;
 | 
						|
}
 |