[Mlir-commits] [clang] [flang] [mlir] [mlir] Replace non-ASCII characters for tablegen output (PR #235019)

Andy Kaylor llvmlistbot at llvm.org
Fri Oct 23 09:47:15 PDT 2026


https://github.com/andykaylor created https://github.com/llvm/llvm-project/pull/235019

When the CIR build was enabled by default, it exposed a problem where a bunch of tablegen commands were failing on z/OS builds because we were trying to emit non-ASCII characters and z/OS didn't like that. Some of these characters also show up as blocks on older fonts like Courier New.

This change replaces these characters with ASCII equivalents.

I used Cursor for the replacements, but I have reviewed them all and they look reasonable to me.

>From c8b4460d8019026a06fc3f9d53276e6eed96c8e1 Mon Sep 17 00:00:00 2001
From: Andy Kaylor <akaylor at nvidia.com>
Date: Thu, 22 Oct 2026 13:05:33 -0700
Subject: [PATCH] [mlir] Replace non-ASCII characters for tablegen output

When the CIR build was enabled by default, it exposed a problem where a
bunch of tablegen commands were failing on z/OS builds because we were
trying to emit non-ASCII characters and z/OS didn't like that.

This change replaces these characters with ASCII equivalents.

I used Cursor for the replacements, but I have reviewed them all and they
look reasonable to me.
---
 .../include/clang/CIR/Dialect/IR/CIRAttrs.td  |  2 +-
 clang/include/clang/CIR/Dialect/IR/CIROps.td  | 14 ++++++------
 .../flang/Optimizer/Dialect/MIF/MIFOps.td     |  2 +-
 .../mlir/Dialect/Affine/IR/AffineOps.td       |  2 +-
 .../mlir/Dialect/ArmSME/IR/ArmSMEOps.td       | 10 ++++-----
 mlir/include/mlir/Dialect/EmitC/IR/EmitC.td   |  2 +-
 mlir/include/mlir/Dialect/Func/IR/FuncOps.td  |  2 +-
 mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td   | 10 ++++-----
 mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td  |  4 ++--
 .../Dialect/Linalg/IR/LinalgRelayoutOps.td    |  2 +-
 .../Dialect/Linalg/IR/LinalgStructuredOps.td  |  8 +++----
 .../mlir/Dialect/MemRef/IR/MemRefOps.td       |  8 +++----
 .../Dialect/SPIRV/IR/SPIRVArithmeticOps.td    | 10 ++++-----
 .../mlir/Dialect/SPIRV/IR/SPIRVAtomicOps.td   | 22 +++++++++----------
 .../mlir/Dialect/SPIRV/IR/SPIRVCastOps.td     |  4 ++--
 .../Dialect/SPIRV/IR/SPIRVCompositeOps.td     |  6 ++---
 .../Dialect/SPIRV/IR/SPIRVControlFlowOps.td   |  2 +-
 .../mlir/Dialect/SPIRV/IR/SPIRVGLOps.td       | 18 +++++++--------
 .../mlir/Dialect/SPIRV/IR/SPIRVGraphOps.td    |  4 ++--
 .../mlir/Dialect/SPIRV/IR/SPIRVImageOps.td    |  2 +-
 .../mlir/Dialect/SPIRV/IR/SPIRVMemoryOps.td   |  4 ++--
 .../Dialect/SPIRV/IR/SPIRVNonUniformOps.td    | 14 ++++++------
 .../Dialect/SPIRV/IR/SPIRVStructureOps.td     | 12 +++++-----
 .../include/mlir/Dialect/Shard/IR/ShardOps.td | 20 ++++++++---------
 .../SparseTensor/IR/SparseTensorAttrDefs.td   |  2 +-
 .../SparseTensor/IR/SparseTensorBase.td       |  2 +-
 .../mlir/Dialect/Tensor/IR/TensorBase.td      |  4 ++--
 .../mlir/Dialect/Vector/IR/VectorOps.td       |  4 ++--
 mlir/include/mlir/IR/BuiltinTypes.td          |  2 +-
 mlir/include/mlir/IR/TensorEncoding.td        |  2 +-
 mlir/include/mlir/Transforms/Passes.td        |  2 +-
 31 files changed, 101 insertions(+), 101 deletions(-)

diff --git a/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td b/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
index b3cc021989fde4..0992b8f095b3df 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
@@ -1589,7 +1589,7 @@ def CIR_UnwindTableKindAttr : CIR_EnumAttr<CIR_UnwindTableKind, "uwtable"> {
     This mirrors the UWTableKindEnum in The LLVM dialect,
     and is passed through to the llvm dialect. According to the LLVM
     documentation:
-        The ‘uwtable’ attribute is about the ABI or the user mandating an /
+        The 'uwtable' attribute is about the ABI or the user mandating an /
             entry in the unwind table.
   }];
 }
diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index 4dde0a667ac5a1..341f296e679d80 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -8101,7 +8101,7 @@ def CIR_ObjSizeOp : CIR_Op<"objsize", [Pure]> {
     The `cir.objsize` operation is designed to provide information to the
     optimizer to determine whether a) an operation (like memcpy) will
     overflow a buffer that corresponds to an object, or b) that a runtime
-    check for overflow isn’t necessary. An object in this context means an
+    check for overflow isn't necessary. An object in this context means an
     allocation of a specific class, structure, array, or other object.
 
     When the `min` attribute is present, the operation returns the minimum
