summaryrefslogtreecommitdiffstats
path: root/llvm/bindings
Commit message (Collapse)AuthorAgeFilesLines
* [OCaml] [cmake] Use LLVM_LIBRARY_DIR instead of LLVM_LIBRARY_OUTPUT_INTDIR.Peter Zotov2014-12-302-4/+4
| | | | | | | | The latter variable is internal. Original patch by Ramkumar Ramachandra <artagnon@gmail.com> llvm-svn: 224977
* [OCaml] Expose Llvm_executionengine.get_{global_value,function}_address.Peter Zotov2014-12-243-15/+40
| | | | | | | | | Patch by Ramkumar Ramachandra <artagnon@gmail.com>. Also remove Llvm_executionengine.get_pointer_to_global, as it is actually deprecated and didn't appear in a stable release. llvm-svn: 224801
* Finish removing DestroySource.Rafael Espindola2014-12-234-27/+7
| | | | | | Fixes pr21901. llvm-svn: 224782
* [OCaml] PR22014: OCaml bindings didn't link to libLLVM-*.so with -Wl,--as-neededPeter Zotov2014-12-231-2/+2
| | | | | | Patch by Evangelos Foutras <evangelos@foutrelis.com>. llvm-svn: 224766
* Go bindings: introduce Value.ConstantAsMetadata.Peter Collingbourne2014-12-133-0/+10
| | | | llvm-svn: 224179
* Go bindings: introduce llvm.TemporaryMDNode.Peter Collingbourne2014-12-133-0/+13
| | | | llvm-svn: 224178
* Go bindings: introduce Metadata.ReplaceAllUsesWith.Peter Collingbourne2014-12-133-0/+16
| | | | llvm-svn: 224177
* Go bindings: expose the Metadata type.Peter Collingbourne2014-12-136-266/+338
| | | | | | | Also modifies SetCurrentDebugLocation to take individual arguments rather than an MDNode. llvm-svn: 224176
* Go bindings: remove contextless metadata bindings.Peter Collingbourne2014-12-131-11/+0
| | | | llvm-svn: 224175
* IR: Split Metadata from ValueDuncan P. N. Exon Smith2014-12-091-24/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Split `Metadata` away from the `Value` class hierarchy, as part of PR21532. Assembly and bitcode changes are in the wings, but this is the bulk of the change for the IR C++ API. I have a follow-up patch prepared for `clang`. If this breaks other sub-projects, I apologize in advance :(. Help me compile it on Darwin I'll try to fix it. FWIW, the errors should be easy to fix, so it may be simpler to just fix it yourself. This breaks the build for all metadata-related code that's out-of-tree. Rest assured the transition is mechanical and the compiler should catch almost all of the problems. Here's a quick guide for updating your code: - `Metadata` is the root of a class hierarchy with three main classes: `MDNode`, `MDString`, and `ValueAsMetadata`. It is distinct from the `Value` class hierarchy. It is typeless -- i.e., instances do *not* have a `Type`. - `MDNode`'s operands are all `Metadata *` (instead of `Value *`). - `TrackingVH<MDNode>` and `WeakVH` referring to metadata can be replaced with `TrackingMDNodeRef` and `TrackingMDRef`, respectively. If you're referring solely to resolved `MDNode`s -- post graph construction -- just use `MDNode*`. - `MDNode` (and the rest of `Metadata`) have only limited support for `replaceAllUsesWith()`. As long as an `MDNode` is pointing at a forward declaration -- the result of `MDNode::getTemporary()` -- it maintains a side map of its uses and can RAUW itself. Once the forward declarations are fully resolved RAUW support is dropped on the ground. This means that uniquing collisions on changing operands cause nodes to become "distinct". (This already happened fairly commonly, whenever an operand went to null.) If you're constructing complex (non self-reference) `MDNode` cycles, you need to call `MDNode::resolveCycles()` on each node (or on a top-level node that somehow references all of the nodes). Also, don't do that. Metadata cycles (and the RAUW machinery needed to construct them) are expensive. - An `MDNode` can only refer to a `Constant` through a bridge called `ConstantAsMetadata` (one of the subclasses of `ValueAsMetadata`). As a side effect, accessing an operand of an `MDNode` that is known to be, e.g., `ConstantInt`, takes three steps: first, cast from `Metadata` to `ConstantAsMetadata`; second, extract the `Constant`; third, cast down to `ConstantInt`. The eventual goal is to introduce `MDInt`/`MDFloat`/etc. and have metadata schema owners transition away from using `Constant`s when the type isn't important (and they don't care about referring to `GlobalValue`s). In the meantime, I've added transitional API to the `mdconst` namespace that matches semantics with the old code, in order to avoid adding the error-prone three-step equivalent to every call site. If your old code was: MDNode *N = foo(); bar(isa <ConstantInt>(N->getOperand(0))); baz(cast <ConstantInt>(N->getOperand(1))); bak(cast_or_null <ConstantInt>(N->getOperand(2))); bat(dyn_cast <ConstantInt>(N->getOperand(3))); bay(dyn_cast_or_null<ConstantInt>(N->getOperand(4))); you can trivially match its semantics with: MDNode *N = foo(); bar(mdconst::hasa <ConstantInt>(N->getOperand(0))); baz(mdconst::extract <ConstantInt>(N->getOperand(1))); bak(mdconst::extract_or_null <ConstantInt>(N->getOperand(2))); bat(mdconst::dyn_extract <ConstantInt>(N->getOperand(3))); bay(mdconst::dyn_extract_or_null<ConstantInt>(N->getOperand(4))); and when you transition your metadata schema to `MDInt`: MDNode *N = foo(); bar(isa <MDInt>(N->getOperand(0))); baz(cast <MDInt>(N->getOperand(1))); bak(cast_or_null <MDInt>(N->getOperand(2))); bat(dyn_cast <MDInt>(N->getOperand(3))); bay(dyn_cast_or_null<MDInt>(N->getOperand(4))); - A `CallInst` -- specifically, intrinsic instructions -- can refer to metadata through a bridge called `MetadataAsValue`. This is a subclass of `Value` where `getType()->isMetadataTy()`. `MetadataAsValue` is the *only* class that can legally refer to a `LocalAsMetadata`, which is a bridged form of non-`Constant` values like `Argument` and `Instruction`. It can also refer to any other `Metadata` subclass. (I'll break all your testcases in a follow-up commit, when I propagate this change to assembly.) llvm-svn: 223802
* Add bindings for the rest of the MCJIT options that we previouslyEric Christopher2014-12-022-0/+15
| | | | | | | had support for. We're still missing a binding for an MCJIT memory manager. llvm-svn: 223153
* [OCaml] Add Llvm.mdnull.Peter Zotov2014-12-023-0/+9
| | | | | | Patch by Gideon Smeding <gideon.smeding@3ds.com>. llvm-svn: 223129
* [OCaml] Move Llvm.clone_module to its own Llvm_transform_utils module.Peter Zotov2014-12-0112-7/+94
| | | | | | | This way most code won't link this (substantially large) library, if compiled statically with LLVM. llvm-svn: 223072
* [OCaml] [cmake] Add CMake buildsystem for OCaml.Peter Zotov2014-12-0116-0/+114
| | | | | | Closes PR15325. llvm-svn: 223071
* Reformat with gofmt.Eric Christopher2014-11-261-1/+1
| | | | llvm-svn: 222806
* Make SetMCJITOptimizationLevel more of a method and pass optionsEric Christopher2014-11-262-5/+5
| | | | | | as a reference. Move closer to the type. llvm-svn: 222805
* Make sure that the go bindings call LLVMInitializeMCJITCompilerOptionsEric Christopher2014-11-262-12/+16
| | | | | | | so that they initialize the code generation model to the correct (non-zero) default model. llvm-svn: 222804
* Go bindings: add DIBuilder.InsertValueAtEndPeter Collingbourne2014-11-253-2/+27
| | | | | | | | | | | | Expose llvm::DIBuilder::insertDbgValueIntrinsic as DIBuilder.InsertValueAtEnd in the Go bindings, to support attaching debug metadata to register values. Patch by Andrew Wilkins! Differential Revision: http://reviews.llvm.org/D6374 llvm-svn: 222790
* Expose LLVM version string via macro in llvm-config.h, and modify Go bindingsPeter Collingbourne2014-11-192-4/+19
| | | | | | to make use of it. llvm-svn: 222307
* [OCaml] Fix mismatched CAMLparam/CAMLreturn.Peter Zotov2014-11-031-4/+3
| | | | | | | Also, revert r221142--it was an incorrect fix to this bug which fixed tests by accident. llvm-svn: 221149
* [OCaml] Add -g on DEBUG_SYMBOLS=1, not ENABLE_OPTIMIZED.Peter Zotov2014-11-031-1/+1
| | | | | | Thanks echristo for pointing this out. llvm-svn: 221145
* [OCaml] Don't use deprecated non-caml_namespaced functions.Peter Zotov2014-11-031-7/+7
| | | | llvm-svn: 221143
* [OCaml] Initialize local roots prior to raising.Peter Zotov2014-11-031-3/+4
| | | | | | On 4.02, the OCaml unwinder otherwise gets confused and segfaults. llvm-svn: 221142
* [OCaml] Core package should depend on LLVMTransformUtils for LLVMCloneModule.Peter Zotov2014-11-031-1/+1
| | | | llvm-svn: 221141
* [OCaml] Fix ocamlc -custom builds when configured as --enable-shared.Peter Zotov2014-11-031-2/+3
| | | | llvm-svn: 221140
* [OCaml] Avoid embedding absolute paths into executables.Peter Zotov2014-11-031-14/+14
| | | | | | | | | | | | Bindings built out-of-tree, e.g. via OPAM, should append a line to META.llvm like the following: linkopts = "-cclib -L$libdir -cclib -Wl,-rpath,$libdir" where $libdir is the lib/ directory where LLVM libraries are installed. llvm-svn: 221139
* [OCaml] Don't build stub libraries twice.Peter Zotov2014-11-031-0/+3
| | | | | | | The default Makefile.rules BUILD_ARCHIVE machinery was unintentionally enabled. llvm-svn: 221138
* [OCaml] META: remove exists_if(toplevel).Peter Zotov2014-11-032-2/+0
| | | | | | | ocamlfind ignores the predicates in this case, making the package unavailable for batch compilation as well. llvm-svn: 221136
* [OCaml] ExecutionEngine package should not depend on interpreter.Peter Zotov2014-11-031-1/+1
| | | | | | Interpreter support was removed in r220957. llvm-svn: 221135
* [OCaml] Ensure consistent naming.Peter Zotov2014-10-316-3/+3
| | | | | | | | | Specifically: * Directories match module names. * Test names match module names. * The language is called "OCaml", not "Ocaml". llvm-svn: 220958
* [OCaml] Rework Llvm_executionengine using ctypes.Peter Zotov2014-10-316-527/+145
| | | | | | | | | | | | | | | | | | | | | | | | Since JIT->MCJIT migration, most of the ExecutionEngine interface became deprecated and/or broken. This especially affected the OCaml bindings, as runFunction is no longer available, and unlike in C, it is not possible to coerce a pointer to a function and call it in OCaml. In practice, LLVM 3.5 shipped completely unusable Llvm_executionengine. The GenericValue interface and runFunction were essentially a poor man's FFI. As such, this interface was removed and instead a dependency on ctypes >=0.3 added, which handled platform-specific aspects of accessing data and calling functions. The new interface does not expose JIT (which is a shim around MCJIT), as well as the interpreter (which can't handle a lot of valid IR). Llvm_executionengine.add_global_mapping is currently unusable due to PR20656. llvm-svn: 220957
* [OCaml] Expose LLVMCloneModule.Peter Zotov2014-10-302-0/+4
| | | | llvm-svn: 220903
* [OCaml] Expose LLVM{Get,Set}DLLStorageClass.Peter Zotov2014-10-303-0/+37
| | | | llvm-svn: 220902
* [OCaml] [autoconf] Migrate to ocamlfind.Peter Zotov2014-10-301-46/+18
| | | | | | | | | | | | | | | | | | | | | | This commit updates the OCaml bindings and tests to use ocamlfind. The bindings are migrated in order to use ctypes, which are now required for MCJIT-backed Llvm_executionengine. The tests are migrated in order to use OUnit and to verify that the distributed META.llvm allows to build working executables. Every OCaml toolchain invocation is now chained through ocamlfind, which (in theory) allows to cross-compile the OCaml bindings. The configure script now checks for ctypes (>= 0.2.3) and OUnit (>= 2). The code depending on these libraries will be added later. The configure script does not check the package versions in order to keep changes less invasive. Additionally, OCaml bindings will now be automatically enabled if ocamlfind is detected on the system, rather than ocamlc, as it was before. llvm-svn: 220899
* [OCaml] De-duplicate llvm_raise and llvm_string_of_message.Peter Zotov2014-10-307-71/+14
| | | | llvm-svn: 220898
* [OCaml] Expose Llvm.parse_command_line_options.Peter Zotov2014-10-293-0/+21
| | | | llvm-svn: 220847
* [OCaml] Expose Llvm_target.TargetMachine.add_analysis_passes.Peter Zotov2014-10-293-0/+13
| | | | llvm-svn: 220846
* [OCaml] If compiled without --enable-shared, hide packages from toplevel.Peter Zotov2014-10-292-0/+2
| | | | | | | | | | | Pretend they do not exist using exists_if. This is better than the current situation, which is the error: Error: The external function `llvm_global_succ' is not available but still somewhat confusing. llvm-svn: 220845
* [OCaml] Expose Llvm_bitwriter.write_bitcode_to_memory_buffer.Peter Zotov2014-10-293-13/+28
| | | | llvm-svn: 220844
* [OCaml] Drop support for 3.12.1 and earlier.Peter Zotov2014-10-2928-262/+166
| | | | | | | | | | In practice this means: * Always using -g flag. * Embedding -cclib -lstdc++ into the corresponding cma/cmxa file. This also moves -lstdc++ in a single place. * Using caml_named_value instead of a homegrown mechanism. llvm-svn: 220843
* [OCaml] Synchronize transformations with LLVM-C.Peter Zotov2014-10-299-385/+479
| | | | | | | Also, rearrange the functions in a way that allows to quickly compare C headers and .mli/glue files. llvm-svn: 220842
* [OCaml] PR19859: Add functions to query and modify branches.Peter Zotov2014-10-283-0/+140
| | | | | | Patch by Gabriel Radanne <drupyog@zoho.com>. llvm-svn: 220818
* [OCaml] PR19859: Add Llvm.{fcmp_predicate,float_of_const}.Peter Zotov2014-10-283-0/+40
| | | | | | Patch by Gabriel Radanne <drupyog@zoho.com>. llvm-svn: 220815
* [OCaml] Enable -g for debug builds.Peter Zotov2014-10-281-4/+3
| | | | | | We don't care about pre-3.12.1 anymore. llvm-svn: 220767
* [OCaml] Fix whitespace.Peter Zotov2014-10-2813-65/+65
| | | | llvm-svn: 220766
* [OCaml] Expose existing documentation in ocamldoc.Peter Zotov2014-10-261-43/+43
| | | | | | Patch by Gabriel Radanne <drupyog@zoho.com>. llvm-svn: 220648
* [OCaml] Unbreak Llvm_executionengine.initialize_native_target.Peter Zotov2014-10-251-14/+16
| | | | | | | | | | | | | First, return true on success, as it is the OCaml convention. Second, also initialize the native assembly printer, which is, despite the name, required for MCJIT operation. Since this function did not initialize the assembly printer earlier and no function to initialize native assembly printer was available elsewhere, it is safe to break its interface: it means that it simply could not be used successfully before. llvm-svn: 220620
* [OCaml] Expose Llvm_executionengine.ExecutionEngine.create_mcjit.Peter Zotov2014-10-253-27/+103
| | | | llvm-svn: 220619
* Add llvm-go tool.Peter Collingbourne2014-10-231-41/+5
| | | | | | | | | | | | This tool lets us build LLVM components within the tree by setting up a $GOPATH that resembles a tree fetched in the normal way with "go get". It is intended that components such as the Go frontend will be built in-tree using this tool. Differential Revision: http://reviews.llvm.org/D5902 llvm-svn: 220462
* Go: add binding for LLVMSetUnnamedAddr.Peter Collingbourne2014-10-221-0/+1
| | | | llvm-svn: 220416
OpenPOWER on IntegriCloud