Add support for global aliases to ocaml.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97413 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Erick Tryzelaar 2010-02-28 20:44:58 +00:00
parent ce89b4e66f
commit 6ba5c56cf5
4 changed files with 29 additions and 0 deletions

View File

@ -444,6 +444,10 @@ let rec fold_right_global_range f i e init =
let fold_right_globals f m init =
fold_right_global_range f (global_end m) (At_start m) init
(*--... Operations on aliases ..............................................--*)
external add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
= "llvm_add_alias"
(*--... Operations on functions ............................................--*)
external declare_function : string -> lltype -> llmodule -> llvalue
= "llvm_declare_function"

View File

@ -1140,6 +1140,15 @@ external is_thread_local : llvalue -> bool = "llvm_is_thread_local"
external set_thread_local : bool -> llvalue -> unit = "llvm_set_thread_local"
(** {7 Operations on aliases} *)
(** [add_alias m t a n] inserts an alias in the module [m] with the type [t] and
the aliasee [a] with the name [n].
See the constructor for [llvm::GlobalAlias]. *)
external add_alias : llmodule -> lltype -> llvalue -> string -> llvalue
= "llvm_add_alias"
(** {7 Operations on functions} *)
(** [declare_function name ty m] returns a new function of type [ty] and

View File

@ -807,6 +807,13 @@ CAMLprim value llvm_set_global_constant(value Flag, LLVMValueRef GlobalVar) {
return Val_unit;
}
/*--... Operations on aliases ..............................................--*/
CAMLprim LLVMValueRef llvm_add_alias(LLVMModuleRef M, LLVMTypeRef Ty,
LLVMValueRef Aliasee, value Name) {
return LLVMAddAlias(M, Ty, Aliasee, String_val(Name));
}
/*--... Operations on functions ............................................--*/
DEFINE_ITERATORS(function, Function, LLVMModuleRef, LLVMValueRef,

View File

@ -606,6 +606,14 @@ let test_global_variables () =
dispose_module m
end
(*===-- Aliases -----------------------------------------------------------===*)
let test_aliases () =
(* RUN: grep {@alias = alias i32\\* @aliasee} < %t.ll
*)
let v = declare_global i32_type "aliasee" m in
ignore (add_alias m (pointer_type i32_type) v "alias")
(*===-- Functions ---------------------------------------------------------===*)
@ -1265,6 +1273,7 @@ let _ =
suite "constants" test_constants;
suite "global values" test_global_values;
suite "global variables" test_global_variables;
suite "aliases" test_aliases;
suite "functions" test_functions;
suite "params" test_params;
suite "basic blocks" test_basic_blocks;