Stella Laurenzo [Tue, 23 Apr 2019 00:35:38 +0000 (17:35 -0700)]
Implement lowering of quant.dcast to the fxpmathops and standard dialect.
Note that I broke this out as a separate pass because intermediate transformations often produce qcast/dcast ops that are integral to the transformation, and it is typical to want to lower any remaining, unmatched casts at the end of quantization. If this flexibility ends up not being needed, they can be collapsed into the same pass. This is included in the same cpp file because all of the math ops will need to defer to emitting quantize/dequantize logic for cases that they cannot be fully lowered to fixed-point math.
Also, the new convertistof op needs to be evaluated for inclusion in StandardOps.
--
PiperOrigin-RevId:
244768679
Feng Liu [Mon, 22 Apr 2019 23:06:09 +0000 (16:06 -0700)]
Apply patterns repeatly if the function is modified
During the pattern rewrite, if the function is changed, i.e. ops created,
deleted or swapped, the pattern rewriter needs to re-scan the function entirely
and apply the patterns again, so the patterns whose root ops have been popped
out from the working list nor an immediate users of the changed ops can be
reconsidered.
A command line flag is added to set the max number of iterations rescanning the
function for pattern match. If the rewrite doesn' converge after this number,
this compiling will continue and the result can be sub-optimal.
One unit test is updated because this change fixed the missing optimization opportunities.
--
PiperOrigin-RevId:
244754190
Lei Zhang [Mon, 22 Apr 2019 21:56:54 +0000 (14:56 -0700)]
[TableGen] Clean up comments regarding op and result
An op can have multiple results. Being explicit that we are binding to the
whole op instead of one of the results. A way to bind to a specific result
is yet to come.
--
PiperOrigin-RevId:
244741137
Lei Zhang [Mon, 22 Apr 2019 21:13:45 +0000 (14:13 -0700)]
[TableGen] Unify cOp and tAttr into NativeCodeCall
Both cOp and tAttr were used to perform some native C++ code expression.
Unifying them simplifies the concepts and reduces cognitive burden.
--
PiperOrigin-RevId:
244731946
Lei Zhang [Mon, 22 Apr 2019 20:40:30 +0000 (13:40 -0700)]
[TableGen] Capture bound source ops in PatternState
This allows accessing those bound source ops in result patterns, which can be
useful for invoking native C++ op creation.
We bind the op entirely here because ops can have multiple results. Design a
approach to bind to a specific result is not the concern of this commit.
--
PiperOrigin-RevId:
244724750
Jacques Pienaar [Sat, 20 Apr 2019 17:45:59 +0000 (10:45 -0700)]
Update lib path in whole_archive_link.
The added library path is now specified explicitly wrt top-level build directory.
--
PiperOrigin-RevId:
244507187
Lei Zhang [Sat, 20 Apr 2019 11:05:38 +0000 (04:05 -0700)]
Use StringRef::drop_while() to simplify a while loop
--
PiperOrigin-RevId:
244488612
Mehdi Amini [Fri, 19 Apr 2019 22:26:52 +0000 (15:26 -0700)]
Add references to the EuroLLVM talks in the README
--
PiperOrigin-RevId:
244433092
Stella Laurenzo [Fri, 19 Apr 2019 21:41:31 +0000 (14:41 -0700)]
Simplify and enable pretty-parsing/printing of the uniform quantized types.
The per-layer format is now like:
!quant.uniform<i8<-8:7>:f32, 9.987200e-01:127>
and per-axis is:
!quant.uniform<i8:f32:1, {2.0e+2,0.99872:120}>
I used the following sed script to update the unit tests (invoked with commands like `sed -i -r -f fix_quant.sed $(find . -name '*.mlir')`).
---
# Per-layer
s|\!quant<"uniform\[([iu][0-9]+):([fb]+[0-9]+)\]\{([^\}]+)\}\s*">|!quant.uniform<\1:\2, \3>|g
s|\!quant<"uniform\[([iu][0-9]+)\(([^\)]+)\):([fb]+[0-9]+)\]\{([^\}]+)\}\s*">|!quant.uniform<\1<\2>:\3, \4>|g
# Per-axis
s|\!quant<"uniform\[([iu][0-9]+):([fb]+[0-9]+)(:[0-9]+)?\]\{([^\}]+)\}\s*">|!quant.uniform<\1:\2\3, {\4}>|g
s|\!quant<"uniform\[([iu][0-9]+)\(([^\)]+)\):([fb]+[0-9]+)(:[0-9]+)?\]\{([^\}]+)\}\s*">|!quant.uniform<\1<\2>:\3\4, {\5}>|g
---
I fixed up the one file of error cases manually.
Since this is a one time syntax fix, I am not persisting the script anywhere.
--
PiperOrigin-RevId:
244425331
Nicolas Vasilache [Fri, 19 Apr 2019 19:55:34 +0000 (12:55 -0700)]
[Linalg] Add a slice op
This CL adds a linalg.slice op with the proper roundtripping test.
A slice op allows taking subviews that may be rank-reducing (if some indexing is of index type) or not (if all indexings are of linalg.range type).
A slice must be constructed directly from a base view (no chains of slices may exist in the IR). Helper functions that fold will be provided for construction if/when necessary.
This also renames base_view to view.
--
PiperOrigin-RevId:
244406827
Nicolas Vasilache [Fri, 19 Apr 2019 16:56:11 +0000 (09:56 -0700)]
[Linalg] Add a view type with base_view op
This CL adds a linalg.view<?x?xf32> type and base_view op with the proper roundtripping test. The parser will be improved in a subsequent CL once portions of the mlir::Parser are exposed.
For now this only supports dynamic views, static views will be introduced at a later time when they are needed.
--
PiperOrigin-RevId:
244374180
Stella Laurenzo [Fri, 19 Apr 2019 00:06:05 +0000 (17:06 -0700)]
Implement lowering of element-wise fixed point add and mul to the standard dialect.
This also does the following:
- Removes the poc POT add implementation in favor of a version that does not rescale.
- Adds a handful of FxpMathOps which are needed (these are for comment and we may want to move them to the StandardOps dialect).
- Adds a canonicalizer to the StorageCastOp, which removes some cruft once conversions have been done.
- Adds a couple of predicates to OpBase.
--
PiperOrigin-RevId:
244287706
Guangda Lai [Thu, 18 Apr 2019 22:27:32 +0000 (15:27 -0700)]
Fix typo (transpose -> reshape).
--
PiperOrigin-RevId:
244270801
Nicolas Vasilache [Thu, 18 Apr 2019 20:56:18 +0000 (13:56 -0700)]
[Linalg] Add a simple buffer type with alloc/dealloc ops
This CL adds a linalg.buffer<f32> type and buffer_alloc / buffer_dealloc ops with the proper roundtripping test.
--
PiperOrigin-RevId:
244252306
Nicolas Vasilache [Thu, 18 Apr 2019 15:25:54 +0000 (08:25 -0700)]
Start a Linalg dialect
This CL starts implementing a Linalg dialect with the objective of supporting
optimizing compilation of loops and library calls for a subset of common linear
algebra operations.
This CL starts by simply adding a linalg.range type and an operation with the
proper roundtripping test.
--
PiperOrigin-RevId:
244189468
Lei Zhang [Thu, 18 Apr 2019 12:10:03 +0000 (05:10 -0700)]
Fix MLIRTableGenTests target_link_libraries typo
--
PiperOrigin-RevId:
244168112
Lei Zhang [Thu, 18 Apr 2019 11:04:57 +0000 (04:04 -0700)]
[TableGen] Simplify NOperands trait generation
--
PiperOrigin-RevId:
244162515
Jacques Pienaar [Thu, 18 Apr 2019 03:56:00 +0000 (20:56 -0700)]
Simplify build instructions.
--
PiperOrigin-RevId:
244120877
Nicolas Vasilache [Wed, 17 Apr 2019 21:41:33 +0000 (14:41 -0700)]
Use proper C++ casts in Types.h
This CL reduces the amount of warning spew when compiling with CMake on Linux.
--
PiperOrigin-RevId:
244070668
Nicolas Vasilache [Wed, 17 Apr 2019 21:38:45 +0000 (14:38 -0700)]
Use proper C++ casts in Location.h
This CL reduces the amount of warning spew when compiling with CMake on Linux.
--
PiperOrigin-RevId:
244070052
Amit Sabne [Wed, 17 Apr 2019 20:39:41 +0000 (13:39 -0700)]
Fix LLVM_DEBUG instances
--
PiperOrigin-RevId:
244058051
Amit Sabne [Wed, 17 Apr 2019 19:18:37 +0000 (12:18 -0700)]
Loop invariant code motion.
--
PiperOrigin-RevId:
244043679
Feng Liu [Wed, 17 Apr 2019 15:31:39 +0000 (08:31 -0700)]
Move QuantTypes out of QuantOps to match the file structures of other dialects
This CL also moved the UniformSupport.cpp and FakeQuantSupport.cpp into utils because they are not really the core of the IR.
--
PiperOrigin-RevId:
244001666
Stella Laurenzo [Wed, 17 Apr 2019 01:36:24 +0000 (18:36 -0700)]
Bring naming of some quant ops in alignment with docs and introduce a few necessary additional ops (stats_ref, stats, coupled_ref).
--
PiperOrigin-RevId:
243919195
MLIR Team [Tue, 16 Apr 2019 23:47:41 +0000 (16:47 -0700)]
Add NewLine for Attribute dump()
--
PiperOrigin-RevId:
243904869
Yanan Cao [Tue, 16 Apr 2019 23:12:00 +0000 (16:12 -0700)]
Add DebugStringHelper, which makes it easier to get a string from a dump method
--
PiperOrigin-RevId:
243899072
Nicolas Vasilache [Tue, 16 Apr 2019 21:11:25 +0000 (14:11 -0700)]
Fix SliceAnalysis comment
The description of the backward slice analysis behavior describes what would happen when creating a backward slice from node 9, not 8.
--
PiperOrigin-RevId:
243876599
Lei Zhang [Tue, 16 Apr 2019 20:20:38 +0000 (13:20 -0700)]
[TableGen] Fix builder for ops with one variadic input and SameValueType
For ops with the SameValueType trait, we generate a builder without requiring
result type; we get the result type from the operand. However, if the operand
is variadic, we need to index into the first value in the pack.
--
PiperOrigin-RevId:
243866647
Jacques Pienaar [Mon, 15 Apr 2019 23:32:00 +0000 (16:32 -0700)]
Abort via report_fatal_error if dialect has been registered.
Fixes test in opt mode.
Closes: tensorflow/mlir#17.
--
PiperOrigin-RevId:
243711043
Geoffrey Martin-Noble [Mon, 15 Apr 2019 21:08:41 +0000 (14:08 -0700)]
TypedTuple: Add support for tuples with type constraints on the elements.
--
PiperOrigin-RevId:
243685631
Lei Zhang [Mon, 15 Apr 2019 16:13:22 +0000 (09:13 -0700)]
[TableGen] Fix support for ops whose names have a leading underscore
TensorFlow ops have the convention to use leading underscore to denote
internal ops.
--
PiperOrigin-RevId:
243627723
Chris Lattner [Sun, 14 Apr 2019 20:41:09 +0000 (13:41 -0700)]
Expand the pretty dialect type system to support arbitrary punctuation and
other characters within the <>'s now that we can. This will allow quantized
types to use the pretty syntax (among others) after a few changes.
--
PiperOrigin-RevId:
243521268
Smit Hinsu [Fri, 12 Apr 2019 17:31:21 +0000 (10:31 -0700)]
Fix CHECK-EMPTY directives without trailing colon
There are no empty lines in output for three of these directives so removed
them and replaced the remaining one with 'CHECK-NOT:' as otherwise it is
failing with the following error.
error: found 'CHECK-EMPTY' without previous 'CHECK: line
TESTED = n/a
PiperOrigin-RevId:
243288605
Smit Hinsu [Fri, 12 Apr 2019 17:24:59 +0000 (10:24 -0700)]
NFC: Simplify named attribute in TableGen generators
Now, op attribute names don't have '.' in their names so the special handling for it
can be removed. Attributes for functions still have dialect prefix with '.' as separator but TableGen does not deal with functions.
TESTED with existing unit tests
--
PiperOrigin-RevId:
243287462
Lei Zhang [Fri, 12 Apr 2019 16:52:11 +0000 (09:52 -0700)]
[TableGen] Allocate `Operator` object on heap in `RecordOperatorMap`
Iterators for a `llvm::DenseMap` can be invalidated when an insertion occurs.
In Pattern's `collectBoundArguments()`, we recursively handle all nested DAG
nodes and grow the the `RecordOperatorMap`, while retaining a reference.
This can cause the reference to be invalid and the program to behave randomly.
Allocate each `Operator` object specifically to solve this issue.
Also, `llvm::DenseMap` is a great way to map pointers to pointers, or map
other small types to each other. This avoids placing the `Operator` object
directly into the map.
--
PiperOrigin-RevId:
243281486
Lei Zhang [Fri, 12 Apr 2019 13:05:49 +0000 (06:05 -0700)]
[TableGen] Use `tgfmt` to format various predicates and rewrite rules
This CL changes various predicates and rewrite rules to use $-placeholders and
`tgfmt` as the driver for substitution. This will make the predicates and rewrite
rules more consistent regarding their arguments and more readable.
--
PiperOrigin-RevId:
243250739
Lei Zhang [Fri, 12 Apr 2019 12:57:50 +0000 (05:57 -0700)]
[TableGen] Better support for predicate and rewrite rule specification
Currently predicates are written with positional placeholders `{N}` and rely on
`formatv` as the engine to do substitution. The problem with this approach is that
the definitions of those positional placeholders are not consistent; they are
entirely up to the defining predicate of question. For example, `{0}` in various
attribute constraints is used to mean the attribute, while it is used to main the
builder for certain attribute transformations. This can become very confusing.
This CL introduces `tgfmt` as a new mechanism to better support for predicate and
rewrite rule specification. Instead of entirely relying on positional placeholders,
`tgfmt` support both positional and special placeholders. The former is used for
DAG operands. The latter, including $_builder, $_op, $_self, are used as special
"hooks" to entities in the context. With this, the predicate and rewrite rules
specification can be more consistent is more readable.
--
PiperOrigin-RevId:
243249671
Chris Lattner [Fri, 12 Apr 2019 05:29:21 +0000 (22:29 -0700)]
Update the Rationale's description about signed/unsigned and int/fp types to be more specific about the fact that this only refers to std operations. Move these sections closer together.
--
PiperOrigin-RevId:
243204948
Mehdi Amini [Thu, 11 Apr 2019 20:19:46 +0000 (13:19 -0700)]
Update documentation for the DialectOpconversion class: overriding `match()` is optional
Recently a default implementation for `match()` was provided (cl/
242285885), but the class documentation wasn't updated appropriately.
--
PiperOrigin-RevId:
243128738
Lei Zhang [Thu, 11 Apr 2019 19:34:50 +0000 (12:34 -0700)]
Add missing dependencies for EDSC and linalg libraries
This solves the missing "mlir/StandardOps/Ops.h.inc" issue when building
a fresh checkout on macOS.
--
PiperOrigin-RevId:
243120388
Geoffrey Martin-Noble [Thu, 11 Apr 2019 00:16:19 +0000 (17:16 -0700)]
Add support for statically shaped and typed tensors
--
PiperOrigin-RevId:
242972594
Stella Laurenzo [Wed, 10 Apr 2019 23:53:03 +0000 (16:53 -0700)]
Update custom rewrite example, which seems to have drifted a bit from the implementation.
PiperOrigin-RevId:
242968685
Stella Laurenzo [Wed, 10 Apr 2019 19:37:45 +0000 (12:37 -0700)]
Update the FxpMathOps to better reflect what is needed to legalize from XLA.
--
PiperOrigin-RevId:
242919924
Lei Zhang [Wed, 10 Apr 2019 18:37:53 +0000 (11:37 -0700)]
[TableGen] Support naming rewrite rules
--
PiperOrigin-RevId:
242909061
Lei Zhang [Wed, 10 Apr 2019 15:00:34 +0000 (08:00 -0700)]
Remove checks guaranteed to be true by the type
This addresses the compiler wraning of "comparison of unsigned expression
>= 0 is always true [-Wtype-limits]".
--
PiperOrigin-RevId:
242868703
Lei Zhang [Wed, 10 Apr 2019 15:00:20 +0000 (08:00 -0700)]
Add parentheses in various asserts to group predicates
This addresses the "suggest parentheses around ‘&&’ within ‘||’
[-Wparentheses]" compiler warnings.
--
PiperOrigin-RevId:
242868670
Lei Zhang [Wed, 10 Apr 2019 15:00:05 +0000 (08:00 -0700)]
Use hexadecimal constants instead of binary constants
This addresses the "binary constants are a C++14 feature or GCC
extension" compiler warnings.
--
PiperOrigin-RevId:
242868639
Stephan Herhut [Wed, 10 Apr 2019 09:27:30 +0000 (02:27 -0700)]
Add conversion of StandardOps and, or and xor to LLVM dialect.
--
PiperOrigin-RevId:
242831203
Andy Davis [Tue, 9 Apr 2019 19:21:28 +0000 (12:21 -0700)]
Factor code to compute dependence components out of loop fusion pass, and into a reusable utility function (NFC).
--
PiperOrigin-RevId:
242716259
Amit Sabne [Tue, 9 Apr 2019 16:17:40 +0000 (09:17 -0700)]
Fix typos in LoopFusion
--
PiperOrigin-RevId:
242679298
Nicolas Vasilache [Tue, 9 Apr 2019 08:24:35 +0000 (01:24 -0700)]
Start a Linalg doc
--
PiperOrigin-RevId:
242622278
Mehdi Amini [Tue, 9 Apr 2019 07:19:40 +0000 (00:19 -0700)]
Expose `setupTargetTriple` as a public static method on ExecutionEngine
This allows client to be able to reuse the same logic to setup a module
for the ExecutionEngine without instanciating one. One use case is running
the optimization pipeline but not JIT-ing.
--
PiperOrigin-RevId:
242614380
Mehdi Amini [Tue, 9 Apr 2019 06:24:25 +0000 (23:24 -0700)]
Fix Toy cmake build: add missing includes
--
PiperOrigin-RevId:
242609231
Mehdi Amini [Tue, 9 Apr 2019 06:00:49 +0000 (23:00 -0700)]
Toy tutorial Chapter 5: Lowering to Linalg and LLVM
--
PiperOrigin-RevId:
242606796
Mehdi Amini [Tue, 9 Apr 2019 05:37:37 +0000 (22:37 -0700)]
Automated rollback of changelist
242546977.
PiperOrigin-RevId:
242604949
Mehdi Amini [Tue, 9 Apr 2019 02:21:06 +0000 (19:21 -0700)]
Use c++14 for building with CMake
This is getting rid of some warnings, and C++14 is supposed to be
the default soon anyway.
--
PiperOrigin-RevId:
242587219
Lei Zhang [Mon, 8 Apr 2019 22:14:59 +0000 (15:14 -0700)]
[TableGen] Make sure op in pattern has the same number of arguments as definition
When an op in the source pattern specifies more arguments than its definition, we
will have out-of-bound query for op arguments from the definition. That will cause
crashes. This change fixes it.
--
PiperOrigin-RevId:
242548415
Nicolas Vasilache [Mon, 8 Apr 2019 22:06:34 +0000 (15:06 -0700)]
De-templatize TensorContractionBase (Linalg example/tutorial)
TensorContractionBase has become too unwieldy with all the CRTP manipulation once less trivial transformations are implemented.
This CL drops CRTP for inheritance and uses the same name comparison trick to figure out what to cast into.
As a byproduct, all the -inl.h files disappear.
To maintain the separation between directories, a LINALG_STEP variable is introduced
--
PiperOrigin-RevId:
242546977
Ashwin Murthy [Mon, 8 Apr 2019 21:32:39 +0000 (14:32 -0700)]
Add TabelGen support to logically AND a list of attribute constraints.
This is the AllOf version for AttrConstraint and allows specifying the combined constraint during pattern match.
--
PiperOrigin-RevId:
242540243
Nicolas Vasilache [Mon, 8 Apr 2019 13:47:06 +0000 (06:47 -0700)]
Add CMakeLists rules for Linalg
--
PiperOrigin-RevId:
242454319
Stephan Herhut [Mon, 8 Apr 2019 12:53:59 +0000 (05:53 -0700)]
Add xor bitwise operation to StandardOps.
This adds parsing, printing and some folding/canonicalization.
Also extends rewriting of subi %0, %0 to handle vectors and tensors.
--
PiperOrigin-RevId:
242448164
Nicolas Vasilache [Mon, 8 Apr 2019 12:07:01 +0000 (05:07 -0700)]
Fix build for the Linalg example dialect with MacOS
--
PiperOrigin-RevId:
242443831
Alex Zinenko [Mon, 8 Apr 2019 10:34:11 +0000 (03:34 -0700)]
Example Linalg3: manually register the Linalg dialect
This dialect does not have a global constructor and has to be registered
manually in `main`. Also fix the way it is exercised in the test.
--
PiperOrigin-RevId:
242434886
Alex Zinenko [Mon, 8 Apr 2019 10:11:12 +0000 (03:11 -0700)]
Change initialization syntax for ScopedContext in examples
For some reason, the OSS build on macOS was not happy with the initialization
syntax and was attempting to call a copy constructor. Hotfix it to use a
different syntax pending further investigation.
--
PiperOrigin-RevId:
242432634
Stephan Herhut [Mon, 8 Apr 2019 07:00:46 +0000 (00:00 -0700)]
Add and and or bitwise operations to StandardOps.
This adds parsing, printing and some folding/canonicalization.
--
PiperOrigin-RevId:
242409840
Mehdi Amini [Mon, 8 Apr 2019 06:30:58 +0000 (23:30 -0700)]
Fix bug in Toy tutorial where IR emission stopped after any `print`
--
PiperOrigin-RevId:
242407970
Mehdi Amini [Mon, 8 Apr 2019 00:11:02 +0000 (17:11 -0700)]
Introduce std.varargs attribute to mark variadic arguments functions
This is only teaching the LLVM converter to propagate the attribute onto
the function type. MLIR will not recognize this arguments, so it would only
be useful when calling for example `printf` with the same arguments across
a module. Since varargs is part of the ABI lowering, this is not NFC.
--
PiperOrigin-RevId:
242382427
Mehdi Amini [Sun, 7 Apr 2019 21:34:31 +0000 (14:34 -0700)]
Do not mark llvm.return, llvm.br, llvm.cond_br operations as having no side effects.
The canonicalizer is taking advantage of this to kill them.
--
PiperOrigin-RevId:
242374166
Mehdi Amini [Sun, 7 Apr 2019 20:12:48 +0000 (13:12 -0700)]
Fix Linalg3 lowering to use the floating point element type matching the view
It used to be hardcoded to f32, but Toy tutorial is using f64.
--
PiperOrigin-RevId:
242370172
Mehdi Amini [Sun, 7 Apr 2019 12:42:21 +0000 (05:42 -0700)]
Add support for f64 type conversion for Linalg dialect to LLVM lowering
--
PiperOrigin-RevId:
242345259
Tatiana Shpeisman [Sun, 7 Apr 2019 02:49:38 +0000 (19:49 -0700)]
Fix cond_br example.
PiperOrigin-RevId:
242314071
Tatiana Shpeisman [Sun, 7 Apr 2019 02:39:53 +0000 (19:39 -0700)]
Documentation fix - use '_' instead of '.' in the type alias example.
PiperOrigin-RevId:
242313674
Tatiana Shpeisman [Sun, 7 Apr 2019 02:31:19 +0000 (19:31 -0700)]
Documentation fix - complex type is a standard type
PiperOrigin-RevId:
242313280
Mehdi Amini [Sat, 6 Apr 2019 17:53:00 +0000 (10:53 -0700)]
Filter DialectConversion pattern to be considered only if the root kind matches the operation.
This is the same logic as the PatterRewriter.
--
PiperOrigin-RevId:
242287241
Mehdi Amini [Sat, 6 Apr 2019 17:27:56 +0000 (10:27 -0700)]
Provide a default implementation for matching: most DialectOpConversion implementations are unconditionally matching.
This will help removing boilerplate.
--
PiperOrigin-RevId:
242285885
Chris Lattner [Sat, 6 Apr 2019 06:56:49 +0000 (23:56 -0700)]
Change the asmprinter to use pretty syntax for dialect types when it can,
making the IR dumps much nicer.
This is part 2/3 of the path to making dialect types more nice. Part 3/3 will
slightly generalize the set of characters allowed in pretty types and make it
more principled.
--
PiperOrigin-RevId:
242249955
Chris Lattner [Sat, 6 Apr 2019 02:36:42 +0000 (19:36 -0700)]
Introduce support for parsing pretty dialect types, currently with a very
restricted grammar. This will make certain common types much easier to read.
This is part tensorflow/mlir#1 of 2, which allows us to accept the new syntax. Part 2 will
change the asmprinter to automatically use it when appropriate, which will
require updating a bunch of tests.
This is motivated by the EuroLLVM tutorial and cleaning up the LLVM dialect aesthetics a bit more.
--
PiperOrigin-RevId:
242234821
Andy Davis [Sat, 6 Apr 2019 01:34:49 +0000 (18:34 -0700)]
Remove/replace TPU-specific instruction references and memref spaces in LangRef.md
Remove undesigned/unimplemented operations: reshape and view.
Add new LangRefDeletions.md file in /experimental to store things removed from public LangRef.md
PiperOrigin-RevId:
242230200
River Riddle [Fri, 5 Apr 2019 23:11:24 +0000 (16:11 -0700)]
Add iterator support to DenseIntElementsAttr and DenseFPElementsAttr. This avoids the need to load all of the values from a DenseElementsAttr inorder to process them.
--
PiperOrigin-RevId:
242212741
Ashwin Murthy [Fri, 5 Apr 2019 22:51:47 +0000 (15:51 -0700)]
Add attr constraint support to constrain IntegerArray attribute values at a specified index.
--
PiperOrigin-RevId:
242209394
Nicolas Vasilache [Fri, 5 Apr 2019 20:20:05 +0000 (13:20 -0700)]
Post commit cleanups to the Linalg dialect
--
PiperOrigin-RevId:
242181687
River Riddle [Fri, 5 Apr 2019 19:24:03 +0000 (12:24 -0700)]
Add new utilities for RTTI Operation casting: dyn_cast_or_null and isa_nonnull
* dyn_cast_or_null
- This will first check if the operation is null before trying to 'dyn_cast':
Value *v = ...;
if (auto forOp = dyn_cast_or_null<AffineForOp>(v->getDefiningOp()))
...
* isa_nonnull
- This will first check if the pointer is null before trying to 'isa':
Value *v = ...;
if (isa_nonnull<AffineForOp>(v->getDefiningOp());
...
--
PiperOrigin-RevId:
242171343
Lei Zhang [Fri, 5 Apr 2019 19:19:22 +0000 (12:19 -0700)]
Add methods for building array attributes in Builder
I32/I64/F32/F64/Str array attributes are commonly used in ops. It helps
to have handy methods for them.
--
PiperOrigin-RevId:
242170569
River Riddle [Fri, 5 Apr 2019 15:19:42 +0000 (08:19 -0700)]
Tidy up the links in the documents and fix any broken ones.
--
PiperOrigin-RevId:
242127863
Alex Zinenko [Fri, 5 Apr 2019 15:18:13 +0000 (08:18 -0700)]
Linalg3 example: implement JIT-compilation and execution
Use MLIR's ExecutionEngine to demonstrate how one can implement a simple
JIT-compiler and executor after fully lowering the Linalg dialect to the LLVM
IR dialect, using the direct conversion (not going through standard
loads/stores).
--
PiperOrigin-RevId:
242127690
Alex Zinenko [Fri, 5 Apr 2019 15:15:41 +0000 (08:15 -0700)]
ExecutionEngine: allow for running MLIR passes during JIT-compilation
The existing implementation of the ExecutionEngine unconditionally runs a list
of "default" MLIR passes on the module upon creation. These passes include,
among others, dialect conversions from affine to standard and from standard to
LLVM IR dialects. In some cases, these conversions might have been performed
before ExecutionEngine is created. More advanced use cases may be performing
additional transformations that the "default" passes will conflict with.
Provide an overload for ExecutionEngine::create that takes a PassManager
configured with the passes to run on the module. If it is not provided, do not
run any passes. The engine will not be created if the input module, after the
pass manager, has any other dialect than the LLVM IR dialect.
--
PiperOrigin-RevId:
242127393
Mehdi Amini [Fri, 5 Apr 2019 14:39:48 +0000 (07:39 -0700)]
Fix CMake build: reflect that a new file Utils/ConstantFoldUtils.cpp was added
--
PiperOrigin-RevId:
242123122
Mehdi Amini [Fri, 5 Apr 2019 14:30:16 +0000 (07:30 -0700)]
Add mentions of requirements before the build instructions
The `Getting Started` instructions requires git, ninja, and a working C++ host toolchain.
--
PiperOrigin-RevId:
242121953
Lei Zhang [Fri, 5 Apr 2019 14:22:28 +0000 (07:22 -0700)]
[TableGen] Support array attribute subclasses and constraints
To support automatically constraint composition of ArrayAttr, a new
predicate combiner, Concat, is introduced. It prepends a prefix and
appends a postfix to a child predicate's final predicate string.
--
PiperOrigin-RevId:
242121186
Mehdi Amini [Fri, 5 Apr 2019 10:52:59 +0000 (03:52 -0700)]
Fix CMake build: account for renamed files and add missing include on MacOS
--
PiperOrigin-RevId:
242101364
Nicolas Vasilache [Fri, 5 Apr 2019 02:57:42 +0000 (19:57 -0700)]
Linalg portion of the tutorial - part 4
This CL adds declarative tiling support in the linalg dialect by providing:
1. loop tiling on linalg ops by simply calling into mlir::tile
2. view tiling on linalg ops by:
a. computing the subview between for each tile dimension based on the loop tile size and the mapping of loops to operand ranges.
b. declaring that the tiled form of a tensorcontraction is the same tensorcontraction on subviews, which essentially gives us a recursive form.
Point 2.b is potentially subject to change in the future.
--
PiperOrigin-RevId:
242058658
River Riddle [Fri, 5 Apr 2019 01:34:41 +0000 (18:34 -0700)]
NFC: Fix a few typos in the tutorials and one in the comment of FunctionAttr::dropFunctionReference.
--
PiperOrigin-RevId:
242050934
Mehdi Amini [Fri, 5 Apr 2019 01:31:31 +0000 (18:31 -0700)]
Add Chapter 4 for the Toy tutorial: shape inference, function specialization, and basic combines
--
PiperOrigin-RevId:
242050514
Mehdi Amini [Fri, 5 Apr 2019 01:22:17 +0000 (18:22 -0700)]
Add mention that we don't (yet) accept contributions in the README
--
PiperOrigin-RevId:
242049527
Nicolas Vasilache [Fri, 5 Apr 2019 00:54:41 +0000 (17:54 -0700)]
Linalg portion of the tutorial - part 3-3
This CL adds the last bit to convert from linalg.LoadOp and linalg.StoreOp to the affine dialect, as well as a unit test to exercise the conversion.
--
PiperOrigin-RevId:
242045826
River Riddle [Thu, 4 Apr 2019 23:24:10 +0000 (16:24 -0700)]
NFC: Replace usages of iterator_range<operand_iterator> with operand_range.
--
PiperOrigin-RevId:
242031201
River Riddle [Thu, 4 Apr 2019 23:01:45 +0000 (16:01 -0700)]
Introduce a new class, MultiOperandTraitBase, to deduplicate the operand accessors for traits with multiple operands.
As part of this cleanup, NOperands<0>::Impl and NOperands<1>::Impl are typedef'd to ZeroOperands and OneOperand respectively.
--
PiperOrigin-RevId:
242027189
River Riddle [Thu, 4 Apr 2019 22:30:34 +0000 (15:30 -0700)]
NFC: Fix erroneous use of 'OpaqueType' with 'Type' when setting the ToyTypeKind, as well as a few mistakes in Chapter 2 of the Toy tutorial.
--
PiperOrigin-RevId:
242021477
MLIR Team [Thu, 4 Apr 2019 22:19:17 +0000 (15:19 -0700)]
Create a LoopUtil function to return perfectly nested loop set
--
PiperOrigin-RevId:
242019230
River Riddle [Thu, 4 Apr 2019 21:42:18 +0000 (14:42 -0700)]
Iterate on the operations to fold in TestConstantFold in reverse to remove the need for ConstantFoldHelper to have a flag for insertion at the head of the entry block. This also fixes an asan bug in TestConstantFold due to the iteration order of operations and ConstantFoldHelper's constant insertion placement.
Note: This now means that we cannot fold chains of operations, i.e. where constant foldable operations feed into each other. Given that this is a testing pass solely for constant folding, this isn't really something that we want anyways. Constant fold tests should be simple and direct, with more advanced folding/feeding being tested with the canonicalizer.
--
PiperOrigin-RevId:
242011744