mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-22 11:42:42 +00:00
Bindings for instruction calling conventions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45422 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
21c62da287
commit
cc0928ff22
@ -328,6 +328,12 @@ external value_of_block : llbasicblock -> llvalue = "LLVMBasicBlockAsValue"
|
|||||||
external value_is_block : llvalue -> bool = "llvm_value_is_block"
|
external value_is_block : llvalue -> bool = "llvm_value_is_block"
|
||||||
external block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
|
external block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
|
||||||
|
|
||||||
|
(*--... Operations on call sites ...........................................--*)
|
||||||
|
external instruction_call_conv: llvalue -> int
|
||||||
|
= "llvm_instruction_call_conv"
|
||||||
|
external set_instruction_call_conv: int -> llvalue -> unit
|
||||||
|
= "llvm_set_instruction_call_conv"
|
||||||
|
|
||||||
(*--... Operations on phi nodes ............................................--*)
|
(*--... Operations on phi nodes ............................................--*)
|
||||||
external add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
|
external add_incoming : (llvalue * llbasicblock) -> llvalue -> unit
|
||||||
= "llvm_add_incoming"
|
= "llvm_add_incoming"
|
||||||
|
@ -854,6 +854,20 @@ external value_is_block : llvalue -> bool = "llvm_value_is_block"
|
|||||||
(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. **)
|
(** [block_of_value v] losslessly casts [v] to an [llbasicblock]. **)
|
||||||
external block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
|
external block_of_value : llvalue -> llbasicblock = "LLVMValueAsBasicBlock"
|
||||||
|
|
||||||
|
(*--... Operations on call sites ...........................................--*)
|
||||||
|
|
||||||
|
(** [inst_call_conv ci] is the calling convention for the call or invoke
|
||||||
|
instruction [ci], which may be one of the values from the module [CallConv].
|
||||||
|
See the method [CallSite:: **)
|
||||||
|
external instruction_call_conv: llvalue -> int
|
||||||
|
= "llvm_instruction_call_conv"
|
||||||
|
|
||||||
|
(** [set_inst_call_conv cc ci] sets the calling convention for the call or
|
||||||
|
invoke instruction [ci] to the integer [cc], which can be one of the values
|
||||||
|
from the module [CallConv]. See the method [CallSite::]. **)
|
||||||
|
external set_instruction_call_conv: int -> llvalue -> unit
|
||||||
|
= "llvm_set_instruction_call_conv"
|
||||||
|
|
||||||
(*--... Operations on phi nodes ............................................--*)
|
(*--... Operations on phi nodes ............................................--*)
|
||||||
|
|
||||||
(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
|
(** [add_incoming (v, bb) pn] adds the value [v] to the phi node [pn] for use
|
||||||
|
@ -652,6 +652,19 @@ CAMLprim value llvm_value_is_block(LLVMValueRef Val) {
|
|||||||
return Val_bool(LLVMValueIsBasicBlock(Val));
|
return Val_bool(LLVMValueIsBasicBlock(Val));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*--... Operations on call sites ...........................................--*/
|
||||||
|
|
||||||
|
/* llvalue -> int */
|
||||||
|
CAMLprim value llvm_instruction_call_conv(LLVMValueRef Inst) {
|
||||||
|
return Val_int(LLVMGetInstructionCallConv(Inst));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* int -> llvalue -> unit */
|
||||||
|
CAMLprim value llvm_set_instruction_call_conv(value CC, LLVMValueRef Inst) {
|
||||||
|
LLVMSetInstructionCallConv(Inst, Int_val(CC));
|
||||||
|
return Val_unit;
|
||||||
|
}
|
||||||
|
|
||||||
/*--... Operations on phi nodes ............................................--*/
|
/*--... Operations on phi nodes ............................................--*/
|
||||||
|
|
||||||
/* (llvalue * llbasicblock) -> llvalue -> unit */
|
/* (llvalue * llbasicblock) -> llvalue -> unit */
|
||||||
|
@ -378,6 +378,10 @@ LLVMBasicBlockRef LLVMInsertBasicBlock(LLVMBasicBlockRef InsertBeforeBB,
|
|||||||
const char *Name);
|
const char *Name);
|
||||||
void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
|
void LLVMDeleteBasicBlock(LLVMBasicBlockRef BB);
|
||||||
|
|
||||||
|
/* Operations on call sites */
|
||||||
|
void LLVMSetInstructionCallConv(LLVMValueRef Instr, unsigned CC);
|
||||||
|
unsigned LLVMGetInstructionCallConv(LLVMValueRef Instr);
|
||||||
|
|
||||||
/* Operations on phi nodes */
|
/* Operations on phi nodes */
|
||||||
void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
|
void LLVMAddIncoming(LLVMValueRef PhiNode, LLVMValueRef *IncomingValues,
|
||||||
LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
|
LLVMBasicBlockRef *IncomingBlocks, unsigned Count);
|
||||||
|
@ -768,14 +768,19 @@ let test_builder () =
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
group "miscellaneous"; begin
|
group "miscellaneous"; begin
|
||||||
(* RUN: grep {Inst45.*call.*P2.*P1} < %t.ll
|
(* RUN: grep {CallInst.*call.*P2.*P1} < %t.ll
|
||||||
|
* RUN: grep {CallInst.*cc63} < %t.ll
|
||||||
* RUN: grep {Inst47.*select.*Inst46.*P1.*P2} < %t.ll
|
* RUN: grep {Inst47.*select.*Inst46.*P1.*P2} < %t.ll
|
||||||
* RUN: grep {Inst48.*va_arg.*null.*i32} < %t.ll
|
* RUN: grep {Inst48.*va_arg.*null.*i32} < %t.ll
|
||||||
* RUN: grep {Inst49.*extractelement.*Vec1.*P2} < %t.ll
|
* RUN: grep {Inst49.*extractelement.*Vec1.*P2} < %t.ll
|
||||||
* RUN: grep {Inst50.*insertelement.*Vec1.*P1.*P2} < %t.ll
|
* RUN: grep {Inst50.*insertelement.*Vec1.*P1.*P2} < %t.ll
|
||||||
* RUN: grep {Inst51.*shufflevector.*Vec1.*Vec2.*1.*1.*0.*0} < %t.ll
|
* RUN: grep {Inst51.*shufflevector.*Vec1.*Vec2.*1.*1.*0.*0} < %t.ll
|
||||||
*)
|
*)
|
||||||
ignore (build_call fn [| p2; p1 |] "Inst45" atentry);
|
let ci = build_call fn [| p2; p1 |] "CallInst" atentry in
|
||||||
|
insist (CallConv.c = instruction_call_conv ci);
|
||||||
|
set_instruction_call_conv 63 ci;
|
||||||
|
insist (63 = instruction_call_conv ci);
|
||||||
|
|
||||||
let inst46 = build_icmp Icmp.Eq p1 p2 "Inst46" atentry in
|
let inst46 = build_icmp Icmp.Eq p1 p2 "Inst46" atentry in
|
||||||
ignore (build_select inst46 p1 p2 "Inst47" atentry);
|
ignore (build_select inst46 p1 p2 "Inst47" atentry);
|
||||||
ignore (build_va_arg
|
ignore (build_va_arg
|
||||||
|
Loading…
x
Reference in New Issue
Block a user