pointer to the first character of the string fragment (`str`) and the fragment
length (`length`). Note that the fragment is _not necessarily_ null-terminated,
the `length` field must be used to identify the last character. `MlirStringRef`
-is a non-owning pointer, the caller is in charge of perfoming the copy or
+is a non-owning pointer, the caller is in charge of performing the copy or
ensuring that the pointee outlives all uses of `MlirStringRef`.
### Printing
Ranked memrefs with static shape and default layout can be converted into an
LLVM dialect pointer to their element type. Only the default alignment is
-supported in such cases, e.g. the `alloc` operation cannot have an alignemnt
+supported in such cases, e.g. the `alloc` operation cannot have an alignment
attribute.
Examples:
When used as function arguments, both ranked and unranked memrefs are converted
into a list of arguments that represents each _scalar_ component of their
-descriptor. This is intended for some comaptibility with C ABI, in which
+descriptor. This is intended for some compatibility with C ABI, in which
structure types would need to be passed by-pointer leading to the need for
allocations and related issues, as well as for aliasing annotations, which are
currently attached to pointer in function arguments. Having scalar components
-means that each size and stride is passed as an invidivual value.
+means that each size and stride is passed as an individual value.
When used as function results, memrefs are converted as usual, i.e. each memref
is converted to a descriptor struct (default convention) or to a pointer (bare
ptr<"B", (ptr<"A">))>`. Note that the structure `B` is "unrolled" for both
elements. _A structure with the same name but different body is a syntax error._
**The user must ensure structure name uniqueness across all modules processed in
-a given MLIR context.** Stucture names are arbitrary string literals and may
+a given MLIR context.** Structure names are arbitrary string literals and may
include, e.g., spaces and keywords.
Identified structs may be _opaque_. In this case, the body is unknown but the
## TOSA and Tensor Level Expressiveness
TOSA endeavors to provide an operator set that tries to fulfil the following
-expressivenes goals at the *tensor level of abstraction* :
+expressiveness goals at the *tensor level of abstraction* :
### Complete
This is driven by the top-down perspective, needing to express as much of
multiple high level frameworks fully in TOSA, as possible. This was originally
done from an operator frequency analysis done upon dozens of high level
-networks in different frameworks, to select the most frequently occuring ones
+networks in different frameworks, to select the most frequently occurring ones
and establish a common set of tensor-level operators that could express them.
TOSA categorizes its operator set into classes and attempts to address major
`op-specific` pass operating on the same operation type as `OpPassManager`, or
an `op-agnostic` pass.
-An `OpPassManager` is generally creted by explicitly nesting a pipeline within
+An `OpPassManager` is generally created by explicitly nesting a pipeline within
another existing `OpPassManager` via the `nest<>` method. This method takes the
operation type that the nested pass manager will operate on. At the top-level, a
`PassManager` acts as an `OpPassManager`. Nesting in this sense, corresponds to
// CHECK-LABEL: @not_cancellable_operations_1
func @not_cancellable_operations_1(%arg0: !async.token, %arg1: i1) {
// Same reason as above, although `async.execute` is inside the nested
- // region or "regular" opeation.
+ // region or "regular" operation.
//
// NOTE: This test is not correct w.r.t. reference counting, and at runtime
// would leak %arg0 value if %arg1 is false. IR like this will not be
// Test Case: structured control-flow loop with a nested if operation.
// The loop yields buffers that have been defined outside of the loop and the
-// backeges only use the iteration arguments (or one of its aliases).
+// backedges only use the iteration arguments (or one of its aliases).
// Therefore, we do not have to (and are not allowed to) free any buffers
// that are passed via the backedges.
// that include this operation are constructed so that the normalization should
// happen.
// * test_op_nonnorm: this operation does not have the MemRefsNormalization
-// attribute. The tests that include this operation are contructed so that the
+// attribute. The tests that include this operation are constructed so that the
// normalization should not happen.
#map0 = affine_map<(d0, d1, d2, d3) -> (d0, d1, d2 floordiv 32, d3 floordiv 64, d2 mod 32, d3 mod 64)>
// Test Case: structured control-flow loop with a nested if operation.
// The loop yields buffers that have been defined outside of the loop and the
-// backeges only use the iteration arguments (or one of its aliases).
+// backedges only use the iteration arguments (or one of its aliases).
// Therefore, we do not have to (and are not allowed to) free any buffers
// that are passed via the backedges. The alloc is converted to an AllocaOp.
LogicalResult matchAndRewrite(Operation *op,
PatternRewriter &rewriter) const override {
- // Exercice OperationFolder API for a single-result operation that is folded
+ // Exercise OperationFolder API for a single-result operation that is folded
// upon construction. The operation being created through the folder has an
// in-place folder, and it should be still present in the output.
// Furthermore, the folder should not crash when attempting to recover the
void registerTestSparsification() {
PassRegistration<TestSparsification> sparsificationPass(
"test-sparsification",
- "Test automatic geneneration of sparse tensor code");
+ "Test automatic generation of sparse tensor code");
}
} // namespace test
void printRegionBuilder(llvm::raw_ostream &os, StringRef cppOpName,
ComprehensionParsingState &state);
- /// Print the C++ impl for named ops canonicalizers and fodlers.
+ /// Print the C++ impl for named ops canonicalizers and folders.
void printCanonicalizersAndFolders(llvm::raw_ostream &os,
StringRef cppOpName);
if (region.name.empty())
continue;
- // Generate the accessors for a varidiadic region.
+ // Generate the accessors for a variadic region.
if (region.isVariadic()) {
auto *m = opClass.addMethodAndPrune("::mlir::MutableArrayRef<Region>",
region.name);
FmtContext verifyCtx;
populateSubstitutions(op, "odsAttrs.get", "getODSOperands",
- "<no results should be genarated>", verifyCtx);
+ "<no results should be generated>", verifyCtx);
genAttributeVerifier(op, "odsAttrs.get",
Twine("emitError(loc, \"'") + op.getOperationName() +
"' op \"",
/// {0}: Storage class namespace.
/// {1}: Storage class c++ name.
/// {2}: Parameters parameters.
-/// {3}: Parameter initialzer string.
+/// {3}: Parameter initializer string.
/// {4}: Parameter name list.
/// {5}: Parameter types.
static const char *const typeDefStorageClassBegin = R"(