Commit Graph

291 Commits

Author SHA1 Message Date
John Demme 99f0092cac
[Python] Fix Python Bindings (#1858)
Closes #1810 

The changes to `hw.module` and `hw.instance` make them incompatible with `msft.module` and `msft.instance` as far as the python bindings are concerned. I'm not sure what I want to do here so I've marked that test as `xfail` for the moment.
2021-09-23 02:14:14 -07:00
John Demme 730b157be5
[MSFT] DeviceDB C API and Python bindings (#1717) 2021-09-03 20:12:16 -07:00
John Demme 0066f6dc79
[MSFT] Introduce `RootedInstancePath` and re-factor based on it (#1689)
A RootedInstancePath is just an instance path prepended with the root (aka top) module which the instance path is relative to. If we structure the placements based on this, we no longer have to walk the instance hierarchy while exporting TCL! This patch also removes support for locations not inside of instance switches. That use case required the design be fully elaborated which isn't really done.
2021-09-01 17:41:06 -07:00
John Demme 221e2db01c
Update LLVM submodule (#1687)
Co-authored-by: Andrew Young <youngar17@gmail.com>
2021-09-01 12:46:54 -07:00
John Demme 3ad8be3d88
[MSFT] [Python] Add a function to get an instance (#1613)
Given a root module and an instance path, find the corresponding instance from
the instance hierarchy. Return 'None' if the path wasn't found.
2021-08-20 13:57:35 -07:00
Fabian Schuiki 499cd357ca
[LLHD] Add C API
Add a minimal C API for the LLHD dialect.
2021-08-19 17:11:43 +02:00
John Demme 43ccc6584e
[MSFT] [Py] Add physical location and switch instance attributes to python module (#1606) 2021-08-18 20:03:07 -07:00
John Demme f537e0faba
[ESI] [Python] Move functionality through the C API (#1595)
Necessary to avoid linking issues on Windows.
2021-08-17 15:40:14 -07:00
Mike Urbach c9af2e1a44 [Python] Move remaining functionality behind the C-API, NFC.
There were some bits of the ESI and MSFT native pybind11 modules that
directly called into the CIRCT C++ libraries. This moves that
functionality out of the modules and behind the C-API. This proper
layering needs to be enforced before we can implement the upcoming
migration to use the improved upstream Python binding mechanism.

Also, this ensures all of the C-API functions used by the Python
bindings are annotated with MLIR_CAPI_EXPORTED, which will also become
required.
2021-07-27 13:55:15 -06:00
John Demme 2a7505c33f
[Py] [PyCDE] Add `get_fields` to struct type and use it in pycde (#1364)
PyCDE uses this for error checking and `.` access.
2021-07-05 20:36:54 -07:00
John Demme b57223d21b [C API] HWStructFieldInfo::Attribute -> ::Type 2021-07-05 18:42:01 -07:00
mikeurbach 8325991fbe
[CAPI][Python] Add support for TypeAliasType in CAPI and Bindings. (#1362)
This adds straightforward support for the TypeAliasType, as it stands
today, in the CAPI, then layers the Bindings directly on top of that.

Later improvements to the TypeAliasType's builder will of course
require refactoring part of this, but for now, this opens it up for
use in PyCDE.
2021-07-01 17:36:22 -06:00
mikeurbach 9dd73b174f
[PyCDE] Include parameters in generator registration and lookup. (#1298)
Previously, different parameterizations of the same module would end
up using the most-recently registered generator and the
parameterization used when it was registered.

This includes the parameterization in the registered mapping, and
looks for that same parameterization when looking up generators. This
is trivially supported since we already store the parameterization as
an attribute on the Operation.

Added a few lines to the polynomial integration test to ensure the
behavior.
2021-06-17 19:59:48 -06:00
John Demme 8b525e879b
[Py] Create syntactic sugar for some Array and Struct ops (#1234)
Recreating the C++ logic for ArrayCreateOp, ArrayGetOp, StructCreateOp, and StructExtractOp.
2021-06-10 11:46:09 -07:00
John Demme cc3d74cf69
[Py] Design entry language: generators (#1169)
Prototype of "generators". This version runs the generator for each and every op to lower and each time it is called, a new HWModuleOp is created at the top level. To fix this, I plan on unique'ing on the operation's attributes, result types, and operand types. This'll involve some refactoring since as of this PR the HWModuleOp creation and instantiation are both in the same callback.
2021-06-01 15:21:26 -07:00
Chris Lattner 53b1c077d6 [RTL->HW] Rename C++ namespace, command line flags and a bunch of other stuff. 2021-05-15 14:33:45 -07:00
Chris Lattner 4d43103122 [RTL->HW] Rename the string "RTL" to "HW"
This makes sure not to rename FIRRTL to HWRTL :-), and I spot checked a
many things to avoid changing general references to RTL (e.g. when referring
to external tools) but I suspect that I missed some.  Please let me know (or
directly correct) any mistakes in this mechanical patch.
2021-05-15 12:44:05 -07:00
Chris Lattner 84c94e8920 Correct a header comment. 2021-05-15 12:31:54 -07:00
Chris Lattner f922d2d9fb [RTL->HW] Move one more file I missed. 2021-05-15 12:28:31 -07:00
Chris Lattner 61e70086c6 [RTL->HW] Move a few more files in conversions and documentation. NFC. 2021-05-15 12:23:45 -07:00
Chris Lattner 91f77cf64b [RTL->HW] Move RTL directory structure/filenames to HW. NFC
This doesn't change the types or stuff declared in the file, just moves
things into place.
2021-05-15 12:07:47 -07:00
John Demme b26c078849
[ESI] Fix ESI integration tests (#1028) 2021-05-07 15:13:08 -07:00
Fabian Schuiki c180d6a29d
[CAPI] Guard esi::exportCosimSchema by CAPNP ifdef (#1023)
* C API fails to link on builds that have CAPNP disabled, since some of
  the symbols in the C++ API get dropped. Make the corresponding uses in
  the C API conditional on the presence of the same ifdef, so things
  link again.
2021-05-07 08:24:49 +02:00
John Demme 510d46e815
[ESI] [Python] Adding a call for export capnp (#1015) 2021-05-06 15:56:58 -07:00
mikeurbach 68dee0e70b
[Python] [RTL] Add RTL pybind module with array and struct type. (#1002) 2021-05-06 11:38:32 -06:00
mikeurbach faa0e1827a
[Seq] Add C API for Seq dialect and pass registration. (#1006) 2021-05-04 19:06:12 -06:00
Stella Laurenzo cdc0dc114d
[POC] Create a python facility for custom/out of tree types. (#996)
* Uses it to create a sample ChannelType.
* Requires: https://reviews.llvm.org/D101734
* See https://gist.github.com/stellaraccident/4a73e395e5cc68a5244c8d88dd291396 for a hacky sample of this working.
* Attributes would be incremantal on top of this.

With this, defining a custom type is pretty simple:

```
  mlir_type_subclass(m, "ChannelType", circtESITypeIsAChannelType)
      .def_static("get",
                  [](MlirType inner) {
                    return py::cast(circtESIChannelTypeGet(inner));
                  })
      .def_property_readonly(
          "inner", [](MlirType self) { return circtESIChannelGetInner(self); });
```

I feel good enough about this mechanism to suggest that we just upstream it as a public header and then refactor the builtin types to use it, deprecating PyConcreteType and PyConcreteAttribute. It isn't necessary to couple these together, though, and landing in circt could let us get some mileage on it first.

I'm aware that to the uninitiated, some of the pybind goo may seem magic, but this is actually the *less* magical way to do this: it isn't using any spooky Pybind11/C++ level sharing and is doing the exact same thing as if you literally spelled out "class MyType(mlir.ir.Type):" in Python -- but of course, meta-programming that in C++ is a bit thicker :) It also interops pretty well with the existing CAPI<->Python casters, making this (I think) a strict improvement over even what we have upstream.

One thing I didn't get to is a `DefaultingMlirContext` helper (ended up not needing it), but this would be pretty easy to add.
2021-05-03 15:08:18 -07:00
John Demme 8183b7a961
[MSFT] [Python] Export tcl API call (#939)
* [MSFT] [Python] Export tcl API call

* clang-format
2021-04-21 10:50:24 -07:00
John Demme c15faa7fc4
[MSFT] [Python] Physically locate an op (#937)
Adds an API call to physically place an op's sub-entity.
2021-04-20 16:20:22 -07:00
John Demme ac14de2630
[Python] Register passes, export_verilog, and stack traces (#930)
- Registers the SV passes when the 'circt' Python module is imported and the ESI passes when 'circt.esi' is imported.
- Adds a Python 'export_verilog' call.
- Enables LLVM 'pretty' stack traces for easier debugging. Makes assertion messages appear in Python instead of just crashing with no output.
2021-04-19 22:05:40 -07:00
John Demme d3cfca3c6b
[ESI] C API and Python bindings (#870)
Just the ability to 'import' ESI into Python.
2021-04-02 14:09:20 -07:00
mikeurbach ca20bd3617
[CAPI] Add CAPI for RTL InOutType getters and isa. (#845) 2021-03-30 10:26:02 -06:00
George Lyon 2343f692d0
Bind more API to C (#705) 2021-03-02 09:38:29 -08:00
Andrew Young e1ca6eaaf9 Remove `using namespace mlir` from header files
This change aims to remove all instances of `using namespace mlir` from
our header files.  Many types have been manually imported into the
`circt` namespace in `circt/Support/LLVM.h`.  These types include all
core MLIR functionality types (IR, Diagnostic), utility types, rewrite
patterns and conversions, builtin IR types and attrs, and the module op.

Not imported were any operations (other than ModuleOp), matchers (e.g.
m_Zero), anything in the `impl` namespace, and interfaces.  There are
some problems with interface code generation from ODS, so some
interfaces were imported.

Some further cleanup would be useful to remove the `mlir::` namespace
qualifier where we no longer need it.
2021-02-16 02:25:06 -08:00
George Lyon b03db32b0f
[CAPI] Modernize dialect registration (#560) 2021-02-10 10:41:18 -08:00
George Lyon eb092323e6
[ExportVerilog][SV] C API (#481)
Co-authored-by: George <989903+GeorgeLyon@users.noreply.github.com>
2021-01-20 15:42:02 -08:00
Shivam Gupta fa58cbc431
Make dialects naming consistence by having foo/foobar.cpp rather than foo/bar.cpp (#372)
* make consistency in FIRRTL naming
* make consistency in RTL naming
* make consistency in StaticLogic naming
* make consistency in SV naming
* header naming correction
* minor fix
* run clang-format
* clang-format
* td format and fix lib/SV/ naming
* clang-format on /SV/
2020-12-27 09:42:19 -08:00
Shivam Gupta d98d2a1364
Rename library from libMLIRfoo to libCIRCTfoo (#357)
* change library name from libMLIRCAPIRTL to libCIRCTCAPIRTL

* change library name from liblibMLIRLLHDTransforms to libCIRCTLLHDTransforms

* change library name from liblibMLIRRTLToLLHD to libCIRCTRTLToLLHD

* rename library from liblibMLIRLLHDToLLVM to libCIRCTLLHDToLLVM

* rename library from libMLIRFIRRTLToLLHD to libCIRCTFIRRTLToLLHD

* rename library from libMLIRFIRRTLToRTL to libCIRCTFIRRTLToRTL

* rename library from libMLIRHandshakeToFIRRTL to libCIRCTHandshakeToFIRRTL

* rename library from libMLIRStandardToHandshake to libCIRCTStandardToHandshake

* rename library from libMLIRStandardToStaticLogic to libCIRCTStandardToStaticLogic

* rename library from libMLIRRTL to libCIRCTRTL

* rename library from libMLIRSV to libCIRCTSV

* rename library from libMLIRESI to libCIRCTESI

* rename library from libMLIRFIRRTL to libCIRCTFIRRTL

* rename library from libMLIRLLHD to libCIRCTLLHD

* rename library from libMLIRHandshakeOps to libCIRCTHandshakeOps

* rename library from libMLIRStaticLogicOps to libCIRCTStaticLogicOps

* alphabetically rearrange LIBS in CMakeLists.txt
2020-12-24 23:16:37 +05:30
Shivam Gupta 9f34d3742b
Add missing LLVM license info to file headers (#352)
* add LLVM license info to files header

* Add LLVM license info to files header

* Add LLVM license info to files header

* Add LLVM license info to file headers

* Revert "Add LLVM license info to files header"

This reverts commit 22869676ad.

* Add LLVM license info to file headers

* run git-clang-format

* add missing file descriptions

* run git clang-format

* Add LLVM license info to file headers

* Add LLVM license info to files header
2020-12-24 23:11:01 +05:30
Andrew Young 77f9520ea1
[CMAKE] Add circt library declaration helpers (#304) 2020-12-10 14:53:04 -05:00
George Lyon 2a9eb3506d
Create a minimal C API (#196)
* Enable cloning llvm submodule over HTTP

* Introduce C API

* Undo unrelated changes

* clang-format

* More format

* Add Header Comments

* Format

* Add basic test

* Add missing incantation

* Format

Co-authored-by: George <>
2020-11-04 11:37:51 -08:00