@@ -8212,8 +8212,8 @@ def CIR_SqrtOp : CIR_UnaryFPToFPBuiltinOp<"sqrt", "SqrtOp"> {
     Computes the square root of a floating-point value or vector.
 
     The input must be either:
-      • a floating-point scalar type, or
-      • a vector whose element type is floating-point.
+      - a floating-point scalar type, or
+      - a vector whose element type is floating-point.
 
     The result type must match the input type exactly.
 
@@ -8761,8 +8761,8 @@ def CIR_FMAOp : CIR_TernaryFPToFPBuiltinOp<"fma", "FMAOp"> {
     Computes the fused multiply-add of three floating-point values or vector.
 
     The inputs must be either:
-      • floating-point scalar types, or
-      • vectors whose element type is floating-point.
+      - floating-point scalar types, or
+      - vectors whose element type is floating-point.
 
     The result type must match the input type exactly.
 
@@ -8790,8 +8790,8 @@ def CIR_FMulAddOp : CIR_TernaryFPToFPBuiltinOp<"fmuladd", "FMulAddOp"> {
     emit either a fused or an unfused sequence.
 
     The inputs must be either:
-      • floating-point scalar types, or
-      • vectors whose element type is floating-point.
+      - floating-point scalar types, or
+      - vectors whose element type is floating-point.
 
     The result type must match the input type exactly.
 
diff --git a/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td b/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td
index 5cf3e19549b70d..035c21cc335f07 100644
--- a/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td
+++ b/flang/include/flang/Optimizer/Dialect/MIF/MIFOps.td
@@ -256,7 +256,7 @@ def mif_SyncImagesOp : mif_Op<"sync_images", [AttrSizedOperandSegments]> {
   let summary = "Performs a synchronization of image with each of the other "
                 "images in the `image_set`";
   let description = [{
-    This operation can take an optional argument `⁣image_set`, wich must be an integer expression
+    This operation can take an optional argument `image_set`, wich must be an integer expression
     and must be scalar or rank one. If `image_set` is omitted from the call, this operation will 
     adopt the behavior of the Fortran statement `SYNC IMAGES(*)`.
   }];
diff --git a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td
index 6215d5c2926304..c3d8e998ed2f36 100644
--- a/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td
+++ b/mlir/include/mlir/Dialect/Affine/IR/AffineOps.td
@@ -57,7 +57,7 @@ def AffineApplyOp : Affine_Op<"apply",
     respective number of dimensional and symbolic inputs to the affine mapping;
     the affine mapping has to be one-dimensional, and so the `affine.apply`
     operation always returns one value. The input operands and result must all
-    have ‘index’ type.
+    have 'index' type.
 
     An operand that is a valid dimension as per the [rules on valid affine
     dimensions and symbols](#restrictions-on-dimensions-and-symbols)
diff --git a/mlir/include/mlir/Dialect/ArmSME/IR/ArmSMEOps.td b/mlir/include/mlir/Dialect/ArmSME/IR/ArmSMEOps.td
index f7fec15ec130e7..8b38e0b2d759b9 100644
--- a/mlir/include/mlir/Dialect/ArmSME/IR/ArmSMEOps.td
+++ b/mlir/include/mlir/Dialect/ArmSME/IR/ArmSMEOps.td
@@ -869,7 +869,7 @@ def FMopa2WayOp
 
                                   2 outer products
 
-                      Acol0 ⊗ Brow0      |           Acol1 ⊗ Brow1
+                      Acol0 * Brow0      |           Acol1 * Brow1
                       -------------      |           -------------
                                          |
                   [B0 B2 B4 B6]          |       [B1 B3 B5 B7]
@@ -884,7 +884,7 @@ def FMopa2WayOp
 
                               sum of 2 outer products
 
-                           Acol0 ⊗ Brow0 + Acol1 ⊗ Brow1
+                           Acol0 * Brow0 + Acol1 * Brow1
 
                  [A0B0 + A1B1 A0B2 + A1B3 A0B4 + A1B5 A0B6 + A1B7]
                  [A2B0 + A3B1 A2B2 + A3B3 A2B4 + A3B5 A2B6 + A3B7]
@@ -1106,7 +1106,7 @@ def SMopa4WayOp
 
                                   4 outer products
 
-                 Acol0 ⊗ Brow0           |            Acol1 ⊗ Brow1
+                 Acol0 * Brow0           |            Acol1 * Brow1
                  -------------           |            -------------
                                          |
              [B0 B4 B8 B12]              |        [B1 B5 B9 B13]
@@ -1116,7 +1116,7 @@ def SMopa4WayOp
         A8   [ A8B0  A8B4  A8B8  A8B12]  |   A9   [ A9B1  A9B5  A9B9  A9B13]
         A12] [A12B0 A12B4 A12B8 A12B12]  |   A13] [A13B1 A13B5 A13B9 A13B13]
                                          |
-                 Acol2 ⊗ Brow2           |            Acol3 ⊗ Brow3
+                 Acol2 * Brow2           |            Acol3 * Brow3
                  -------------           |            -------------
                                          |
              [B2, B6, B10, B14]          |        [B3 B7 B11 B15]
@@ -1131,7 +1131,7 @@ def SMopa4WayOp
 
                               sum of 4 outer products
 
-           Acol0 ⊗ Brow0 + Acol1 ⊗ Brow1 + Acol2 ⊗ Brow2 + Acol3 ⊗ Brow3
+           Acol0 * Brow0 + Acol1 * Brow1 + Acol2 * Brow2 + Acol3 * Brow3
 
      [ A0B0 +  A1B1 +  A2B2 +  A3B3 ... ...  A0B12 +  A1B13 +  A2B14 +  A3B15]
      [ A4B0 +  A5B1 +  A6B2 +  A7B3 ... ...  A4B12 +  A5B13 +  A6B14 +  A7B15]
diff --git a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
index f08dac13972688..37307c03e6b1ef 100644
--- a/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
+++ b/mlir/include/mlir/Dialect/EmitC/IR/EmitC.td
@@ -871,7 +871,7 @@ def EmitC_FuncOp : EmitC_Op<"func", [
     a symbolic connection (e.g. symbols referenced by name via a string
     attribute like SymbolRefAttr). While the MLIR textual form provides a nice
     inline syntax for function arguments, they are internally represented as
-    “block arguments” to the first block in the region.
+    "block arguments" to the first block in the region.
 
     Only dialect attribute names may be specified in the attribute dictionaries
     for function arguments, results, or the function itself.
diff --git a/mlir/include/mlir/Dialect/Func/IR/FuncOps.td b/mlir/include/mlir/Dialect/Func/IR/FuncOps.td
index ba5531c46728e4..e7bf52c4643081 100644
--- a/mlir/include/mlir/Dialect/Func/IR/FuncOps.td
+++ b/mlir/include/mlir/Dialect/Func/IR/FuncOps.td
@@ -268,7 +268,7 @@ def FuncOp : Func_Op<"func", [
     attribute like SymbolRefAttr). An external function declaration (used when
     referring to a function declared in some other module) has no body. While
     the MLIR textual form provides a nice inline syntax for function arguments,
-    they are internally represented as “block arguments” to the first block in
+    they are internally represented as "block arguments" to the first block in
     the region.
 
     Only dialect attribute names may be specified in the attribute dictionaries
diff --git a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
index 79eda3fee335cc..b62bc869c25da7 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/NVVMOps.td
@@ -669,7 +669,7 @@ def NVVM_MBarrierInitOp : NVVM_PTXBuilder_Op<"mbarrier.init",
       underlying address must be within the shared::cta memory space; otherwise
       the behavior is undefined.
     - `count`: Integer specifying the number of threads that will participate in barrier
-      synchronization. Must be in the range [1, 2²⁰ - 1].
+      synchronization. Must be in the range [1, 2^20 - 1].
     - `layout`: Optional in-memory layout to initialize the *mbarrier object*
       with. Only `0` (`layout::v0`) and `1` (`layout::v1`) are valid values.
       When it is omitted, it defaults to `0`. The layout of an existing
@@ -4698,11 +4698,11 @@ def NVVM_CpAsyncBulkTensorSharedCTAToGlobalOverrideAddrOp :
       which optional operands are provided:
 
       - `override.addr` (`.override::global_address`): only `overrideAddr` is given; the
-        global base address from the tensor-map is replaced. Supported in `TILE` (1D–5D),
-        `IM2COL`/`IM2COL_W` (3D–5D), and `TILE_SCATTER4` (2D, requires 5 coordinates).
+        global base address from the tensor-map is replaced. Supported in `TILE` (1D-5D),
+        `IM2COL`/`IM2COL_W` (3D-5D), and `TILE_SCATTER4` (2D, requires 5 coordinates).
       - `override.addr.dim` (1D, `TILE` only): `overrideAddr` plus `tensorSize` (one
         element); also overrides the tensor global dimension.
-      - `override.addr.dim.stride` (2D–5D, `TILE` only): `overrideAddr` plus `tensorSize`,
+      - `override.addr.dim.stride` (2D-5D, `TILE` only): `overrideAddr` plus `tensorSize`,
         `lowerStride`, and `upperStride`; also overrides the global dimensions and strides.
         The effective global stride is
         `global_stride[i] = ((%stride{i} + (%upper_stride{i} << 32)) << 4)`.
@@ -4728,7 +4728,7 @@ def NVVM_CpAsyncBulkTensorSharedCTAToGlobalOverrideAddrOp :
         l2_cache_hint = %ch mode = im2col : !llvm.ptr, !llvm.ptr<3>, !llvm.ptr<1>
       ```
 
-      // override.addr (TILE_SCATTER4, 2D) — 5 coordinates: x0, y0, y1, y2, y3
+      // override.addr (TILE_SCATTER4, 2D) -- 5 coordinates: x0, y0, y1, y2, y3
       ```mlir
       nvvm.cp.async.bulk.tensor.global.shared.cta.override %tma_desc, %src, %override_addr, box[%x0, %y0, %y1, %y2, %y3]
         mode = tile_scatter4 : !llvm.ptr, !llvm.ptr<3>, !llvm.ptr<1>
diff --git a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
index 716fd92e810ace..9f77cbb50f3179 100644
--- a/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
+++ b/mlir/include/mlir/Dialect/LLVMIR/ROCDLOps.td
@@ -201,8 +201,8 @@ def ROCDL_DsBpermuteOp : ROCDL_ConcreteNonMemIntrOp<"ds_bpermute", [], 1>,
     Each lane reads the value of `src` from the lane whose byte address is
     given by `index` (i.e. lane id = `index / 4`).
 
-    This is “backward” (pull) in contrast to `ds_permute_b32`, which is
-    “forward” (push/scatter).
+    This is "backward" (pull) in contrast to `ds_permute_b32`, which is
+    "forward" (push/scatter).
 
     Example:
     ```mlir
diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgRelayoutOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgRelayoutOps.td
index 044670d97ea702..c0ba1682caf765 100644
--- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgRelayoutOps.td
+++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgRelayoutOps.td
@@ -122,7 +122,7 @@ def Linalg_PackOp : Linalg_RelayoutOp<"pack", [
      `shape(result)[rank(source) + i] = inner_tiles[i]` for `0 <= i < k`.
      - The following relationship for the tiled dimensions holds:
      `shape(result)[inner_dims_pos[i]] = shape(source)[inner_dims_pos[i]] / inner_tiles[i]`,
-     where (⌈/⌉ indicates CeilDiv).
+     where '/' indicates CeilDiv.
 
 
     Example: If `inner_tiles = [16, 32]`, the result has a shape of
diff --git a/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td b/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
index 2b6fc04ac0991f..e2eebb04c3792a 100644
--- a/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
+++ b/mlir/include/mlir/Dialect/Linalg/IR/LinalgStructuredOps.td
@@ -831,7 +831,7 @@ def ContractOp : LinalgStructuredBase_Op<"contract", [
     The semantics of contracting inputs `A` and `B` on top of `C` to produce
     output `D` is given by
 
-      `D[H] = (SUM_{(I ∪ J) \ H} A[I] * B[J]) + C[H]`
+      `D[H] = (SUM_{(I union J) \ H} A[I] * B[J]) + C[H]`
 
     where `I`, `J`, and `H` are tuples of (pairwise distinct) dimension
     identifiers - meant to range over valid indices - corresponding to the
@@ -852,8 +852,8 @@ def ContractOp : LinalgStructuredBase_Op<"contract", [
       (if used on `A` and `C`), an "N-like" dim (if used on `B` and `C`) or a
       "batch"-dim (if used to index into `A`, `B`, and `C`).
 
-    For example, batch-matmul is given by `I = ⟨ b, m, k ⟩`, `J = ⟨ b, k, n ⟩`,
-    `H = ⟨ b, m, n ⟩` (with `k` as a contracting reduction-dimension while `m`,
+    For example, batch-matmul is given by `I = (b, m, k)`, `J = (b, k, n)`,
+    `H = (b, m, n)` (with `k` as a contracting reduction-dimension while `m`,
     `n` and `b` have parallel iteration-type) and gets represented as:
 
     ```mlir
@@ -1247,7 +1247,7 @@ def ScaledContractOp : LinalgStructuredBase_Op<"scaled_contract", [
     The semantics of contracting inputs `A` and `B` with scales `scale_A` and
     `scale_B` on top of `C` to produce output `D` is given by:
 
-      `D[H] = (SUM_{(I ∪ J) \ H} (A[I] * scale_A[I]) * (B[J] * scale_B[J])) + C[H]`
+      `D[H] = (SUM_{(I union J) \ H} (A[I] * scale_A[I]) * (B[J] * scale_B[J])) + C[H]`
 
     The iteration type of each dim is inferred.
 
diff --git a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
index 86e466c46c2285..4047e203a54160 100644
--- a/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
+++ b/mlir/include/mlir/Dialect/MemRef/IR/MemRefOps.td
@@ -1527,8 +1527,8 @@ def MemRef_ReinterpretCastOp
     memory outside the underlying allocation through the resulting memref is
     undefined behavior.
 
-    We distinguish between *underlying memory* — the sequence of elements as
-    they appear in the contiguous memory of the memref — and the
+    We distinguish between *underlying memory* -- the sequence of elements as
+    they appear in the contiguous memory of the memref -- and the
     *strided memref*, which refers to the underlying memory interpreted
     according to specified offsets, sizes, and strides.
 
@@ -2206,8 +2206,8 @@ def SubViewOp : MemRef_OpWithOffsetSizesAndStrides<"subview", [
 
     Consecutive `subview` operations on memref's with static dimensions.
 
-    We distinguish between *underlying memory* — the sequence of elements as
-    they appear in the contiguous memory of the memref — and the
+    We distinguish between *underlying memory* -- the sequence of elements as
+    they appear in the contiguous memory of the memref -- and the
     *strided memref*, which refers to the underlying memory interpreted
     according to specified offsets, sizes, and strides.
 
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVArithmeticOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVArithmeticOps.td
index e1b94d6834f810..9659c9c37bef13 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVArithmeticOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVArithmeticOps.td
@@ -157,7 +157,7 @@ def SPIRV_FModOp : SPIRV_ArithmeticBinaryOp<"FMod", SPIRV_Float, []> {
 
     Results are computed per component.  The resulting value is undefined
     if Operand 2 is 0.  Otherwise, the result is the remainder r of Operand
-    1 divided by Operand 2 where if r ≠ 0, the sign of r is the same as the
+    1 divided by Operand 2 where if r != 0, the sign of r is the same as the
     sign of Operand 2.
 
     #### Example:
@@ -232,7 +232,7 @@ def SPIRV_FRemOp : SPIRV_ArithmeticBinaryOp<"FRem", SPIRV_Float, []> {
 
     Results are computed per component.  The resulting value is undefined
     if Operand 2 is 0.  Otherwise, the result is the remainder r of Operand
-    1 divided by Operand 2 where if r ≠ 0, the sign of r is the same as the
+    1 divided by Operand 2 where if r != 0, the sign of r is the same as the
     sign of Operand 1.
 
     #### Example:
@@ -427,7 +427,7 @@ def SPIRV_ISubBorrowOp : SPIRV_ArithmeticExtendedBinaryOp<"ISubBorrow",
     Operand 1, member 0 gets 2w + Operand 1 - Operand 2, where w is the
     component width.
 
-    Member 1 of the result gets 0 if Operand 1 ≥ Operand 2, and gets 1
+    Member 1 of the result gets 0 if Operand 1 >= Operand 2, and gets 1
     otherwise.
 
     <!-- End of AutoGen section -->
@@ -528,7 +528,7 @@ def SPIRV_SModOp : SPIRV_ArithmeticBinaryOp<"SMod",
 
     Results are computed per component.  The resulting value is undefined
     if Operand 2 is 0.  Otherwise, the result is the remainder r of Operand
-    1 divided by Operand 2 where if r ≠ 0, the sign of r is the same as the
+    1 divided by Operand 2 where if r != 0, the sign of r is the same as the
     sign of Operand 2.
 
     #### Example:
@@ -627,7 +627,7 @@ def SPIRV_SRemOp : SPIRV_ArithmeticBinaryOp<"SRem",
 
     Results are computed per component.  The resulting value is undefined
     if Operand 2 is 0.  Otherwise, the result is the remainder r of Operand
-    1 divided by Operand 2 where if r ≠ 0, the sign of r is the same as the
+    1 divided by Operand 2 where if r != 0, the sign of r is the same as the
     sign of Operand 1.
 
     #### Example:
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVAtomicOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVAtomicOps.td
index c706e39c4eb0c9..8ada507842dcc4 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVAtomicOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVAtomicOps.td
@@ -83,7 +83,7 @@ def SPIRV_AtomicAndOp : SPIRV_AtomicUpdateWithValueOp<"AtomicAnd", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -446,7 +446,7 @@ def SPIRV_AtomicIAddOp : SPIRV_AtomicUpdateWithValueOp<"AtomicIAdd", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -482,7 +482,7 @@ def SPIRV_AtomicIDecrementOp : SPIRV_AtomicUpdateOp<"AtomicIDecrement", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.  The type of the value
     pointed to by Pointer must be the same as Result Type.
@@ -515,7 +515,7 @@ def SPIRV_AtomicIIncrementOp : SPIRV_AtomicUpdateOp<"AtomicIIncrement", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.  The type of the value
     pointed to by Pointer must be the same as Result Type.
@@ -549,7 +549,7 @@ def SPIRV_AtomicISubOp : SPIRV_AtomicUpdateWithValueOp<"AtomicISub", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -584,7 +584,7 @@ def SPIRV_AtomicOrOp : SPIRV_AtomicUpdateWithValueOp<"AtomicOr", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -620,7 +620,7 @@ def SPIRV_AtomicSMaxOp : SPIRV_AtomicUpdateWithValueOp<"AtomicSMax", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -656,7 +656,7 @@ def SPIRV_AtomicSMinOp : SPIRV_AtomicUpdateWithValueOp<"AtomicSMin", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -692,7 +692,7 @@ def SPIRV_AtomicUMaxOp : SPIRV_AtomicUpdateWithValueOp<"AtomicUMax", [UnsignedOp
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -728,7 +728,7 @@ def SPIRV_AtomicUMinOp : SPIRV_AtomicUpdateWithValueOp<"AtomicUMin", [UnsignedOp
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
@@ -764,7 +764,7 @@ def SPIRV_AtomicXorOp : SPIRV_AtomicUpdateWithValueOp<"AtomicXor", []> {
 
     3) store the New Value back through Pointer.
 
-    The instruction’s result is the Original Value.
+    The instruction's result is the Original Value.
 
     Result Type must be an integer type scalar.
 
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCastOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCastOps.td
index 229d00a6de7ab4..3ec4cfae25a924 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCastOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCastOps.td
@@ -457,7 +457,7 @@ def SPIRV_ConvertUToPtrOp : SPIRV_Op<"ConvertUToPtr", [UnsignedOp]> {
 
 
 def SPIRV_PtrCastToGenericOp : SPIRV_Op<"PtrCastToGeneric", [Pure]> {
-  let summary = "Convert a pointer’s Storage Class to Generic.";
+  let summary = "Convert a pointer's Storage Class to Generic.";
 
   let description = [{
     Result Type must be an OpTypePointer. Its Storage Class must be Generic.
@@ -500,7 +500,7 @@ def SPIRV_PtrCastToGenericOp : SPIRV_Op<"PtrCastToGeneric", [Pure]> {
 // -----
 
 def SPIRV_GenericCastToPtrOp : SPIRV_Op<"GenericCastToPtr", [Pure]> {
-  let summary = "Convert a pointer’s Storage Class to a non-Generic class.";
+  let summary = "Convert a pointer's Storage Class to a non-Generic class.";
 
   let description = [{
     Result Type must be an OpTypePointer. Its Storage Class must be
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCompositeOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCompositeOps.td
index 73f93522d142b0..d106c076833d9f 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCompositeOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVCompositeOps.td
@@ -86,7 +86,7 @@ def SPIRV_CompositeExtractOp : SPIRV_Op<"CompositeExtract",
     Indexes walk the type hierarchy, potentially down to component
     granularity, to select the part to extract. All indexes must be in
     bounds.  All composite constituents use zero-based numbering, as
-    described by their OpType… instruction.
+    described by their OpType... instruction.
 
     <!-- End of AutoGen section -->
 
@@ -140,7 +140,7 @@ def SPIRV_CompositeInsertOp : SPIRV_Op<"CompositeInsert",
     Indexes walk the type hierarchy of Composite to the desired depth,
     potentially down to component granularity, to select the part to modify.
     All indexes must be in bounds. All composite constituents use zero-based
-    numbering, as described by their OpType… instruction. The type of the
+    numbering, as described by their OpType... instruction. The type of the
     part selected to modify must match the type of Object.
 
     <!-- End of AutoGen section -->
@@ -306,7 +306,7 @@ def SPIRV_VectorShuffleOp : SPIRV_Op<"VectorShuffle", [
     source and is undefined. All Component literals must either be FFFFFFFF
     or in [0, N - 1] (inclusive).
 
-    Note: A vector “swizzle” can be done by using the vector for both Vector
+    Note: A vector "swizzle" can be done by using the vector for both Vector
     operands, or using an OpUndef for one of the Vector operands.
 
     <!-- End of AutoGen section -->
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVControlFlowOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVControlFlowOps.td
index 57d9ba1f5b2f04..bef617f520fe3b 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVControlFlowOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVControlFlowOps.td
@@ -267,7 +267,7 @@ def SPIRV_SwitchOp : SPIRV_Op<"Switch",
     `<id>`. It is invalid for any two literal to be equal to each other. If Selector
     does not equal any literal, control flow branches to the Default label `<id>`.
     Each literal is interpreted with the type of Selector: The bit width of
-    Selector’s type is the width of each literal’s type. If this width is not a
+    Selector's type is the width of each literal's type. If this width is not a
     multiple of 32-bits and the OpTypeInt Signedness is set to 1, the literal values
     are interpreted as being sign extended.
 
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGLOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGLOps.td
index 34b49567deafe4..0fbd8bd68409d9 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGLOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGLOps.td
@@ -131,7 +131,7 @@ def SPIRV_GLSAbsOp : SPIRV_GLUnaryArithmeticOp<"SAbs", 5, SPIRV_Integer, [Always
   let summary = "Absolute value of operand";
 
   let description = [{
-    Result is x if x ≥ 0; otherwise result is -x, where x is interpreted as a
+    Result is x if x >= 0; otherwise result is -x, where x is interpreted as a
     signed integer.
 
     Result Type and the type of x must both be integer scalar or integer vector
@@ -249,7 +249,7 @@ def SPIRV_GLAsinOp : SPIRV_GLUnaryArithmeticOp<"Asin", 16, SPIRV_Float16or32, [A
     The standard trigonometric arc sine of x radians.
 
     Result is an angle, in radians, whose sine is x. The range of result values
-    is [-π / 2, π / 2]. The resulting value is NaN if abs x > 1.
+    is [-pi / 2, pi / 2]. The resulting value is NaN if abs x > 1.
 
     The operand x must be a scalar or vector whose component type is 16-bit or
     32-bit floating-point.
@@ -275,7 +275,7 @@ def SPIRV_GLAcosOp : SPIRV_GLUnaryArithmeticOp<"Acos", 17, SPIRV_Float16or32, [A
     The standard trigonometric arc cosine of x radians.
 
     Result is an angle, in radians, whose cosine is x. The range of result
-    values is [0, π]. The resulting value is NaN if abs x > 1.
+    values is [0, pi]. The resulting value is NaN if abs x > 1.
 
     The operand x must be a scalar or vector whose component type is 16-bit or
     32-bit floating-point.
@@ -301,7 +301,7 @@ def SPIRV_GLAtanOp : SPIRV_GLUnaryArithmeticOp<"Atan", 18, SPIRV_Float16or32, [A
     The standard trigonometric arc tangent of x radians.
 
     Result is an angle, in radians, whose tangent is y_over_x. The range of
-    result values is [-π / 2, π / 2].
+    result values is [-pi / 2, pi / 2].
 
     The operand x must be a scalar or vector whose component type is 16-bit or
     32-bit floating-point.
@@ -635,7 +635,7 @@ def SPIRV_GLPowOp : SPIRV_GLBinaryArithmeticOp<"Pow", 26, SPIRV_Float16or32> {
   let description = [{
     Result is x raised to the y power; x^y.
 
-    The resulting value is poison if x < 0. Result is poison if x = 0 and y ≤ 0.
+    The resulting value is poison if x < 0. Result is poison if x = 0 and y <= 0.
 
     The operand x and y must be a scalar or vector whose component type is
     16-bit or 32-bit floating-point.
@@ -843,7 +843,7 @@ def SPIRV_GLAtanhOp : SPIRV_GLUnaryArithmeticOp<"Atanh", 24, SPIRV_Float16or32,
 
   let description = [{
     Arc hyperbolic tangent; result is the inverse of tanh. The resulting value
-    is NaN if abs x ≥ 1.
+    is NaN if abs x >= 1.
 
     The operand x must be a scalar or vector whose component type is 16-bit or
     32-bit floating-point.
@@ -868,7 +868,7 @@ def SPIRV_GLAtan2Op : SPIRV_GLBinaryArithmeticOp<"Atan2", 25, SPIRV_Float16or32>
   let description = [{
     Result is the arc tangent of y / x. The signs of x and y are used to
     determine what quadrant the angle is in. The range of result values is
-    [-π, π]. Result is poison if x and y are both 0.
+    [-pi, pi]. Result is poison if x and y are both 0.
 
     The operand y and x must be a scalar or vector whose component type is
     16-bit or 32-bit floating-point.
@@ -892,7 +892,7 @@ def SPIRV_GLRadiansOp : SPIRV_GLUnaryArithmeticOp<"Radians", 11, SPIRV_Float16or
 
   let description = [{
     Result is the quantity in radians for the quantity x given in degrees, i.e.,
-    (π / 180) * x.
+    (pi / 180) * x.
 
     The operand x must be a scalar or vector whose component type is 16-bit or
     32-bit floating-point.
@@ -916,7 +916,7 @@ def SPIRV_GLDegreesOp : SPIRV_GLUnaryArithmeticOp<"Degrees", 12, SPIRV_Float16or
 
   let description = [{
     Result is the quantity in degrees for the quantity x given in radians, i.e.,
-    (180 / π) * x.
+    (180 / pi) * x.
 
     The operand x must be a scalar or vector whose component type is 16-bit or
     32-bit floating-point.
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGraphOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGraphOps.td
index ae369616981404..bcfa06cd53d5ac 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGraphOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVGraphOps.td
@@ -174,8 +174,8 @@ def SPIRV_GraphEntryPointARMOp : SPIRV_GraphARMOp<"GraphEntryPoint", [InModuleSc
     operations. These declare the set of global variables from a
     module that form the interface of this entry point. The set of
     Interface symbols must be equal to or a superset of the
-    `spirv.GlobalVariable`s referenced by the entry point’s static call
-    tree, within the interface’s storage classes.
+    `spirv.GlobalVariable`s referenced by the entry point's static call
+    tree, within the interface's storage classes.
 
     #### Example:
 
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVImageOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVImageOps.td
index 6d51d479f75623..787ce13150a981 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVImageOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVImageOps.td
@@ -604,7 +604,7 @@ def SPIRV_ImageFetchOp : SPIRV_Op<"ImageFetch",
     Image must be an object whose type is OpTypeImage. Its Dim operand must not be
     Cube, and its Sampled operand must be 1.
 
-    Coordinate must be a scalar or vector of integer type. It contains (u[, v] … [,
+    Coordinate must be a scalar or vector of integer type. It contains (u[, v] ... [,
     array layer]) as needed by the definition of Sampled Image.
 
     Image Operands encodes what operands follow, as per Image Operands.
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVMemoryOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVMemoryOps.td
index 5ae6c8af830032..ee9689514706c5 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVMemoryOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVMemoryOps.td
@@ -25,7 +25,7 @@ def SPIRV_AccessChainOp : SPIRV_Op<"AccessChain", [Pure]> {
 
   let description = [{
     Result Type must be an OpTypePointer. Its Type operand must be the type
-    reached by walking the Base’s type hierarchy down to the last provided
+    reached by walking the Base's type hierarchy down to the last provided
     index in Indexes, and its Storage Class operand must be the same as the
     Storage Class of Base.
 
@@ -35,7 +35,7 @@ def SPIRV_AccessChainOp : SPIRV_Op<"AccessChain", [Pure]> {
     to scalar granularity. The first index in Indexes will select the top-
     level member/element/component/element of the base composite. All
     composite constituents use zero-based numbering, as described by their
-    OpType… instruction. The second index will apply similarly to that
+    OpType... instruction. The second index will apply similarly to that
     result, and so on. Once any non-composite type is reached, there must be
     no remaining (unused) indexes.
 
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVNonUniformOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVNonUniformOps.td
index e473a8e0efb3c5..63574feaac98ef 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVNonUniformOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVNonUniformOps.td
@@ -814,7 +814,7 @@ def SPIRV_GroupNonUniformShuffleDownOp : SPIRV_Op<"GroupNonUniformShuffleDown",
 
   let summary = [{
     Result is the Value of the invocation identified by the current
-    invocation’s id within the group + Delta.
+    invocation's id within the group + Delta.
   }];
 
   let description = [{
@@ -829,7 +829,7 @@ def SPIRV_GroupNonUniformShuffleDownOp : SPIRV_Op<"GroupNonUniformShuffleDown",
 
     Delta is treated as unsigned and the resulting value is undefined if
     Delta is greater than or equal to the size of the group, or if the
-    current invocation’s id within the group + Delta is either an inactive
+    current invocation's id within the group + Delta is either an inactive
     invocation or greater than or equal to the size of the group.
 
     <!-- End of AutoGen section -->
@@ -871,7 +871,7 @@ def SPIRV_GroupNonUniformShuffleUpOp : SPIRV_Op<"GroupNonUniformShuffleUp", [
 
   let summary = [{
     Result is the Value of the invocation identified by the current
-    invocation’s id within the group - Delta.
+    invocation's id within the group - Delta.
   }];
 
   let description = [{
@@ -885,7 +885,7 @@ def SPIRV_GroupNonUniformShuffleUpOp : SPIRV_Op<"GroupNonUniformShuffleUp", [
     Delta  must be a scalar of integer type, whose Signedness operand is 0.
 
     Delta is treated as unsigned and the resulting value is undefined if
-    Delta is greater than the current invocation’s id within the group or if
+    Delta is greater than the current invocation's id within the group or if
     the selected lane is inactive.
 
     <!-- End of AutoGen section -->
@@ -927,7 +927,7 @@ def SPIRV_GroupNonUniformShuffleXorOp : SPIRV_Op<"GroupNonUniformShuffleXor", [
 
   let summary = [{
     Result is the Value of the invocation identified by the current
-    invocation’s id within the group xor’ed with Mask.
+    invocation's id within the group xor'ed with Mask.
   }];
 
   let description = [{
@@ -940,8 +940,8 @@ def SPIRV_GroupNonUniformShuffleXorOp : SPIRV_Op<"GroupNonUniformShuffleXor", [
 
     Mask  must be a scalar of integer type, whose Signedness operand is 0.
 
-    The resulting value is undefined if current invocation’s id within the
-    group xor’ed with Mask is an inactive invocation, or is greater than or
+    The resulting value is undefined if current invocation's id within the
+    group xor'ed with Mask is an inactive invocation, or is greater than or
     equal to the size of the group.
 
     <!-- End of AutoGen section -->
diff --git a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVStructureOps.td b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVStructureOps.td
index c8cd881f138c58..5a64327d832d0d 100644
--- a/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVStructureOps.td
+++ b/mlir/include/mlir/Dialect/SPIRV/IR/SPIRVStructureOps.td
@@ -197,12 +197,12 @@ def SPIRV_EntryPointOp : SPIRV_Op<"EntryPoint", [InModuleScope]> {
     operations. These declare the set of global variables from a
     module that form the interface of this entry point. The set of
     Interface symbols must be equal to or a superset of the
-    `spirv.GlobalVariable`s referenced by the entry point’s static call
-    tree, within the interface’s storage classes.  Before version 1.4,
-    the interface’s storage classes are limited to the Input and
-    Output storage classes. Starting with version 1.4, the interface’s
+    `spirv.GlobalVariable`s referenced by the entry point's static call
+    tree, within the interface's storage classes.  Before version 1.4,
+    the interface's storage classes are limited to the Input and
+    Output storage classes. Starting with version 1.4, the interface's
     storage classes are all storage classes used in declaring all
-    global variables referenced by the entry point’s call tree.
+    global variables referenced by the entry point's call tree.
 
     <!-- End of AutoGen section -->
 
@@ -483,7 +483,7 @@ def SPIRV_GlobalVariableOp
     scope (like Input, Output, StorageBuffer, etc.) are valid.
 
     Initializer is optional.  If Initializer is present, it will be
-    the initial value of the variable’s memory content. Initializer
+    the initial value of the variable's memory content. Initializer
     must be an symbol defined from a constant instruction or other
     `spirv.GlobalVariable` operation in module scope. Initializer must
     have the same type as the type of the defined symbol.
diff --git a/mlir/include/mlir/Dialect/Shard/IR/ShardOps.td b/mlir/include/mlir/Dialect/Shard/IR/ShardOps.td
index 2539eb93f7a598..13486e2ee6438a 100644
--- a/mlir/include/mlir/Dialect/Shard/IR/ShardOps.td
+++ b/mlir/include/mlir/Dialect/Shard/IR/ShardOps.td
@@ -676,7 +676,7 @@ def Shard_AllToAllOp : Shard_CollectiveCommunicationOpBase<"all_to_all", [
      (0)     (1)     (2)
     +-------+-------+-------+  | split and concat along
     | 11 12 | 21 22 | 31 32 |  | tensor axis 0
-    | 13 14 | 23 24 | 33 34 |  ↓
+    | 13 14 | 23 24 | 33 34 |  v
     | 15 16 | 25 26 | 35 36 |
     +-------+-------+-------+
     ```
@@ -733,7 +733,7 @@ def Shard_BroadcastOp : Shard_CollectiveCommunicationOpBase<"broadcast", [
     ```
                      +-------+-------+                   | broadcast
     device (0, 0) -> |  1  2 |  3  4 | <- device (0, 1)  | along axis 0
-                     +-------+-------+                   ↓
+                     +-------+-------+                   v
     device (1, 0) -> |  *  * |  *  * | <- device (1, 1)
                      +-------+-------+
     ```
@@ -918,15 +918,15 @@ def Shard_ReduceScatterOp : Shard_CollectiveCommunicationOpBase<"reduce_scatter"
     ```
                               device
                               (0, 1)
-                                 ↓
+                                 v
                      +-------+-------+  | scatter tensor
     device (0, 0) -> |  1  2 |  5  6 |  | axis 0
-                     |  3  4 |  7  8 |  ↓
+                     |  3  4 |  7  8 |  v
                      +-------+-------+
     device (1, 0) -> |  9 10 | 13 14 |
                      | 11 12 | 15 16 |
                      +-------+-------+
-                                ↑
+                                ^
                               device
                               (1, 1)
     ```
@@ -985,15 +985,15 @@ def Shard_ScatterOp : Shard_CollectiveCommunicationOpBase<"scatter", [
     ```
                               device
                               (0, 1)
-                                 ↓
+                                 v
                      +-------+-------+  | scatter tensor
     device (0, 0) -> |  *  * |  *  * |  | axis 0
-                     |  *  * |  *  * |  ↓
+                     |  *  * |  *  * |  v
                      +-------+-------+
     device (1, 0) -> |  1  2 |  5  6 |
                      |  3  4 |  7  8 |
                      +-------+-------+
-                                ↑
+                                ^
                               device
                               (1, 1)
     ```
@@ -1002,13 +1002,13 @@ def Shard_ScatterOp : Shard_CollectiveCommunicationOpBase<"scatter", [
     ```
                               device
                               (0, 1)
-                                 ↓
+                                 v
                      +-------+-------+
     device (0, 0) -> |  1  2 |  5  6 |
                      +-------+-------+ 
     device (1, 0) -> |  3  4 |  7  8 |
                      +-------+-------+
-                                ↑
+                                ^
                               device
                               (1, 1)
     ```
diff --git a/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorAttrDefs.td b/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorAttrDefs.td
index b13a9928ae29d4..2eb025ee6e92a9 100644
--- a/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorAttrDefs.td
+++ b/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorAttrDefs.td
@@ -141,7 +141,7 @@ def SparseTensorEncodingAttr : SparseTensor_Attr<"SparseTensorEncoding",
     The encoding contains a map that provides the following:
 
     - An ordered sequence of dimension specifications, each of which defines:
-      - the dimension-size (implicit from the tensor’s dimension-shape)
+      - the dimension-size (implicit from the tensor's dimension-shape)
       - a **dimension-expression**
     - An ordered sequence of level specifications, each of which includes a required
       **level-type**, which defines how the level should be stored. Each level-type
diff --git a/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorBase.td b/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorBase.td
index 74e6783e260faf..5d5a3691f6129b 100644
--- a/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorBase.td
+++ b/mlir/include/mlir/Dialect/SparseTensor/IR/SparseTensorBase.td
@@ -76,7 +76,7 @@ def SparseTensor_Dialect : Dialect {
     Design and Implementation, June, 2020.
     * [Gustavson72] Fred G. Gustavson. Some basic techniques for solving
     sparse systems of linear equations. In Sparse Matrices and Their
-    Applications, pages 41–52. Plenum Press, New York, 1972.
+    Applications, pages 41-52. Plenum Press, New York, 1972.
     * [Kjolstad17] Fredrik Berg Kjolstad, Shoaib Ashraf Kamil, Stephen Chou, David
     Lugato, and Saman Amarasinghe. The Tensor Algebra Compiler. Proceedings of
     the ACM on Programming Languages, October 2017.
diff --git a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td
index 9d0add92737f3c..978d1634733b0f 100644
--- a/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td
+++ b/mlir/include/mlir/Dialect/Tensor/IR/TensorBase.td
@@ -27,14 +27,14 @@ def Tensor_Dialect : Dialect {
       high-performance numerical computing.
     - representing shapes in the `shape` dialect, which consist of small 1D
       tensors of `index` data type.
-    - representing aggregations of strings or “variant” types.
+    - representing aggregations of strings or "variant" types.
     - representing large, sparse aggregations of primitive types, suitable for
       high-performance numerical computing.
 
     Because of this broad element type support and because of the existence of
     more dedicated dialects, such as the `sparse_tensor` and `linalg` dialects,
     we prefer for now to keep the `tensor` dialect as small as possible. The
-    expectation is that at some point in the future, the `tensor` dialect’s
+    expectation is that at some point in the future, the `tensor` dialect's
     scope may be broadened through a careful discussion of the tradeoffs.
 
     On the `tensor` type itself, note that it is actually a builtin type (it
diff --git a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
index 437d0f7c4ee029..5cafaa0d634f27 100644
--- a/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
+++ b/mlir/include/mlir/Dialect/Vector/IR/VectorOps.td
@@ -709,8 +709,8 @@ def Vector_ExtractOp :
      InferTypeOpAdaptor]> {
   let summary = "extract operation";
   let description = [{
-    Extracts an (n − k)-D result sub-vector from an n-D source vector at a
-    specified k-D position. When n = k, the result degenerates to a scalar
+    Extracts an (n - k)-D result sub-vector from an n-D source vector at a
+    specified k-D position. When n = k, the result degenerates to a scalar
     element.
 
     Static and dynamic indices must be greater or equal to zero and less than
diff --git a/mlir/include/mlir/IR/BuiltinTypes.td b/mlir/include/mlir/IR/BuiltinTypes.td
index ffb0e542153ee5..3cd5230ab7feb3 100644
--- a/mlir/include/mlir/IR/BuiltinTypes.td
+++ b/mlir/include/mlir/IR/BuiltinTypes.td
@@ -309,7 +309,7 @@ def Builtin_Float8E3M4 : Builtin_FloatType<"Float8E3M4", "f8E3M4"> {
       * exponent bias: 3
       * infinities: supported with exponent set to all 1s and mantissa 0s
       * NaNs: supported with exponent bits set to all 1s and mantissa values of
-        {0,1}⁴ except S.111.0000
+        {0,1}^4 except S.111.0000
       * denormals when exponent is 0
   }];
 }
diff --git a/mlir/include/mlir/IR/TensorEncoding.td b/mlir/include/mlir/IR/TensorEncoding.td
index a9f93a966599fc..ab89b509485195 100644
--- a/mlir/include/mlir/IR/TensorEncoding.td
+++ b/mlir/include/mlir/IR/TensorEncoding.td
@@ -49,7 +49,7 @@ def VerifiableTensorEncoding : AttrInterface<"VerifiableTensorEncoding"> {
     dimensions via `tensor.collapse_shape`) do not attempt to verify or
     propagate an encoding at all, since there is no way to statically prove
     an arbitrary encoding remains valid once tensors are combined or a
-    dynamic dimension folds two static ones together — the encoding is
+    dynamic dimension folds two static ones together -- the encoding is
     dropped from the result in that case.
   }];
   let methods = [
diff --git a/mlir/include/mlir/Transforms/Passes.td b/mlir/include/mlir/Transforms/Passes.td
index 84709e52b2165d..b0ae1edb888f84 100644
--- a/mlir/include/mlir/Transforms/Passes.td
+++ b/mlir/include/mlir/Transforms/Passes.td
@@ -448,7 +448,7 @@ def SCCPPass : Pass<"sccp"> {
     constant are replaced, and removed if possible.
 
     This implementation is based on the algorithm described by Wegman and Zadeck
-    in [“Constant Propagation with Conditional Branches”](https://dl.acm.org/doi/10.1145/103135.103136) (1991).
+    in ["Constant Propagation with Conditional Branches"](https://dl.acm.org/doi/10.1145/103135.103136) (1991).
   }];
 }
 



More information about the Mlir-commits mailing list