C and Objective Caml bindings for GlobalVariable::isConstant.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42736 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Gordon Henriksen 2007-10-07 17:31:42 +00:00
parent f16c595252
commit c84c16be9b
7 changed files with 70 additions and 1 deletions

View File

@ -142,6 +142,9 @@
9F7C240C0CB81ECD00498408 /* analysis_ocaml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = analysis_ocaml.c; sourceTree = "<group>"; }; 9F7C240C0CB81ECD00498408 /* analysis_ocaml.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = analysis_ocaml.c; sourceTree = "<group>"; };
9F7C240D0CB81ECD00498408 /* llvm_analysis.ml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = llvm_analysis.ml; sourceTree = "<group>"; }; 9F7C240D0CB81ECD00498408 /* llvm_analysis.ml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = llvm_analysis.ml; sourceTree = "<group>"; };
9F7C240E0CB81ECD00498408 /* llvm_analysis.mli */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = llvm_analysis.mli; sourceTree = "<group>"; }; 9F7C240E0CB81ECD00498408 /* llvm_analysis.mli */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = llvm_analysis.mli; sourceTree = "<group>"; };
9F7C2C4F0CB9496C00498408 /* analysis.ml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = analysis.ml; sourceTree = "<group>"; };
9F7C2C520CB9496C00498408 /* bitwriter.ml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = bitwriter.ml; sourceTree = "<group>"; };
9F7C2C5D0CB9496C00498408 /* vmcore.ml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vmcore.ml; sourceTree = "<group>"; };
9FA638D90C77B184007F12AE /* AutoUpgrade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AutoUpgrade.h; sourceTree = "<group>"; }; 9FA638D90C77B184007F12AE /* AutoUpgrade.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = AutoUpgrade.h; sourceTree = "<group>"; };
9FA638DA0C77B184007F12AE /* GlobalAlias.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GlobalAlias.h; sourceTree = "<group>"; }; 9FA638DA0C77B184007F12AE /* GlobalAlias.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = GlobalAlias.h; sourceTree = "<group>"; };
9FA638DB0C77B1AB007F12AE /* APInt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = APInt.h; sourceTree = "<group>"; }; 9FA638DB0C77B1AB007F12AE /* APInt.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = APInt.h; sourceTree = "<group>"; };
@ -1071,6 +1074,7 @@
DE816FAC08CFB44C0093BDEF /* utils */, DE816FAC08CFB44C0093BDEF /* utils */,
DE66F38D08ABF35C00323D32 /* docs */, DE66F38D08ABF35C00323D32 /* docs */,
9FD3E56D0CA0116100E54D15 /* bindings */, 9FD3E56D0CA0116100E54D15 /* bindings */,
9F7C2B690CB9496B00498408 /* test */,
DE66F3FD08ABF37000323D32 /* examples */, DE66F3FD08ABF37000323D32 /* examples */,
DE66F38C08ABF35300323D32 /* CREDITS.TXT */, DE66F38C08ABF35300323D32 /* CREDITS.TXT */,
CFD99AA80AFE827B0068D19C /* LICENSE.TXT */, CFD99AA80AFE827B0068D19C /* LICENSE.TXT */,
@ -1170,6 +1174,33 @@
path = analysis; path = analysis;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
9F7C2B690CB9496B00498408 /* test */ = {
isa = PBXGroup;
children = (
9F7C2C4B0CB9496C00498408 /* Bindings */,
);
name = test;
path = ../test;
sourceTree = SOURCE_ROOT;
};
9F7C2C4B0CB9496C00498408 /* Bindings */ = {
isa = PBXGroup;
children = (
9F7C2C4C0CB9496C00498408 /* Ocaml */,
);
path = Bindings;
sourceTree = "<group>";
};
9F7C2C4C0CB9496C00498408 /* Ocaml */ = {
isa = PBXGroup;
children = (
9F7C2C4F0CB9496C00498408 /* analysis.ml */,
9F7C2C520CB9496C00498408 /* bitwriter.ml */,
9F7C2C5D0CB9496C00498408 /* vmcore.ml */,
);
path = Ocaml;
sourceTree = "<group>";
};
9FA638E90C77B252007F12AE /* IPO */ = { 9FA638E90C77B252007F12AE /* IPO */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (

View File

@ -268,6 +268,9 @@ external visibility : llvalue -> visibility = "llvm_visibility"
external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility" external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility"
external alignment : llvalue -> int = "llvm_alignment" external alignment : llvalue -> int = "llvm_alignment"
external set_alignment : int -> llvalue -> unit = "llvm_set_alignment" external set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
external is_global_constant : llvalue -> bool = "llvm_is_global_constant"
external set_global_constant : bool -> llvalue -> unit
= "llvm_set_global_constant"
(*--... Operations on global variables .....................................--*) (*--... Operations on global variables .....................................--*)
external declare_global : lltype -> string -> llmodule -> llvalue external declare_global : lltype -> string -> llmodule -> llvalue

View File

@ -251,6 +251,9 @@ external visibility : llvalue -> visibility = "llvm_visibility"
external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility" external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility"
external alignment : llvalue -> int = "llvm_alignment" external alignment : llvalue -> int = "llvm_alignment"
external set_alignment : int -> llvalue -> unit = "llvm_set_alignment" external set_alignment : int -> llvalue -> unit = "llvm_set_alignment"
external is_global_constant : llvalue -> bool = "llvm_is_global_constant"
external set_global_constant : bool -> llvalue -> unit
= "llvm_set_global_constant"
(*--... Operations on global variables .....................................--*) (*--... Operations on global variables .....................................--*)
external declare_global : lltype -> string -> llmodule -> llvalue external declare_global : lltype -> string -> llmodule -> llvalue

View File

@ -445,6 +445,17 @@ CAMLprim value llvm_set_thread_local(value IsThreadLocal,
return Val_unit; return Val_unit;
} }
/* llvalue -> bool */
CAMLprim value llvm_is_global_constant(LLVMValueRef GlobalVar) {
return Val_bool(LLVMIsGlobalConstant(GlobalVar));
}
/* bool -> llvalue -> unit */
CAMLprim value llvm_set_global_constant(value Flag, LLVMValueRef GlobalVar) {
LLVMSetGlobalConstant(GlobalVar, Bool_val(Flag));
return Val_unit;
}
/*--... Operations on functions ............................................--*/ /*--... Operations on functions ............................................--*/
/* string -> lltype -> llmodule -> llvalue */ /* string -> lltype -> llmodule -> llvalue */

View File

@ -324,6 +324,8 @@ LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal); void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
int LLVMIsThreadLocal(LLVMValueRef GlobalVar); int LLVMIsThreadLocal(LLVMValueRef GlobalVar);
void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal); void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
int LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
/* Operations on functions */ /* Operations on functions */
LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,

