mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 21:32:10 +00:00
Expose LLVMSetOperand and LLVMGetNumOperands to llvm-c and ocaml.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@111625 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e127410550
commit
f7af931930
@ -280,6 +280,8 @@ let fold_right_uses f v init =
|
||||
|
||||
(*--... Operations on users ................................................--*)
|
||||
external operand : llvalue -> int -> llvalue = "llvm_operand"
|
||||
external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
|
||||
external num_operands : llvalue -> int = "llvm_num_operands"
|
||||
|
||||
(*--... Operations on constants of (mostly) any type .......................--*)
|
||||
external is_constant : llvalue -> bool = "llvm_is_constant"
|
||||
|
@ -557,6 +557,14 @@ val fold_right_uses : (lluse -> 'a -> 'a) -> llvalue -> 'a -> 'a
|
||||
method [llvm::User::getOperand]. *)
|
||||
external operand : llvalue -> int -> llvalue = "llvm_operand"
|
||||
|
||||
(** [set_operand v i o] sets the operand of the value [v] at the index [i] to
|
||||
the value [o].
|
||||
See the method [llvm::User::setOperand]. *)
|
||||
external set_operand : llvalue -> int -> llvalue -> unit = "llvm_set_operand"
|
||||
|
||||
(** [num_operands v] returns the number of operands for the value [v].
|
||||
See the method [llvm::User::getNumOperands]. *)
|
||||
external num_operands : llvalue -> int = "llvm_num_operands"
|
||||
|
||||
(** {7 Operations on constants of (mostly) any type} *)
|
||||
|
||||
|
@ -452,6 +452,17 @@ CAMLprim LLVMValueRef llvm_operand(LLVMValueRef V, value I) {
|
||||
return LLVMGetOperand(V, Int_val(I));
|
||||
}
|
||||
|
||||
/* llvalue -> int -> llvalue -> unit */
|
||||
CAMLprim value llvm_set_operand(LLVMValueRef U, value I, LLVMValueRef V) {
|
||||
LLVMSetOperand(U, Int_val(I), V);
|
||||
return Val_unit;
|
||||
}
|
||||
|
||||
/* llvalue -> int */
|
||||
CAMLprim value llvm_num_operands(LLVMValueRef V) {
|
||||
return Val_int(LLVMGetNumOperands(V));
|
||||
}
|
||||
|
||||
/*--... Operations on constants of (mostly) any type .......................--*/
|
||||
|
||||
/* llvalue -> bool */
|
||||
|
@ -523,6 +523,8 @@ LLVMValueRef LLVMGetUsedValue(LLVMUseRef U);
|
||||
|
||||
/* Operations on Users */
|
||||
LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index);
|
||||
void LLVMSetOperand(LLVMValueRef User, unsigned Index, LLVMValueRef Val);
|
||||
int LLVMGetNumOperands(LLVMValueRef Val);
|
||||
|
||||
/* Operations on constants of any type */
|
||||
LLVMValueRef LLVMConstNull(LLVMTypeRef Ty); /* all zeroes */
|
||||
|
@ -489,6 +489,14 @@ LLVMValueRef LLVMGetOperand(LLVMValueRef Val, unsigned Index) {
|
||||
return wrap(unwrap<User>(Val)->getOperand(Index));
|
||||
}
|
||||
|
||||
void LLVMSetOperand(LLVMValueRef Val, unsigned Index, LLVMValueRef Op) {
|
||||
unwrap<User>(Val)->setOperand(Index, unwrap(Op));
|
||||
}
|
||||
|
||||
int LLVMGetNumOperands(LLVMValueRef Val) {
|
||||
return unwrap<User>(Val)->getNumOperands();
|
||||
}
|
||||
|
||||
/*--.. Operations on constants of any type .................................--*/
|
||||
|
||||
LLVMValueRef LLVMConstNull(LLVMTypeRef Ty) {
|
||||
|
@ -642,11 +642,18 @@ let test_users () =
|
||||
|
||||
let p1 = param fn 0 in
|
||||
let p2 = param fn 1 in
|
||||
let a3 = build_alloca i32_type "user_alloca" b in
|
||||
let p3 = build_load a3 "user_load" b in
|
||||
let i = build_add p1 p2 "sum" b in
|
||||
|
||||
insist ((num_operands i) = 2);
|
||||
insist ((operand i 0) = p1);
|
||||
insist ((operand i 1) = p2);
|
||||
|
||||
set_operand i 1 p3;
|
||||
insist ((operand i 1) != p2);
|
||||
insist ((operand i 1) = p3);
|
||||
|
||||
ignore (build_unreachable b)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user