[Mlir-commits] [flang] [mlir] [mlir] Build llvm.mlir.constant attributes from the result type (PR #218607)

llvmlistbot at llvm.org llvmlistbot at llvm.org
Wed Aug 26 02:10:31 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-mlir

Author: Christian Ulmann (Dinistro)

<details>
<summary>Changes</summary>

Many conversion patterns created `llvm.mlir.constant` with a value attribute whose type does not match the result type. The most common case was pairing an `index`-typed attribute with the converted index type:

```
llvm.mlir.constant(1 : index) : i64
```

but there were also plain width and signedness mismatches, e.g. NVGPU's `makeI64Const` built `i64` constants from `i32` attributes, and the NVVM `fdiv` expansion used `ui32` attributes on `i32` values.

Translation to LLVM IR ignores the attribute type and uses the result type, so the emitted IR was correct, but the attribute type is meaningless in this state and anything that reads it back sees the wrong type. Derive the attribute from the result type in every case; where the result is the converted index type, `LLVM::createIndexAttrConstant` now does this for all of its callers.

In `ArithToLLVM`, retype the value attribute when the type converter maps `index` to a different integer type. Two element type changes must not be retyped: the low-precision float types that the converter maps to a same-width
integer keep their float attribute, which `llvm.mlir.constant` accepts and takes the float semantics from, and a resource-backed elements attribute refers to a blob laid out for its own element type. Anything else is a malformed `arith.constant`, and the match fails rather than reinterpreting its value.

`WmmaOpsToNvvm` builds its leading dimension attribute from the `i32` result, so reject a value that does not fit instead of narrowing it silently.

This is in preparation for verifying that the two types agree.

---

Patch is 364.12 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/218607.diff


114 Files Affected:

- (modified) flang/test/Driver/tco-test-gen.fir (+3-5) 
- (modified) flang/test/Fir/CUDA/cuda-gpu-launch-func.mlir (+25-25) 
- (modified) flang/test/Fir/OpenMP/bounds-generation-for-char-arrays.f90 (+6-6) 
- (modified) flang/test/Fir/convert-and-fold-insert-on-range.fir (+2-2) 
- (modified) flang/test/Fir/convert-memref-codegen.mlir (+7-7) 
- (modified) flang/test/Fir/convert-nontemporal-to-llvm.fir (+1-1) 
- (modified) flang/test/Fir/convert-to-llvm-access-group.fir (+2-2) 
- (modified) flang/test/Fir/convert-to-llvm-openmp-and-fir.fir (+49-43) 
- (modified) flang/test/Fir/convert-to-llvm.fir (+19-19) 
- (modified) flang/test/Fir/embox-char.fir (+5-5) 
- (modified) flang/test/Fir/embox-substring.fir (+1-1) 
- (modified) flang/test/Fir/rebox-susbtring.fir (+1-1) 
- (modified) flang/test/Fir/tbaa.fir (+2-2) 
- (modified) mlir/docs/TargetLLVMIR.md (+7-7) 
- (modified) mlir/docs/Tutorials/Toy/Ch-6.md (+3-3) 
- (modified) mlir/include/mlir/Conversion/LLVMCommon/Pattern.h (+7-6) 
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.h (+7) 
- (modified) mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp (+4-4) 
- (modified) mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp (+85-4) 
- (modified) mlir/lib/Conversion/FuncToLLVM/FuncToLLVM.cpp (+5-5) 
- (modified) mlir/lib/Conversion/GPUCommon/GPUOpsLowering.cpp (+1-1) 
- (modified) mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp (+12-20) 
- (modified) mlir/lib/Conversion/GPUToNVVM/WmmaOpsToNvvm.cpp (+16-2) 
- (modified) mlir/lib/Conversion/LLVMCommon/Pattern.cpp (+1-1) 
- (modified) mlir/lib/Conversion/LLVMCommon/TypeConverter.cpp (+1-1) 
- (modified) mlir/lib/Conversion/MPIToLLVM/MPIToLLVM.cpp (+1-1) 
- (modified) mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp (+10-10) 
- (modified) mlir/lib/Conversion/NVGPUToNVVM/NVGPUToNVVM.cpp (+1-1) 
- (modified) mlir/lib/Conversion/OpenACCToLLVM/ACCToLLVMUtils.cpp (+4-4) 
- (modified) mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVM.cpp (+1-1) 
- (modified) mlir/lib/Conversion/VectorToLLVM/ConvertVectorToLLVM.cpp (+4-6) 
- (modified) mlir/lib/Conversion/XeGPUToXeVM/XeGPUToXeVM.cpp (+1-1) 
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp (+3-3) 
- (modified) mlir/lib/Dialect/NVVM/Transforms/OptimizeForNVVM.cpp (+3-3) 
- (modified) mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir (+1-1) 
- (modified) mlir/test/Conversion/AMDGPUToROCDL/load_lds-gfx950.mlir (+4-4) 
- (modified) mlir/test/Conversion/AMDGPUToROCDL/load_lds.mlir (+15-15) 
- (modified) mlir/test/Conversion/ArithToLLVM/arith-to-llvm.mlir (+115-1) 
- (added) mlir/test/Conversion/ArithToLLVM/constant-index-bitwidth.mlir (+44) 
- (modified) mlir/test/Conversion/FuncToLLVM/calling-convention.mlir (+17-17) 
- (modified) mlir/test/Conversion/FuncToLLVM/func-memref-return.mlir (+13-13) 
- (modified) mlir/test/Conversion/FuncToLLVM/func-to-llvm.mlir (+29-29) 
- (modified) mlir/test/Conversion/GPUCommon/lower-launch-func-bare-ptr-intersperse-size.mlir (+3-3) 
- (modified) mlir/test/Conversion/GPUCommon/lower-launch-func-bare-ptr.mlir (+3-3) 
- (modified) mlir/test/Conversion/GPUCommon/lower-launch-func-to-gpu-runtime-calls.mlir (+5-5) 
- (modified) mlir/test/Conversion/GPUCommon/memory-attrbution.mlir (+32-28) 
- (modified) mlir/test/Conversion/GPUToLLVMSPV/gpu-to-llvm-spv.mlir (+3) 
- (modified) mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir (+2-2) 
- (modified) mlir/test/Conversion/GPUToNVVM/wmma-ops-to-nvvm.mlir (+19-19) 
- (modified) mlir/test/Conversion/MPIToLLVM/mpitollvm.mlir (+2-2) 
- (modified) mlir/test/Conversion/MemRefToLLVM/convert-dynamic-memref-ops.mlir (+45-45) 
- (modified) mlir/test/Conversion/MemRefToLLVM/convert-static-memref-ops.mlir (+43-43) 
- (modified) mlir/test/Conversion/MemRefToLLVM/expand-then-convert-to-llvm.mlir (+55-55) 
- (modified) mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir (+58-58) 
- (modified) mlir/test/Conversion/NVGPUToNVVM/nvgpu-to-nvvm.mlir (+25-25) 
- (modified) mlir/test/Conversion/OpenMPToLLVM/convert-to-llvmir.mlir (+21-21) 
- (modified) mlir/test/Conversion/PtrToLLVM/ptr-to-llvm.mlir (+7-7) 
- (modified) mlir/test/Conversion/VectorToLLVM/vector-load-store-to-llvm.mlir (+10-10) 
- (modified) mlir/test/Conversion/VectorToLLVM/vector-to-llvm-32b.mlir (+1-1) 
- (modified) mlir/test/Conversion/VectorToLLVM/vector-to-llvm-interface.mlir (+12-12) 
- (modified) mlir/test/Dialect/Affine/loop-fusion-4.mlir (+2-2) 
- (modified) mlir/test/Dialect/GPU/dynamic-shared-memory.mlir (+12-12) 
- (modified) mlir/test/Dialect/LLVM/lower-to-llvm-e2e-with-target-tag.mlir (+1-1) 
- (modified) mlir/test/Dialect/LLVM/lower-to-llvm-e2e-with-top-level-named-sequence.mlir (+1-1) 
- (modified) mlir/test/Dialect/LLVMIR/constant-folding.mlir (+1-1) 
- (modified) mlir/test/Dialect/LLVMIR/optimize-for-nvvm.mlir (+2-2) 
- (modified) mlir/test/Dialect/Linalg/fusion-multiuse-producer.mlir (+2-2) 
- (modified) mlir/test/Dialect/OpenMP/host-op-filtering.mlir (+3-3) 
- (modified) mlir/test/Dialect/OpenMP/omp-offload-privatization-prepare-by-value.mlir (+4-4) 
- (modified) mlir/test/Dialect/OpenMP/omp-offload-privatization-prepare.mlir (+2-2) 
- (modified) mlir/test/Dialect/OpenMP/ops.mlir (+16-16) 
- (modified) mlir/test/Dialect/Vector/canonicalize.mlir (+3-3) 
- (modified) mlir/test/Dialect/X86/AMX/legalize-for-llvm.mlir (+4) 
- (modified) mlir/test/Integration/Dialect/LLVMIR/CPU/test-vector-reductions-fp.mlir (+1-1) 
- (modified) mlir/test/Integration/Dialect/LLVMIR/CPU/test-vector-reductions-int.mlir (+1-1) 
- (modified) mlir/test/Integration/Dialect/MemRef/assume-alignment-runtime-verification.mlir (+3-3) 
- (modified) mlir/test/Integration/Dialect/MemRef/atomic-rmw-runtime-verification.mlir (+3-3) 
- (modified) mlir/test/Integration/Dialect/MemRef/store-runtime-verification.mlir (+3-3) 
- (modified) mlir/test/Integration/Dialect/Vector/CPU/X86/inline-asm-vector-avx512.mlir (+1-1) 
- (modified) mlir/test/Target/LLVMIR/arm-sme.mlir (+2-2) 
- (modified) mlir/test/Target/LLVMIR/arm-sve.mlir (+2-2) 
- (modified) mlir/test/Target/LLVMIR/gpu.mlir (+10-10) 
- (modified) mlir/test/Target/LLVMIR/llvmir.mlir (+63-63) 
- (modified) mlir/test/Target/LLVMIR/omptarget-array-sectioning-host.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/omptarget-data-use-dev-ordering.mlir (+6-6) 
- (modified) mlir/test/Target/LLVMIR/omptarget-debug-var-2.mlir (+4-4) 
- (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-host.mlir (+2-2) 
- (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-to-host.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/omptarget-depend-host-only.mlir (+4-4) 
- (modified) mlir/test/Target/LLVMIR/omptarget-depend.mlir (+7-7) 
- (modified) mlir/test/Target/LLVMIR/omptarget-fortran-common-block-host.mlir (+2-2) 
- (modified) mlir/test/Target/LLVMIR/omptarget-llvm.mlir (+20-20) 
- (modified) mlir/test/Target/LLVMIR/omptarget-memcpy-align-metadata.mlir (+1-1) 
- (modified) mlir/test/Target/LLVMIR/omptarget-nested-ptr-record-type-mapping-host.mlir (+5-5) 
- (modified) mlir/test/Target/LLVMIR/omptarget-nested-record-type-mapping-host.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/omptarget-nowait.mlir (+1-1) 
- (modified) mlir/test/Target/LLVMIR/omptarget-record-type-mapping-host.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/omptarget-record-type-with-ptr-member-host.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/omptarget-teams-reduction.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/omptarget-wsloop-collapsed.mlir (+1-1) 
- (modified) mlir/test/Target/LLVMIR/openmp-data-target-device.mlir (+5-5) 
- (modified) mlir/test/Target/LLVMIR/openmp-llvm.mlir (+20-20) 
- (modified) mlir/test/Target/LLVMIR/openmp-nested-task-target-parallel.mlir (+4-4) 
- (modified) mlir/test/Target/LLVMIR/openmp-nested.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/openmp-nontemporal.mlir (+2-2) 
- (modified) mlir/test/Target/LLVMIR/openmp-private.mlir (+1-1) 
- (modified) mlir/test/Target/LLVMIR/openmp-reduction-array-sections.mlir (+4-4) 
- (modified) mlir/test/Target/LLVMIR/openmp-simd-linear.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/openmp-target-private.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/openmp-target-wsloop-private.mlir (+1-1) 
- (modified) mlir/test/Target/LLVMIR/openmp-teams-reduction.mlir (+3-3) 
- (modified) mlir/test/Target/LLVMIR/openmp-wsloop-test-block-structure.mlir (+2-2) 
- (modified) mlir/test/mlir-runner/simple.mlir (+2-2) 
- (modified) mlir/test/mlir-runner/verify-entry-point.mlir (+4-4) 


``````````diff
diff --git a/flang/test/Driver/tco-test-gen.fir b/flang/test/Driver/tco-test-gen.fir
index 438804ce42b76..4c9f9c1ed79d3 100644
--- a/flang/test/Driver/tco-test-gen.fir
+++ b/flang/test/Driver/tco-test-gen.fir
@@ -44,12 +44,10 @@ func.func @_QPtest(%arg0: !fir.ref<i32> {fir.bindc_name = "num"}, %arg1: !fir.re
 
 // CMPLX:           %[[VAL_0:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CMPLX:           %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr
-// CMPLX:           %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
-// CMPLX:           %[[VAL_3:.*]] = llvm.mlir.constant(0 : index) : i64
-// CMPLX:           %[[VAL_4:.*]] = llvm.mlir.constant(1 : i64) : i64
+// CMPLX:           %[[VAL_2:.*]] = llvm.mlir.constant(1 : i64) : i64
+// CMPLX:           %[[VAL_3:.*]] = llvm.mlir.constant(0 : i64) : i64
 
-// SIMPLE:          %[[VAL_3:.*]] = llvm.mlir.constant(0 : index) : i64
-// SIMPLE:          %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
+// SIMPLE:          %[[VAL_3:.*]] = llvm.mlir.constant(0 : i64) : i64
 // SIMPLE:          %[[VAL_0:.*]] = llvm.mlir.constant(1 : i64) : i64
 // SIMPLE:          %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr
 
diff --git a/flang/test/Fir/CUDA/cuda-gpu-launch-func.mlir b/flang/test/Fir/CUDA/cuda-gpu-launch-func.mlir
index 03e441ada81c9..c70d775e0924b 100644
--- a/flang/test/Fir/CUDA/cuda-gpu-launch-func.mlir
+++ b/flang/test/Fir/CUDA/cuda-gpu-launch-func.mlir
@@ -9,21 +9,21 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i1, dense<8> : ve
     %4 = llvm.mlir.constant(25 : i32) : i32
     %5 = llvm.mlir.constant(21 : i32) : i32
     %6 = llvm.mlir.constant(17 : i32) : i32
-    %7 = llvm.mlir.constant(1 : index) : i64
+    %7 = llvm.mlir.constant(1 : i64) : i64
     %8 = llvm.mlir.constant(27 : i32) : i32
     %9 = llvm.mlir.constant(6 : i32) : i32
     %10 = llvm.mlir.constant(1 : i32) : i32
     %11 = llvm.mlir.constant(0 : i32) : i32
-    %12 = llvm.mlir.constant(10 : index) : i64
+    %12 = llvm.mlir.constant(10 : i64) : i64
     %13 = llvm.mlir.addressof @_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5 : !llvm.ptr
     %14 = llvm.call @_FortranACUFMemAlloc(%2, %11, %13, %6) : (i64, i32, !llvm.ptr, i32) -> !llvm.ptr
-    %15 = llvm.mlir.constant(10 : index) : i64
-    %16 = llvm.mlir.constant(1 : index) : i64
+    %15 = llvm.mlir.constant(10 : i64) : i64
+    %16 = llvm.mlir.constant(1 : i64) : i64
     %17 = llvm.alloca %15 x i32 : (i64) -> !llvm.ptr
     %18 = llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
     %19 = llvm.insertvalue %17, %18[0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
     %20 = llvm.insertvalue %17, %19[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
-    %21 = llvm.mlir.constant(0 : index) : i64
+    %21 = llvm.mlir.constant(0 : i64) : i64
     %22 = llvm.insertvalue %21, %20[2] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
     %23 = llvm.insertvalue %15, %22[3, 0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
     %24 = llvm.insertvalue %16, %23[4, 0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
@@ -31,21 +31,21 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i1, dense<8> : ve
     %26 = llvm.mlir.undef : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)>
     %27 = llvm.insertvalue %25, %26[0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
     %28 = llvm.insertvalue %25, %27[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
-    %29 = llvm.mlir.constant(0 : index) : i64
+    %29 = llvm.mlir.constant(0 : i64) : i64
     %30 = llvm.insertvalue %29, %28[2] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
-    %31 = llvm.mlir.constant(10 : index) : i64
+    %31 = llvm.mlir.constant(10 : i64) : i64
     %32 = llvm.insertvalue %31, %30[3, 0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
-    %33 = llvm.mlir.constant(1 : index) : i64
+    %33 = llvm.mlir.constant(1 : i64) : i64
     %34 = llvm.insertvalue %33, %32[4, 0] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
-    %35 = llvm.mlir.constant(1 : index) : i64
-    %36 = llvm.mlir.constant(11 : index) : i64
-    %37 = llvm.mlir.constant(1 : index) : i64
+    %35 = llvm.mlir.constant(1 : i64) : i64
+    %36 = llvm.mlir.constant(11 : i64) : i64
+    %37 = llvm.mlir.constant(1 : i64) : i64
     llvm.br ^bb1(%35 : i64)
   ^bb1(%38: i64):  // 2 preds: ^bb0, ^bb2
     %39 = llvm.icmp "slt" %38, %36 : i64
     llvm.cond_br %39, ^bb2, ^bb3
   ^bb2:  // pred: ^bb1
-    %40 = llvm.mlir.constant(-1 : index) : i64
+    %40 = llvm.mlir.constant(-1 : i64) : i64
     %41 = llvm.add %38, %40 : i64
     %42 = llvm.extractvalue %34[1] : !llvm.struct<(ptr, ptr, i64, array<1 x i64>, array<1 x i64>)> 
     %43 = llvm.getelementptr %42[%41] : (!llvm.ptr, i64) -> !llvm.ptr, i32
@@ -118,10 +118,10 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<!llvm.ptr<272>, d
     llvm.return
   }
   llvm.func @_QQmain() attributes {fir.bindc_name = "test"} {
-    %0 = llvm.mlir.constant(1 : index) : i64
-    %1 = llvm.mlir.constant(2 : index) : i64
+    %0 = llvm.mlir.constant(1 : i64) : i64
+    %1 = llvm.mlir.constant(2 : i64) : i64
     %2 = llvm.mlir.constant(0 : i32) : i32
-    %3 = llvm.mlir.constant(10 : index) : i64
+    %3 = llvm.mlir.constant(10 : i64) : i64
     gpu.launch_func  @cuda_device_mod::@_QMmod1Psub1 clusters in (%1, %1, %0) blocks in (%3, %3, %0) threads in (%3, %3, %0) : i64 dynamic_shared_memory_size %2  {cuf.proc_attr = #cuf.cuda_proc<global>}
     llvm.return
   }
@@ -143,12 +143,12 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i1, dense<8> : ve
     %4 = llvm.mlir.constant(25 : i32) : i32
     %5 = llvm.mlir.constant(21 : i32) : i32
     %6 = llvm.mlir.constant(17 : i32) : i32
-    %7 = llvm.mlir.constant(1 : index) : i64
+    %7 = llvm.mlir.constant(1 : i64) : i64
     %8 = llvm.mlir.constant(27 : i32) : i32
     %9 = llvm.mlir.constant(6 : i32) : i32
     %10 = llvm.mlir.constant(1 : i32) : i32
     %11 = llvm.mlir.constant(0 : i32) : i32
-    %12 = llvm.mlir.constant(10 : index) : i64
+    %12 = llvm.mlir.constant(10 : i64) : i64
     %13 = llvm.mlir.addressof @_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5 : !llvm.ptr
     %14 = llvm.call @_FortranACUFMemAlloc(%2, %11, %13, %6) : (i64, i32, !llvm.ptr, i32) -> !llvm.ptr
     gpu.launch_func  @cuda_device_mod::@_QMmod1Psub1 blocks in (%7, %7, %7) threads in (%12, %7, %7) : i64 dynamic_shared_memory_size %11 args(%14 : !llvm.ptr) {cuf.proc_attr = #cuf.cuda_proc<grid_global>}
@@ -174,11 +174,11 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<!llvm.ptr<272>, d
     llvm.return
   }
   llvm.func @_QQmain() attributes {fir.bindc_name = "test"} {
-    %0 = llvm.mlir.constant(1 : index) : i64
+    %0 = llvm.mlir.constant(1 : i64) : i64
     %stream = llvm.alloca %0 x i64 : (i64) -> !llvm.ptr
-    %1 = llvm.mlir.constant(2 : index) : i64
+    %1 = llvm.mlir.constant(2 : i64) : i64
     %2 = llvm.mlir.constant(0 : i32) : i32
-    %3 = llvm.mlir.constant(10 : index) : i64
+    %3 = llvm.mlir.constant(10 : i64) : i64
     %token = cuf.stream_cast %stream : !llvm.ptr
     %res_token = gpu.launch_func async [%token] @cuda_device_mod::@_QMmod1Psub1 blocks in (%3, %3, %0) threads in (%3, %3, %0) : i64 dynamic_shared_memory_size %2 {cuf.proc_attr = #cuf.cuda_proc<global>}
     llvm.return
@@ -204,12 +204,12 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<i1, dense<8> : ve
     %4 = llvm.mlir.constant(25 : i32) : i32
     %5 = llvm.mlir.constant(21 : i32) : i32
     %6 = llvm.mlir.constant(17 : i32) : i32
-    %7 = llvm.mlir.constant(1 : index) : i64
+    %7 = llvm.mlir.constant(1 : i64) : i64
     %8 = llvm.mlir.constant(27 : i32) : i32
     %9 = llvm.mlir.constant(6 : i32) : i32
     %10 = llvm.mlir.constant(1 : i32) : i32
     %11 = llvm.mlir.constant(0 : i32) : i32
-    %12 = llvm.mlir.constant(10 : index) : i64
+    %12 = llvm.mlir.constant(10 : i64) : i64
     %13 = llvm.mlir.addressof @_QQclX91d13f6e74caa2f03965d7a7c6a8fdd5 : !llvm.ptr
     %14 = llvm.call @_FortranACUFMemAlloc(%2, %11, %13, %6) : (i64, i32, !llvm.ptr, i32) -> !llvm.ptr
     %token = cuf.stream_cast %stream : !llvm.ptr
@@ -238,10 +238,10 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<#dlti.dl_entry<!llvm.ptr<272>, d
     llvm.return
   }
   llvm.func @_QQmain() attributes {fir.bindc_name = "test"} {
-    %0 = llvm.mlir.constant(1 : index) : i64
-    %1 = llvm.mlir.constant(2 : index) : i64
+    %0 = llvm.mlir.constant(1 : i64) : i64
+    %1 = llvm.mlir.constant(2 : i64) : i64
     %2 = llvm.mlir.constant(0 : i32) : i32
-    %3 = llvm.mlir.constant(10 : index) : i64
+    %3 = llvm.mlir.constant(10 : i64) : i64
     %stream = llvm.alloca %0 x i64 : (i64) -> !llvm.ptr
     %token = cuf.stream_cast %stream : !llvm.ptr
     %res_token = gpu.launch_func async [%token] @cuda_device_mod::@_QMmod1Psub1 blocks in (%3, %3, %0) threads in (%3, %3, %0) : i64 dynamic_shared_memory_size %2  {cuf.proc_attr = #cuf.cuda_proc<global>}
diff --git a/flang/test/Fir/OpenMP/bounds-generation-for-char-arrays.f90 b/flang/test/Fir/OpenMP/bounds-generation-for-char-arrays.f90
index 2ef87d9180c24..ef5f5f63f13ca 100644
--- a/flang/test/Fir/OpenMP/bounds-generation-for-char-arrays.f90
+++ b/flang/test/Fir/OpenMP/bounds-generation-for-char-arrays.f90
@@ -17,10 +17,10 @@ module attributes {omp.is_target_device = false} {
 
 // CHECK-LABEL:   llvm.func @_QPchar_array(
 // CHECK-SAME:      %[[ARG0:.*]]: !llvm.ptr) {
-// CHECK:           %[[VAL_0:.*]] = llvm.mlir.constant(9 : index) : i64
-// CHECK:           %[[VAL_1:.*]] = llvm.mlir.constant(0 : index) : i64
-// CHECK:           %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
-// CHECK:           %[[VAL_3:.*]] = llvm.mlir.constant(10 : index) : i64
+// CHECK:           %[[VAL_0:.*]] = llvm.mlir.constant(9 : i64) : i64
+// CHECK:           %[[VAL_1:.*]] = llvm.mlir.constant(0 : i64) : i64
+// CHECK:           %[[VAL_2:.*]] = llvm.mlir.constant(1 : i64) : i64
+// CHECK:           %[[VAL_3:.*]] = llvm.mlir.constant(10 : i64) : i64
 // CHECK:           %[[VAL_4:.*]] = omp.map.bounds lower_bound(%[[VAL_1]] : i64) upper_bound(%[[VAL_0]] : i64) extent(%[[VAL_3]] : i64) stride(%[[VAL_2]] : i64) start_idx(%[[VAL_2]] : i64)
 // CHECK:           %[[VAL_5:.*]] = omp.map.bounds lower_bound(%[[VAL_1]] : i64) upper_bound(%[[VAL_0]] : i64) extent(%[[VAL_3]] : i64) stride(%[[VAL_2]] : i64) start_idx(%[[VAL_2]] : i64)
 // CHECK:           %[[VAL_6:.*]] = llvm.mlir.constant(0 : i64) : i64
@@ -59,8 +59,8 @@ module attributes {omp.is_target_device = false} {
 // CHECK-SAME:      %[[ARG0:.*]]: !llvm.ptr) {
 // CHECK:           %[[VAL_0:.*]] = llvm.mlir.constant(1 : i32) : i32
 // CHECK:           %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<2 x array<3 x i64>>)> {alignment = 8 : i64} : (i32) -> !llvm.ptr
-// CHECK:           %[[VAL_2:.*]] = llvm.mlir.constant(1 : index) : i64
-// CHECK:           %[[VAL_3:.*]] = llvm.mlir.constant(0 : index) : i64
+// CHECK:           %[[VAL_2:.*]] = llvm.mlir.constant(1 : i64) : i64
+// CHECK:           %[[VAL_3:.*]] = llvm.mlir.constant(0 : i64) : i64
 // CHECK:           %[[VAL_4:.*]] = llvm.mlir.constant(72 : i32) : i32
 // CHECK:           "llvm.intr.memcpy"(%[[VAL_1]], %[[ARG0]], %[[VAL_4]]) <{arg_attrs = [{{.*}}], isVolatile = false}> : (!llvm.ptr, !llvm.ptr, i32) -> ()
 // CHECK:           %[[VAL_5:.*]] = llvm.getelementptr %[[VAL_1]][0, 7, %[[VAL_3]], 0] : (!llvm.ptr, i64) -> !llvm.ptr, !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<2 x array<3 x i64>>)>
diff --git a/flang/test/Fir/convert-and-fold-insert-on-range.fir b/flang/test/Fir/convert-and-fold-insert-on-range.fir
index df18614d80b63..b12920f2e245b 100644
--- a/flang/test/Fir/convert-and-fold-insert-on-range.fir
+++ b/flang/test/Fir/convert-and-fold-insert-on-range.fir
@@ -20,13 +20,13 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<!llvm.ptr<270> = dense<32> : vec
 //CHECK-SAME:  [
 //CHECK-SAME:    [#llvm.zero, 8, 20240719 : i32, 1 : i8, 28 : i8, 2 : i8, 0 : i8,
 //CHECK-SAME:      [
-//CHECK-SAME:        [1, 0 : index, 8]
+//CHECK-SAME:        [1, 0, 8]
 //CHECK-SAME:      ]
 //CHECK-SAME:    ],
 //CHECK-SAME:  [
 //CHECK-SAME:    [#llvm.zero, 8, 20240719 : i32, 1 : i8, 28 : i8, 2 : i8, 0 : i8,
 //CHECK-SAME:      [
-//CHECK-SAME:        [1, 0 : index, 8]
+//CHECK-SAME:        [1, 0, 8]
 //CHECK-SAME:      ]
 //CHECK-SAME:    ]) :
 //CHECK-SAME: !llvm.array<2 x struct<"sometype", (struct<(ptr, i64, i32, i8, i8, i8, i8, array<1 x array<3 x i64>>)>)>>
diff --git a/flang/test/Fir/convert-memref-codegen.mlir b/flang/test/Fir/convert-memref-codegen.mlir
index 0d8d3e6093253..f31e50dc761d1 100644
--- a/flang/test/Fir/convert-memref-codegen.mlir
+++ b/flang/test/Fir/convert-memref-codegen.mlir
@@ -21,7 +21,7 @@
 // CHECK:         %[[POISON1:.*]] = llvm.mlir.poison : !llvm.struct<(ptr, ptr, i64)>
 // CHECK:         %[[DESC2:.*]] = llvm.insertvalue %[[BUF]], %[[POISON1]][0] : !llvm.struct<(ptr, ptr, i64)>
 // CHECK:         %[[DESC3:.*]] = llvm.insertvalue %[[BUF]], %[[DESC2]][1] : !llvm.struct<(ptr, ptr, i64)>
-// CHECK:         %[[ZERO:.*]] = llvm.mlir.constant(0 : index) : i64
+// CHECK:         %[[ZERO:.*]] = llvm.mlir.constant(0 : i64) : i64
 // CHECK:         %[[DESC4:.*]] = llvm.insertvalue %[[ZERO]], %[[DESC3]][2] : !llvm.struct<(ptr, ptr, i64)>
 //
 // CHECK-NOT:     fir.convert
@@ -48,7 +48,7 @@ func.func @memref_to_ref_convert(%arg0: memref<f32>) {
 // CHECK:           %[[MLIR_1:.*]] = llvm.mlir.poison : !llvm.struct<(ptr, ptr, i64)>
 // CHECK:           %[[INSERTVALUE_3:.*]] = llvm.insertvalue %[[GETELEMENTPTR_0]], %[[MLIR_1]][0] : !llvm.struct<(ptr, ptr, i64)>
 // CHECK:           %[[INSERTVALUE_4:.*]] = llvm.insertvalue %[[GETELEMENTPTR_0]], %[[INSERTVALUE_3]][1] : !llvm.struct<(ptr, ptr, i64)>
-// CHECK:           %[[MLIR_2:.*]] = llvm.mlir.constant(0 : index) : i64
+// CHECK:           %[[MLIR_2:.*]] = llvm.mlir.constant(0 : i64) : i64
 // CHECK:           %[[INSERTVALUE_5:.*]] = llvm.insertvalue %[[MLIR_2]], %[[INSERTVALUE_4]][2] : !llvm.struct<(ptr, ptr, i64)>
 // CHECK:           llvm.return %[[INSERTVALUE_5]] : !llvm.struct<(ptr, ptr, i64)>
 // CHECK:         }
@@ -78,15 +78,15 @@ func.func @memref_to_memref_convert(%arg0: memref<f32>) -> memref<i1> {
 // CHECK:           %[[MLIR_1:.*]] = llvm.mlir.poison : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
 // CHECK:           %[[INSERTVALUE_5:.*]] = llvm.insertvalue %[[GETELEMENTPTR_0]], %[[MLIR_1]][0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
 // CHECK:           %[[INSERTVALUE_6:.*]] = llvm.insertvalue %[[GETELEMENTPTR_0]], %[[INSERTVALUE_5]][1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
-// CHECK:           %[[MLIR_2:.*]] = llvm.mlir.constant(0 : index) : i64
+// CHECK:           %[[MLIR_2:.*]] = llvm.mlir.constant(0 : i64) : i64
 // CHECK:           %[[INSERTVALUE_7:.*]] = llvm.insertvalue %[[MLIR_2]], %[[INSERTVALUE_6]][2] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
-// CHECK:           %[[MLIR_3:.*]] = llvm.mlir.constant(2 : index) : i64
+// CHECK:           %[[MLIR_3:.*]] = llvm.mlir.constant(2 : i64) : i64
 // CHECK:           %[[INSERTVALUE_8:.*]] = llvm.insertvalue %[[MLIR_3]], %[[INSERTVALUE_7]][3, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
-// CHECK:           %[[MLIR_4:.*]] = llvm.mlir.constant(3 : index) : i64
+// CHECK:           %[[MLIR_4:.*]] = llvm.mlir.constant(3 : i64) : i64
 // CHECK:           %[[INSERTVALUE_9:.*]] = llvm.insertvalue %[[MLIR_4]], %[[INSERTVALUE_8]][4, 0] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
-// CHECK:           %[[MLIR_5:.*]] = llvm.mlir.constant(3 : index) : i64
+// CHECK:           %[[MLIR_5:.*]] = llvm.mlir.constant(3 : i64) : i64
 // CHECK:           %[[INSERTVALUE_10:.*]] = llvm.insertvalue %[[MLIR_5]], %[[INSERTVALUE_9]][3, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
-// CHECK:           %[[MLIR_6:.*]] = llvm.mlir.constant(1 : index) : i64
+// CHECK:           %[[MLIR_6:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CHECK:           %[[INSERTVALUE_11:.*]] = llvm.insertvalue %[[MLIR_6]], %[[INSERTVALUE_10]][4, 1] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
 // CHECK:           llvm.return %[[INSERTVALUE_11]] : !llvm.struct<(ptr, ptr, i64, array<2 x i64>, array<2 x i64>)>
 // CHECK:         }
diff --git a/flang/test/Fir/convert-nontemporal-to-llvm.fir b/flang/test/Fir/convert-nontemporal-to-llvm.fir
index 584f1055b9e4f..f64012e0b6798 100644
--- a/flang/test/Fir/convert-nontemporal-to-llvm.fir
+++ b/flang/test/Fir/convert-nontemporal-to-llvm.fir
@@ -50,7 +50,7 @@
 // CHECK:    %[[CONST_VAL:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CHECK:    %[[ALLOCA2:.*]] = llvm.alloca %[[CONST_VAL]] x i32 {bindc_name = "i"} : (i64) -> !llvm.ptr
 // CHECK:    %[[IDX_VAL:.*]] = llvm.mlir.constant(1 : i32) : i32
-// CHECK:    %[[CONST_VAL1:.*]] = llvm.mlir.constant(0 : index) : i64
+// CHECK:    %[[CONST_VAL1:.*]] = llvm.mlir.constant(0 : i64) : i64
 // CHECK:    %[[END_IDX:.*]] = llvm.mlir.constant(100 : i32) : i32
 // CHECK:    omp.simd nontemporal(%[[ARG0:.*]] : !llvm.ptr) {
 // CHECK:      omp.loop_nest (%[[ARG3:.*]]) : i32 = (%[[IDX_VAL]]) to (%[[END_IDX]]) inclusive step (%[[IDX_VAL]]) {
diff --git a/flang/test/Fir/convert-to-llvm-access-group.fir b/flang/test/Fir/convert-to-llvm-access-group.fir
index f9807c8b8ed09..a3e9c50040d89 100644
--- a/flang/test/Fir/convert-to-llvm-access-group.fir
+++ b/flang/test/Fir/convert-to-llvm-access-group.fir
@@ -11,8 +11,8 @@
 // CHECK:           %[[ALLOCA_0:.*]] = llvm.alloca %[[MLIR_0]] x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8, array<2 x array<3 x i64>>)> {alignment = 8 : i64} : (i32) -> !llvm.ptr
 // CHECK:           %[[MLIR_1:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CHECK:           %[[ALLOCA_1:.*]] = llvm.alloca %[[MLIR_1]] x i32 {bindc_name = "j"} : (i64) -> !llvm.ptr
-// CHECK:           %[[MLIR_2:.*]] = llvm.mlir.constant(0 : index) : i64
-// CHECK:           %[[MLIR_3:.*]] = llvm.mlir.constant(1 : index) : i64
+// CHECK:           %[[MLIR_2:.*]] = llvm.mlir.constant(0 : i64) : i64
+// CHECK:           %[[MLIR_3:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CHECK:           %[[MLIR_4:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CHECK:           %[[LOAD_0:.*]] = llvm.load %[[ARG2]] : !llvm.ptr -> i32
 // CHECK:           %[[SEXT_0:.*]] = llvm.sext %[[LOAD_0]] : i32 to i64
diff --git a/flang/test/Fir/convert-to-llvm-openmp-and-fir.fir b/flang/test/Fir/convert-to-llvm-openmp-and-fir.fir
index 09d14300002aa..2e8bc25e08b7a 100644
--- a/flang/test/Fir/convert-to-llvm-openmp-and-fir.fir
+++ b/flang/test/Fir/convert-to-llvm-openmp-and-fir.fir
@@ -287,44 +287,50 @@ func.func @_QPomp_target_data() {
 // CHECK:           %[[VAL_6:.*]] = llvm.alloca %[[VAL_5]] x !llvm.array<1024 x i32> {bindc_name = "b"} : (i64) -> !llvm.ptr
 // CHECK:           %[[VAL_7:.*]] = llvm.mlir.constant(1 : i64) : i64
 // CHECK:           %[[VAL_8:.*]] = llvm.alloca %[[VAL_7]] x !llvm.array<1024 x i32> {bindc_name = "a"} : (i64) -> !llvm.ptr
-// CHECK:           %[[VAL_0:.*]] = llvm.mlir.constant(1024 : index) : i64
-// CHECK:           %[[VAL_9:.*]] = llvm.mlir.constant(1024 : index) : i64
-// CHECK:           %[[VAL_10:.*]] = llvm.mlir.constant(1024 : index) : i64
-// CHECK:           %[[VAL_11:.*]] = llvm.mlir.constant(1024 : index) : i64
-// CHECK:           %[[VAL_12:.*]] = llvm.mlir.constant(1 : index) : i64
-// CHECK:           %[[VAL_13:.*]] = llvm.mlir.constant(0 : index) : i64
-// CHECK:           %[[VAL_14:.*]] = llvm.mlir.constant(1023 : index) : i64
+// Each extent constant is followed by an identically-printed stride constant,
+// so the strides have to be matched explicitly to keep the sequence aligned.
+// CHECK:           %[[VAL_0:.*]] = llvm.mlir.constant(1024 : i64) : i64
+// CHECK-NEXT:      llvm.mlir.constant(1 : i64) : i64
+// CHECK-NEXT:      %[[VAL_9:.*]] = llvm.mlir.constant(1024 : i64) : i64
+// CHECK-NEXT:      llvm.mlir.constant(1 : i64) : i64
+// CHECK-NEXT:      %[[VAL_10:.*]] = llvm.mlir.constant(1024 : i64) : i64
+// CHECK-NEXT:      llvm.mlir.constant(1 : i64) : i64
+// CHECK-NEXT:      %[[VAL_11:.*]] = llvm.mlir...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/218607


More information about the Mlir-commits mailing list