View File

@ -557,6 +557,17 @@ void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal) {
unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0); unwrap<GlobalVariable>(GlobalVar)->setThreadLocal(IsThreadLocal != 0);
} }
int LLVMIsGlobalConstant(LLVMValueRef GlobalVar) {
bool res = unwrap<GlobalVariable>(GlobalVar)->isConstant();
fprintf(stderr, "LLVMIsConstantGlobal(0x%08x) = %s\n",
(int) GlobalVar, res? "YES" : "NO");
return unwrap<GlobalVariable>(GlobalVar)->isConstant();
}
void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant) {
unwrap<GlobalVariable>(GlobalVar)->setConstant(IsConstant != 0);
}
/*--.. Operations on functions .............................................--*/ /*--.. Operations on functions .............................................--*/
LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name, LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,

View File

@ -418,7 +418,15 @@ let test_global_variables () =
*) *)
group "delete"; group "delete";
let g = define_global "GVar05" fourty_two32 m in let g = define_global "GVar05" fourty_two32 m in
delete_global g delete_global g;
(* RUN: grep -v {ConstGlobalVar.*constant} < %t.ll
*)
group "constant";
let g = define_global "ConstGlobalVar" fourty_two32 m in
insist (not (is_global_constant g));
set_global_constant true g;
insist (is_global_constant g)
(*===-- Functions ---------------------------------------------------------===*) (*===-- Functions ---------------------------------------------------------===*)