C and Objective Caml bindings for GlobalVariable::isConstant.
authorGordon Henriksen <gordonhenriksen@mac.com>
Sun, 7 Oct 2007 17:31:42 +0000 (17:31 +0000)
committerGordon Henriksen <gordonhenriksen@mac.com>
Sun, 7 Oct 2007 17:31:42 +0000 (17:31 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42736 91177308-0d34-0410-b5e6-96231b3b80d8

Xcode/LLVM.xcodeproj/project.pbxproj
bindings/ocaml/llvm/llvm.ml
bindings/ocaml/llvm/llvm.mli
bindings/ocaml/llvm/llvm_ocaml.c
include/llvm-c/Core.h
lib/VMCore/Core.cpp
test/Bindings/Ocaml/vmcore.ml

index 97f73286617149630d8e9318ff06d5bd074bdb50..24939d9b7de9f6daa0c8eb7d8362c59591c776a4 100644 (file)
                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>"; };
                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>"; };
                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>"; };
                                DE816FAC08CFB44C0093BDEF /* utils */,
                                DE66F38D08ABF35C00323D32 /* docs */,
                                9FD3E56D0CA0116100E54D15 /* bindings */,
+                               9F7C2B690CB9496B00498408 /* test */,
                                DE66F3FD08ABF37000323D32 /* examples */,
                                DE66F38C08ABF35300323D32 /* CREDITS.TXT */,
                                CFD99AA80AFE827B0068D19C /* LICENSE.TXT */,
                        path = analysis;
                        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 */ = {
                        isa = PBXGroup;
                        children = (
index 0361001b6eba3d57ece76512800136eb0f8dfaae..9766d83810eb4453fcc9be96067c2dd7b7525f99 100644 (file)
@@ -268,6 +268,9 @@ external visibility : llvalue -> visibility = "llvm_visibility"
 external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility"
 external alignment : llvalue -> int = "llvm_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 .....................................--*)
 external declare_global : lltype -> string -> llmodule -> llvalue
index d2f6cb4ce7a35264c2d6db50aec5ddfd6125162a..ae37e9d02d7ac2fa32f07225672ccfbe0ca7c49d 100644 (file)
@@ -251,6 +251,9 @@ external visibility : llvalue -> visibility = "llvm_visibility"
 external set_visibility : visibility -> llvalue -> unit = "llvm_set_visibility"
 external alignment : llvalue -> int = "llvm_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 .....................................--*)
 external declare_global : lltype -> string -> llmodule -> llvalue
index 4d721822f13a2c1e2b0b73c40c826d3034c015b1..61115f2c19a271a525c38ab1208bbc05736ba0e4 100644 (file)
@@ -445,6 +445,17 @@ CAMLprim value llvm_set_thread_local(value IsThreadLocal,
   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 ............................................--*/
 
 /* string -> lltype -> llmodule -> llvalue */
index ee1f69f6111d22ebf271e0095d3b63426fb330c0..3f8961b7651514cee2319c7ac19e4b8b6d7854b2 100644 (file)
@@ -324,6 +324,8 @@ LLVMValueRef LLVMGetInitializer(LLVMValueRef GlobalVar);
 void LLVMSetInitializer(LLVMValueRef GlobalVar, LLVMValueRef ConstantVal);
 int LLVMIsThreadLocal(LLVMValueRef GlobalVar);
 void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal);
+int LLVMIsGlobalConstant(LLVMValueRef GlobalVar);
+void LLVMSetGlobalConstant(LLVMValueRef GlobalVar, int IsConstant);
 
 /* Operations on functions */
 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
index 15a54b332ac92b3eb678a36c71e26a802be34299..66ab03cb5e0033d2c3b0f973ebd148654cfa8845 100644 (file)
@@ -557,6 +557,17 @@ void LLVMSetThreadLocal(LLVMValueRef GlobalVar, int IsThreadLocal) {
   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 .............................................--*/
 
 LLVMValueRef LLVMAddFunction(LLVMModuleRef M, const char *Name,
index 0282241d0c9cc76b0c5bff4fc694b37c26c63f6e..8aa6e43603eda9cdbd52e4f1817c9f0e2a15b1e5 100644 (file)
@@ -418,7 +418,15 @@ let test_global_variables () =
    *)
   group "delete";
   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 ---------------------------------------------------------===*)