mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Add support getting the operands of a User to ocaml.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97414 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6ba5c56cf5
commit
b65c5f2ec3
@ -242,6 +242,9 @@ external dump_value : llvalue -> unit = "llvm_dump_value"
|
||||
external replace_all_uses_with : llvalue -> llvalue -> unit
|
||||
= "LLVMReplaceAllUsesWith"
|
||||
|
||||
(*--... Operations on users ................................................--*)
|
||||
external operand : llvalue -> int -> llvalue = "llvm_operand"
|
||||
|
||||
(*--... Operations on constants of (mostly) any type .......................--*)
|
||||
external is_constant : llvalue -> bool = "llvm_is_constant"
|
||||
external const_null : lltype -> llvalue = "LLVMConstNull"
|
||||
|
@ -513,6 +513,13 @@ external replace_all_uses_with : llvalue -> llvalue -> unit
|
||||
= "LLVMReplaceAllUsesWith"
|
||||
|
||||
|
||||
(* {6 Users} *)
|
||||
|
||||
(** [operand v i] returns the operand at index [i] for the value [v]. See the
|
||||
method [llvm::User::getOperand]. *)
|
||||
external operand : llvalue -> int -> llvalue = "llvm_operand"
|
||||
|
||||
|
||||
(** {7 Operations on constants of (mostly) any type} *)
|
||||
|
||||
(** [is_constant v] returns [true] if the value [v] is a constant, [false]
|
||||
|
@ -440,6 +440,13 @@ CAMLprim value llvm_dump_value(LLVMValueRef Val) {
|
||||
return Val_unit;
|
||||
}
|
||||
|
||||
/*--... Operations on users ................................................--*/
|
||||
|
||||
/* llvalue -> int -> llvalue */
|
||||
CAMLprim LLVMValueRef llvm_operand(LLVMValueRef V, value I) {
|
||||
return LLVMGetOperand(V, Int_val(I));
|
||||
}
|
||||
|
||||
/*--... Operations on constants of (mostly) any type .......................--*/
|
||||
|
||||
/* llvalue -> bool */
|
||||
|
@ -606,6 +606,24 @@ let test_global_variables () =
|
||||
dispose_module m
|
||||
end
|
||||
|
||||
|
||||
(*===-- Users -------------------------------------------------------------===*)
|
||||
|
||||
let test_users () =
|
||||
let ty = function_type i32_type [| i32_type; i32_type |] in
|
||||
let fn = define_function "user_function" ty m in
|
||||
let b = builder_at_end context (entry_block fn) in
|
||||
|
||||
let p1 = param fn 0 in
|
||||
let p2 = param fn 1 in
|
||||
let i = build_add p1 p2 "sum" b in
|
||||
|
||||
insist ((operand i 0) = p1);
|
||||
insist ((operand i 1) = p2);
|
||||
|
||||
ignore (build_unreachable b)
|
||||
|
||||
|
||||
(*===-- Aliases -----------------------------------------------------------===*)
|
||||
|
||||
let test_aliases () =
|
||||
@ -1273,6 +1291,7 @@ let _ =
|
||||
suite "constants" test_constants;
|
||||
suite "global values" test_global_values;
|
||||
suite "global variables" test_global_variables;
|
||||
suite "users" test_users;
|
||||
suite "aliases" test_aliases;
|
||||
suite "functions" test_functions;
|
||||
suite "params" test_params;
|
||||
|
Loading…
Reference in New Issue
Block a user