mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:40:38 +00:00
[OCaml] Add Llvm.instr_clone.
llvm-svn: 220008
This commit is contained in:
parent
461cf76486
commit
c5418e39bd
@ -955,6 +955,7 @@ external instr_pred : llvalue -> (llbasicblock, llvalue) llrev_pos
|
||||
|
||||
external instr_opcode : llvalue -> Opcode.t = "llvm_instr_get_opcode"
|
||||
external icmp_predicate : llvalue -> Icmp.t option = "llvm_instr_icmp_predicate"
|
||||
external instr_clone : llvalue -> llvalue = "llvm_instr_clone"
|
||||
|
||||
let rec iter_instrs_range f i e =
|
||||
if i = e then () else
|
||||
|
@ -1699,6 +1699,11 @@ val instr_opcode : llvalue -> Opcode.t
|
||||
instruction [i]. *)
|
||||
val icmp_predicate : llvalue -> Icmp.t option
|
||||
|
||||
(** [inst_clone i] returns a copy of instruction [i],
|
||||
The instruction has no parent, and no name.
|
||||
See the method [llvm::Instruction::clone]. *)
|
||||
val instr_clone : llvalue -> llvalue
|
||||
|
||||
|
||||
(** {7 Operations on call sites} *)
|
||||
|
||||
|
@ -1358,6 +1358,13 @@ CAMLprim value llvm_instr_icmp_predicate(LLVMValueRef Val) {
|
||||
CAMLreturn(Val_int(0));
|
||||
}
|
||||
|
||||
/* llvalue -> llvalue */
|
||||
CAMLprim LLVMValueRef llvm_instr_clone(LLVMValueRef Inst) {
|
||||
if (!LLVMIsAInstruction(Inst))
|
||||
failwith("Not an instruction");
|
||||
return LLVMInstructionClone(Inst);
|
||||
}
|
||||
|
||||
|
||||
/*--... Operations on call sites ...........................................--*/
|
||||
|
||||
|
@ -842,6 +842,24 @@ let test_instructions () =
|
||||
insist ("One<-Two<-" = fold_right_instrs rf bb "");
|
||||
|
||||
dispose_module m
|
||||
end;
|
||||
|
||||
group "clone instr";
|
||||
begin
|
||||
(* CHECK: %clone = add i32 %0, 2
|
||||
*)
|
||||
let fty = function_type void_type [| i32_type |] in
|
||||
let fn = define_function "BuilderParent" fty m in
|
||||
let bb = entry_block fn in
|
||||
let b = builder_at_end context bb in
|
||||
let p = param fn 0 in
|
||||
let sum = build_add p p "sum" b in
|
||||
let y = const_int i32_type 2 in
|
||||
let clone = instr_clone sum in
|
||||
set_operand clone 0 p;
|
||||
set_operand clone 1 y;
|
||||
insert_into_builder clone "clone" b;
|
||||
ignore (build_ret_void b)
|
||||
end
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user