[flang-commits] [flang] [mlir] [mlir] Ptr dialect (PR #73057)
via flang-commits
flang-commits at lists.llvm.org
Tue Mar 26 17:34:06 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-openmp
Author: Fabian Mora (fabianmcg)
<details>
<summary>Changes</summary>
This patch introduces the Ptr dialect, a dialect to model pointer operations motivated by the goal of modularizing the LLVM dialect.
More specifically, this patch introduces:
- The pointer dialect and type.
- The `MemorySpaceAttrInterface` interface, an interface to conceptualize memory models, giving proper semantic meaning to the Ptr dialect ops.
- Migrates all projects to use the `ptr` dialect.
---
Patch is 773.27 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/73057.diff
187 Files Affected:
- (modified) flang/lib/Optimizer/CodeGen/CMakeLists.txt (+1)
- (modified) flang/lib/Optimizer/CodeGen/CodeGen.cpp (+2)
- (modified) flang/lib/Optimizer/Support/CMakeLists.txt (+1)
- (modified) flang/lib/Optimizer/Support/InitFIR.cpp (+3)
- (modified) flang/test/Fir/convert-to-llvm-openmp-and-fir.fir (+32-32)
- (modified) flang/test/Fir/convert-to-llvm.fir (+92-92)
- (modified) flang/test/Fir/embox-char.fir (+24-24)
- (modified) flang/test/Fir/embox-substring.fir (+1-1)
- (modified) flang/test/Fir/rebox-susbtring.fir (+2-2)
- (modified) flang/test/Fir/tbaa-codegen.fir (+6-6)
- (modified) flang/test/Fir/tbaa-codegen2.fir (+6-6)
- (modified) flang/test/Fir/tbaa.fir (+69-69)
- (modified) flang/test/Lower/OpenMP/FIR/flush.f90 (+3-3)
- (modified) flang/test/Transforms/tbaa.fir (+26-26)
- (modified) flang/test/Transforms/tbaa2.fir (+28-28)
- (modified) mlir/examples/toy/Ch6/CMakeLists.txt (+1)
- (modified) mlir/examples/toy/Ch6/toyc.cpp (+3)
- (modified) mlir/examples/toy/Ch7/CMakeLists.txt (+1)
- (modified) mlir/examples/toy/Ch7/toyc.cpp (+3)
- (modified) mlir/include/mlir/Dialect/CMakeLists.txt (+1)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMAttrDefs.td (+50-250)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMAttrs.h (+12-14)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.h (+9)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMDialect.td (+3)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMEnums.td (-65)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.h (+5-9)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMInterfaces.td (+1-126)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMIntrinsicOps.td (+2-1)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMOps.td (+4-273)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.h (+29-10)
- (modified) mlir/include/mlir/Dialect/LLVMIR/LLVMTypes.td (+8-33)
- (added) mlir/include/mlir/Dialect/Ptr/CMakeLists.txt (+1)
- (added) mlir/include/mlir/Dialect/Ptr/IR/CMakeLists.txt (+24)
- (added) mlir/include/mlir/Dialect/Ptr/IR/MemoryModel.h (+161)
- (added) mlir/include/mlir/Dialect/Ptr/IR/MemorySpaceInterfaces.td (+182)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrAttrs.h (+41)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrAttrs.td (+292)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrDialect.h (+20)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrDialect.td (+89)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrEnums.td (+69)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrInterfaces.h (+34)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrInterfaces.td (+152)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrOps.h (+28)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrOps.td (+411)
- (added) mlir/include/mlir/Dialect/Ptr/IR/PtrTypes.h (+39)
- (added) mlir/include/mlir/IR/AsmInterfaces.h (+19)
- (added) mlir/include/mlir/IR/AsmInterfaces.td (+60)
- (modified) mlir/include/mlir/IR/CMakeLists.txt (+7)
- (modified) mlir/include/mlir/IR/OpImplementation.h (+27-1)
- (modified) mlir/include/mlir/InitAllDialects.h (+2)
- (modified) mlir/include/mlir/Interfaces/MemorySlotInterfaces.td (+21)
- (modified) mlir/include/mlir/Target/LLVMIR/Dialect/All.h (+5)
- (added) mlir/include/mlir/Target/LLVMIR/Dialect/Ptr/LLVMIRToPtrTranslation.h (+31)
- (added) mlir/include/mlir/Target/LLVMIR/Dialect/Ptr/PtrToLLVMIRTranslation.h (+31)
- (modified) mlir/include/mlir/Target/LLVMIR/LLVMImportInterface.h (+53)
- (modified) mlir/include/mlir/Target/LLVMIR/ModuleImport.h (+15-6)
- (modified) mlir/include/mlir/Target/LLVMIR/ModuleTranslation.h (+6-3)
- (modified) mlir/lib/AsmParser/DialectSymbolParser.cpp (+12)
- (modified) mlir/lib/Conversion/AsyncToLLVM/AsyncToLLVM.cpp (+1)
- (modified) mlir/lib/Conversion/ConvertToLLVM/ConvertToLLVMPass.cpp (+1)
- (modified) mlir/lib/Conversion/GPUCommon/GPUToLLVMConversion.cpp (+1)
- (modified) mlir/lib/Conversion/LLVMCommon/ConversionTarget.cpp (+1)
- (modified) mlir/lib/Conversion/MemRefToLLVM/MemRefToLLVM.cpp (+6-5)
- (modified) mlir/lib/Conversion/NVGPUToNVVM/NVGPUToNVVM.cpp (+1)
- (modified) mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp (+1-1)
- (modified) mlir/lib/Conversion/SPIRVToLLVM/ConvertLaunchFuncToLLVMCalls.cpp (+1)
- (modified) mlir/lib/Conversion/SPIRVToLLVM/SPIRVToLLVMPass.cpp (+1)
- (modified) mlir/lib/Dialect/CMakeLists.txt (+1)
- (modified) mlir/lib/Dialect/LLVMIR/CMakeLists.txt (+1)
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMAttrs.cpp (+153-8)
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMDialect.cpp (+50-215)
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMInlining.cpp (+7-6)
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMInterfaces.cpp (-52)
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMMemorySlot.cpp (+12-195)
- (modified) mlir/lib/Dialect/LLVMIR/IR/LLVMTypes.cpp (+29-149)
- (modified) mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp (+2-3)
- (modified) mlir/lib/Dialect/OpenMP/IR/OpenMPDialect.cpp (+2-3)
- (added) mlir/lib/Dialect/Ptr/CMakeLists.txt (+1)
- (added) mlir/lib/Dialect/Ptr/IR/CMakeLists.txt (+18)
- (added) mlir/lib/Dialect/Ptr/IR/PtrDialect.cpp (+524)
- (added) mlir/lib/Dialect/Ptr/IR/PtrMemorySlot.cpp (+233)
- (added) mlir/lib/Dialect/Ptr/IR/PtrTypes.cpp (+198)
- (modified) mlir/lib/Dialect/SparseTensor/Transforms/SparseTensorPasses.cpp (+4-3)
- (modified) mlir/lib/ExecutionEngine/CMakeLists.txt (+2)
- (added) mlir/lib/IR/AsmInterfaces.cpp (+19)
- (modified) mlir/lib/IR/AsmPrinter.cpp (+108-15)
- (modified) mlir/lib/IR/CMakeLists.txt (+2)
- (modified) mlir/lib/Target/LLVMIR/CMakeLists.txt (+4)
- (modified) mlir/lib/Target/LLVMIR/Dialect/CMakeLists.txt (+1)
- (modified) mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMIRToLLVMTranslation.cpp (+21)
- (modified) mlir/lib/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.cpp (+21)
- (added) mlir/lib/Target/LLVMIR/Dialect/Ptr/CMakeLists.txt (+31)
- (added) mlir/lib/Target/LLVMIR/Dialect/Ptr/LLVMIRToPtrTranslation.cpp (+312)
- (added) mlir/lib/Target/LLVMIR/Dialect/Ptr/PtrToLLVMIRTranslation.cpp (+379)
- (modified) mlir/lib/Target/LLVMIR/ModuleImport.cpp (+30-5)
- (modified) mlir/lib/Target/LLVMIR/TypeToLLVM.cpp (+7-1)
- (modified) mlir/lib/Transforms/Mem2Reg.cpp (+13-1)
- (modified) mlir/test/Conversion/AMDGPUToROCDL/amdgpu-to-rocdl.mlir (+2-2)
- (modified) mlir/test/Conversion/AsyncToLLVM/convert-runtime-to-llvm.mlir (+3-3)
- (modified) mlir/test/Conversion/AsyncToLLVM/convert-to-llvm.mlir (+3-3)
- (modified) mlir/test/Conversion/FuncToLLVM/calling-convention.mlir (+6-6)
- (modified) mlir/test/Conversion/GPUCommon/lower-alloc-to-gpu-runtime-calls.mlir (+2-2)
- (modified) mlir/test/Conversion/GPUCommon/lower-memcpy-to-gpu-runtime-calls.mlir (+3-3)
- (modified) mlir/test/Conversion/GPUCommon/lower-memory-space-attrs.mlir (+7-7)
- (modified) mlir/test/Conversion/GPUCommon/lower-memset-to-gpu-runtime-calls.mlir (+1-1)
- (modified) mlir/test/Conversion/GPUCommon/memory-attrbution.mlir (+4-4)
- (modified) mlir/test/Conversion/GPUCommon/transfer_write.mlir (+1-1)
- (modified) mlir/test/Conversion/GPUToNVVM/gpu-to-nvvm.mlir (+3-3)
- (modified) mlir/test/Conversion/GPUToVulkan/invoke-vulkan.mlir (+2-2)
- (modified) mlir/test/Conversion/MemRefToLLVM/convert-dynamic-memref-ops.mlir (+30-30)
- (modified) mlir/test/Conversion/MemRefToLLVM/convert-static-memref-ops.mlir (+19-19)
- (modified) mlir/test/Conversion/MemRefToLLVM/expand-then-convert-to-llvm.mlir (+2-2)
- (modified) mlir/test/Conversion/MemRefToLLVM/memref-to-llvm.mlir (+32-36)
- (modified) mlir/test/Conversion/NVGPUToNVVM/nvgpu-to-nvvm.mlir (+6-6)
- (modified) mlir/test/Conversion/OpenMPToLLVM/convert-to-llvmir.mlir (+18-18)
- (modified) mlir/test/Conversion/SCFToOpenMP/reductions.mlir (+18-18)
- (modified) mlir/test/Conversion/SPIRVToLLVM/memory-ops-to-llvm.mlir (+12-12)
- (modified) mlir/test/Conversion/VectorToLLVM/vector-scalable-memcpy.mlir (+2-2)
- (modified) mlir/test/Conversion/VectorToLLVM/vector-to-llvm.mlir (+7-7)
- (modified) mlir/test/Dialect/LLVMIR/canonicalize.mlir (+10-10)
- (modified) mlir/test/Dialect/LLVMIR/inlining-alias-scopes.mlir (+106-106)
- (modified) mlir/test/Dialect/LLVMIR/inlining.mlir (+29-29)
- (modified) mlir/test/Dialect/LLVMIR/invalid.mlir (+39-39)
- (modified) mlir/test/Dialect/LLVMIR/loop-metadata.mlir (+8-8)
- (modified) mlir/test/Dialect/LLVMIR/mem2reg-dbginfo.mlir (+8-8)
- (modified) mlir/test/Dialect/LLVMIR/mem2reg-intrinsics.mlir (+21-21)
- (modified) mlir/test/Dialect/LLVMIR/mem2reg.mlir (+86-86)
- (modified) mlir/test/Dialect/LLVMIR/opaque-ptr.mlir (+6-6)
- (modified) mlir/test/Dialect/LLVMIR/rocdl.mlir (+1-1)
- (modified) mlir/test/Dialect/LLVMIR/roundtrip.mlir (+30-30)
- (modified) mlir/test/Dialect/LLVMIR/sroa-intrinsics.mlir (+22-22)
- (modified) mlir/test/Dialect/LLVMIR/sroa-statistics.mlir (+5-5)
- (modified) mlir/test/Dialect/LLVMIR/sroa.mlir (+41-41)
- (modified) mlir/test/Dialect/LLVMIR/tbaa-invalid.mlir (+16-16)
- (modified) mlir/test/Dialect/LLVMIR/tbaa-roundtrip.mlir (+42-42)
- (modified) mlir/test/Dialect/LLVMIR/type-consistency.mlir (+82-82)
- (modified) mlir/test/Dialect/MemRef/transform-ops.mlir (+1-1)
- (modified) mlir/test/Dialect/OpenACC/invalid.mlir (+5-5)
- (modified) mlir/test/Dialect/OpenACC/ops.mlir (+2-2)
- (modified) mlir/test/Dialect/OpenMP/canonicalize.mlir (+1-1)
- (modified) mlir/test/Dialect/OpenMP/invalid.mlir (+4-4)
- (modified) mlir/test/Dialect/OpenMP/ops.mlir (+29-29)
- (modified) mlir/test/Integration/GPU/CUDA/sm90/asd (+18-18)
- (modified) mlir/test/Target/LLVMIR/Import/basic.ll (+3-3)
- (modified) mlir/test/Target/LLVMIR/Import/constant.ll (+8-8)
- (modified) mlir/test/Target/LLVMIR/Import/instructions.ll (+37-37)
- (modified) mlir/test/Target/LLVMIR/Import/metadata-alias-scopes.ll (+18-18)
- (modified) mlir/test/Target/LLVMIR/Import/metadata-loop.ll (+12-12)
- (modified) mlir/test/Target/LLVMIR/Import/metadata-tbaa.ll (+24-24)
- (modified) mlir/test/Target/LLVMIR/Import/target-ext-type.ll (+1-1)
- (modified) mlir/test/Target/LLVMIR/arm-sve.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/attribute-alias-scopes.mlir (+12-12)
- (modified) mlir/test/Target/LLVMIR/attribute-tbaa.mlir (+22-22)
- (modified) mlir/test/Target/LLVMIR/llvmir.mlir (+46-50)
- (modified) mlir/test/Target/LLVMIR/loop-metadata.mlir (+6-6)
- (modified) mlir/test/Target/LLVMIR/omptarget-array-sectioning-host.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/omptarget-byref-bycopy-generation-device.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/omptarget-byref-bycopy-generation-host.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/omptarget-constant-alloca-raise.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/omptarget-constant-indexing-device-region.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-device.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/omptarget-declare-target-llvm-host.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/omptarget-fortran-allocatable-types-host.mlir (+6-6)
- (modified) mlir/test/Target/LLVMIR/omptarget-llvm.mlir (+22-22)
- (modified) mlir/test/Target/LLVMIR/omptarget-parallel-llvm.mlir (+4-4)
- (modified) mlir/test/Target/LLVMIR/omptarget-parallel-wsloop.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/omptarget-region-device-llvm.mlir (+5-5)
- (modified) mlir/test/Target/LLVMIR/omptarget-region-llvm.mlir (+5-5)
- (modified) mlir/test/Target/LLVMIR/omptarget-region-parallel-llvm.mlir (+5-5)
- (modified) mlir/test/Target/LLVMIR/omptarget-wsloop-collapsed.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/omptarget-wsloop.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/opaque-ptr.mlir (+3-3)
- (modified) mlir/test/Target/LLVMIR/openacc-llvm.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/openmp-firstprivate.mlir (+6-6)
- (modified) mlir/test/Target/LLVMIR/openmp-llvm-invalid.mlir (+3-3)
- (modified) mlir/test/Target/LLVMIR/openmp-llvm.mlir (+55-55)
- (modified) mlir/test/Target/LLVMIR/openmp-nested.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/openmp-private.mlir (+10-10)
- (modified) mlir/test/Target/LLVMIR/openmp-reduction-byref.mlir (+5-5)
- (modified) mlir/test/Target/LLVMIR/openmp-reduction-call.mlir (+2-2)
- (modified) mlir/test/Target/LLVMIR/openmp-reduction.mlir (+34-34)
- (modified) mlir/test/Target/LLVMIR/openmp-teams.mlir (+1-1)
- (modified) mlir/test/Target/LLVMIR/target-ext-type.mlir (+1-1)
- (modified) mlir/test/lib/Dialect/Test/TestDialectInterfaces.cpp (+72)
- (modified) mlir/test/mlir-cpu-runner/simple.mlir (+2-2)
- (modified) mlir/test/mlir-cpu-runner/x86-varargs.mlir (+6-6)
- (modified) mlir/unittests/ExecutionEngine/Invoke.cpp (+7)
``````````diff
diff --git a/flang/lib/Optimizer/CodeGen/CMakeLists.txt b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
index 879bc28d017a35..623dd8e88e9a36 100644
--- a/flang/lib/Optimizer/CodeGen/CMakeLists.txt
+++ b/flang/lib/Optimizer/CodeGen/CMakeLists.txt
@@ -21,6 +21,7 @@ add_flang_library(FIRCodeGen
FIRDialect
FIRDialectSupport
FIRSupport
+ MLIRPtrDialect
MLIRComplexToLLVM
MLIRComplexToStandard
MLIRMathToFuncs
diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
index 06ce84f1543a3f..fbfe812811c560 100644
--- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp
+++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp
@@ -44,6 +44,7 @@
#include "mlir/Dialect/LLVMIR/Transforms/AddComdats.h"
#include "mlir/Dialect/OpenACC/OpenACC.h"
#include "mlir/Dialect/OpenMP/OpenMPDialect.h"
+#include "mlir/Dialect/Ptr/IR/PtrDialect.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Matchers.h"
#include "mlir/Pass/Pass.h"
@@ -3615,6 +3616,7 @@ class FIRToLLVMLowering
fir::populateOpenMPFIRToLLVMConversionPatterns(typeConverter, pattern);
mlir::ConversionTarget target{*context};
+ target.addLegalDialect<mlir::ptr::PtrDialect>();
target.addLegalDialect<mlir::LLVM::LLVMDialect>();
// The OpenMP dialect is legal for Operations without regions, for those
// which contains regions it is legal if the region contains only the
diff --git a/flang/lib/Optimizer/Support/CMakeLists.txt b/flang/lib/Optimizer/Support/CMakeLists.txt
index 55f5718a90b854..b98f0988a3d20c 100644
--- a/flang/lib/Optimizer/Support/CMakeLists.txt
+++ b/flang/lib/Optimizer/Support/CMakeLists.txt
@@ -20,6 +20,7 @@ add_flang_library(FIRSupport
MLIROpenACCToLLVMIRTranslation
MLIROpenMPToLLVMIRTranslation
MLIRLLVMToLLVMIRTranslation
+ MLIRPtrToLLVMIRTranslation
MLIRTargetLLVMIRExport
MLIRTargetLLVMIRImport
diff --git a/flang/lib/Optimizer/Support/InitFIR.cpp b/flang/lib/Optimizer/Support/InitFIR.cpp
index 0753c4511d9c64..c9ef8b35bf0307 100644
--- a/flang/lib/Optimizer/Support/InitFIR.cpp
+++ b/flang/lib/Optimizer/Support/InitFIR.cpp
@@ -11,6 +11,7 @@
#include "mlir/Target/LLVMIR/Dialect/LLVMIR/LLVMToLLVMIRTranslation.h"
#include "mlir/Target/LLVMIR/Dialect/OpenACC/OpenACCToLLVMIRTranslation.h"
#include "mlir/Target/LLVMIR/Dialect/OpenMP/OpenMPToLLVMIRTranslation.h"
+#include "mlir/Target/LLVMIR/Dialect/Ptr/PtrToLLVMIRTranslation.h"
void fir::support::registerLLVMTranslation(mlir::MLIRContext &context) {
mlir::DialectRegistry registry;
@@ -22,5 +23,7 @@ void fir::support::registerLLVMTranslation(mlir::MLIRContext &context) {
registerLLVMDialectTranslation(registry);
// Register builtin dialect interface.
registerBuiltinDialectTranslation(registry);
+ // Register ptr dialect interface.
+ registerPtrDialectTranslation(registry);
context.appendDialectRegistry(registry);
}
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 92628af37085a5..62292bd2b63c3e 100644
--- a/flang/test/Fir/convert-to-llvm-openmp-and-fir.fir
+++ b/flang/test/Fir/convert-to-llvm-openmp-and-fir.fir
@@ -29,15 +29,15 @@ func.func @_QPsb1(%arg0: !fir.ref<i32> {fir.bindc_name = "n"}, %arg1: !fir.ref<!
// CHECK: omp.parallel {
// CHECK: %[[ONE_3:.*]] = llvm.mlir.constant(1 : i64) : i64
// CHECK: %[[I_VAR:.*]] = llvm.alloca %[[ONE_3]] x i32 {pinned} : (i64) -> !llvm.ptr
-// CHECK: %[[N:.*]] = llvm.load %[[N_REF]] : !llvm.ptr -> i32
+// CHECK: %[[N:.*]] = ptr.load %[[N_REF]] : !llvm.ptr -> i32
// CHECK: omp.wsloop nowait
// CHECK-SAME: for (%[[I:.*]]) : i32 = (%[[ONE_2]]) to (%[[N]]) inclusive step (%[[ONE_2]]) {
-// CHECK: llvm.store %[[I]], %[[I_VAR]] : i32, !llvm.ptr
-// CHECK: %[[I1:.*]] = llvm.load %[[I_VAR]] : !llvm.ptr -> i32
+// CHECK: ptr.store %[[I]], %[[I_VAR]] : i32, !llvm.ptr
+// CHECK: %[[I1:.*]] = ptr.load %[[I_VAR]] : !llvm.ptr -> i32
// CHECK: %[[I1_EXT:.*]] = llvm.sext %[[I1]] : i32 to i64
// CHECK: %[[I_CSTYLE:.*]] = llvm.sub %[[I1_EXT]], %[[ONE_1]] : i64
// CHECK: %[[ARR_I_REF:.*]] = llvm.getelementptr %[[ARR_REF]][%[[I_CSTYLE]]] : (!llvm.ptr, i64) -> !llvm.ptr
-// CHECK: llvm.store %[[I1]], %[[ARR_I_REF]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[I1]], %[[ARR_I_REF]] : i32, !llvm.ptr
// CHECK: omp.yield
// CHECK: }
// CHECK: omp.terminator
@@ -63,8 +63,8 @@ func.func @_QPsb2(%arg0: !fir.ref<i32> {fir.bindc_name = "x"}, %arg1: !fir.ref<i
// CHECK-SAME: %[[X_REF:.*]]: !llvm.ptr {fir.bindc_name = "x"}, %[[N_REF:.*]]: !llvm.ptr {fir.bindc_name = "n"}) {
// CHECK: omp.parallel {
// CHECK: omp.master {
-// CHECK: %[[N:.*]] = llvm.load %[[N_REF]] : !llvm.ptr -> i32
-// CHECK: llvm.store %[[N]], %[[X_REF]] : i32, !llvm.ptr
+// CHECK: %[[N:.*]] = ptr.load %[[N_REF]] : !llvm.ptr -> i32
+// CHECK: ptr.store %[[N]], %[[X_REF]] : i32, !llvm.ptr
// CHECK: omp.terminator
// CHECK: }
// CHECK: omp.terminator
@@ -99,7 +99,7 @@ func.func @_QPsb(%arr: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "arr"}) {
// CHECK: %[[C1:.*]] = llvm.mlir.constant(1 : i32) : i32
// CHECK: %[[C50:.*]] = llvm.mlir.constant(50 : i32) : i32
// CHECK: omp.wsloop for (%[[INDX:.*]]) : i32 = (%[[C1]]) to (%[[C50]]) inclusive step (%[[C1]]) {
-// CHECK: llvm.store %[[INDX]], %{{.*}} : i32, !llvm.ptr
+// CHECK: ptr.store %[[INDX]], %{{.*}} : i32, !llvm.ptr
// CHECK: omp.yield
// CHECK: omp.terminator
// CHECK: llvm.return
@@ -201,15 +201,15 @@ func.func @_QPsimd1(%arg0: !fir.ref<i32> {fir.bindc_name = "n"}, %arg1: !fir.ref
// CHECK: omp.parallel {
// CHECK: %[[ONE_3:.*]] = llvm.mlir.constant(1 : i64) : i64
// CHECK: %[[I_VAR:.*]] = llvm.alloca %[[ONE_3]] x i32 {pinned} : (i64) -> !llvm.ptr
-// CHECK: %[[N:.*]] = llvm.load %[[N_REF]] : !llvm.ptr -> i32
+// CHECK: %[[N:.*]] = ptr.load %[[N_REF]] : !llvm.ptr -> i32
// CHECK: omp.simdloop
// CHECK-SAME: (%[[I:.*]]) : i32 = (%[[ONE_2]]) to (%[[N]]) step (%[[ONE_2]]) {
-// CHECK: llvm.store %[[I]], %[[I_VAR]] : i32, !llvm.ptr
-// CHECK: %[[I1:.*]] = llvm.load %[[I_VAR]] : !llvm.ptr -> i32
+// CHECK: ptr.store %[[I]], %[[I_VAR]] : i32, !llvm.ptr
+// CHECK: %[[I1:.*]] = ptr.load %[[I_VAR]] : !llvm.ptr -> i32
// CHECK: %[[I1_EXT:.*]] = llvm.sext %[[I1]] : i32 to i64
// CHECK: %[[I_CSTYLE:.*]] = llvm.sub %[[I1_EXT]], %[[ONE_1]] : i64
// CHECK: %[[ARR_I_REF:.*]] = llvm.getelementptr %[[ARR_REF]][%[[I_CSTYLE]]] : (!llvm.ptr, i64) -> !llvm.ptr
-// CHECK: llvm.store %[[I1]], %[[ARR_I_REF]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[I1]], %[[ARR_I_REF]] : i32, !llvm.ptr
// CHECK: omp.yield
// CHECK: }
// CHECK: omp.terminator
@@ -386,24 +386,24 @@ func.func @_QPopenmp_target_data_region() {
// CHECK: %[[VAL_16:.*]] = llvm.icmp "sgt" %[[VAL_14]], %[[VAL_15]] : i64
// CHECK: llvm.cond_br %[[VAL_16]], ^bb2, ^bb3
// CHECK: ^bb2:
-// CHECK: llvm.store %[[VAL_13]], %[[VAL_3]] : i32, !llvm.ptr
-// CHECK: %[[VAL_17:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr -> i32
-// CHECK: %[[VAL_18:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr -> i32
+// CHECK: ptr.store %[[VAL_13]], %[[VAL_3]] : i32, !llvm.ptr
+// CHECK: %[[VAL_17:.*]] = ptr.load %[[VAL_3]] : !llvm.ptr -> i32
+// CHECK: %[[VAL_18:.*]] = ptr.load %[[VAL_3]] : !llvm.ptr -> i32
// CHECK: %[[VAL_19:.*]] = llvm.sext %[[VAL_18]] : i32 to i64
// CHECK: %[[VAL_20:.*]] = llvm.mlir.constant(1 : i64) : i64
// CHECK: %[[VAL_21:.*]] = llvm.sub %[[VAL_19]], %[[VAL_20]] : i64
// CHECK: %[[VAL_22:.*]] = llvm.getelementptr %[[VAL_1]][0, %[[VAL_21]]] : (!llvm.ptr, i64) -> !llvm.ptr
-// CHECK: llvm.store %[[VAL_17]], %[[VAL_22]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[VAL_17]], %[[VAL_22]] : i32, !llvm.ptr
// CHECK: %[[VAL_23:.*]] = llvm.add %[[VAL_12]], %[[VAL_8]] : i64
// CHECK: %[[VAL_24:.*]] = llvm.trunc %[[VAL_8]] : i64 to i32
-// CHECK: %[[VAL_25:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr -> i32
+// CHECK: %[[VAL_25:.*]] = ptr.load %[[VAL_3]] : !llvm.ptr -> i32
// CHECK: %[[VAL_26:.*]] = llvm.add %[[VAL_25]], %[[VAL_24]] : i32
// CHECK: %[[VAL_27:.*]] = llvm.add %[[VAL_12]], %[[VAL_8]] : i64
// CHECK: %[[VAL_28:.*]] = llvm.mlir.constant(1 : index) : i64
// CHECK: %[[VAL_29:.*]] = llvm.sub %[[VAL_14]], %[[VAL_28]] : i64
// CHECK: llvm.br ^bb1(%[[VAL_27]], %[[VAL_26]], %[[VAL_29]] : i64, i32, i64)
// CHECK: ^bb3:
-// CHECK: llvm.store %[[VAL_13]], %[[VAL_3]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[VAL_13]], %[[VAL_3]] : i32, !llvm.ptr
// CHECK: omp.terminator
// CHECK: }
// CHECK: llvm.return
@@ -463,7 +463,7 @@ func.func @_QPomp_target() {
// CHECK: %[[VAL_5:.*]] = llvm.mlir.constant(1 : i64) : i64
// CHECK: %[[VAL_6:.*]] = llvm.mlir.constant(0 : i64) : i64
// CHECK: %[[VAL_7:.*]] = llvm.getelementptr %[[ARG_0]][0, %[[VAL_6]]] : (!llvm.ptr, i64) -> !llvm.ptr
-// CHECK: llvm.store %[[VAL_3]], %[[VAL_7]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[VAL_3]], %[[VAL_7]] : i32, !llvm.ptr
// CHECK: omp.terminator
// CHECK: }
// CHECK: llvm.return
@@ -669,9 +669,9 @@ func.func @_QPsb() {
// CHECK: %[[EXIT_COND:.*]] = llvm.icmp "sgt"
// CHECK: llvm.cond_br %[[EXIT_COND]], ^[[BB_LOOP_BODY:.*]], ^[[BB_EXIT:.*]]
// CHECK: ^[[BB_LOOP_BODY]]:
-// CHECK: %[[LI_VAL:.*]] = llvm.load %[[LI_REF]] : !llvm.ptr -> i32
+// CHECK: %[[LI_VAL:.*]] = ptr.load %[[LI_REF]] : !llvm.ptr -> i32
// CHECK: %[[LI_INC:.*]] = llvm.add %[[LI_VAL]], %[[ONE]] : i32
-// CHECK: llvm.store %[[LI_INC]], %[[LI_REF]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[LI_INC]], %[[LI_REF]] : i32, !llvm.ptr
// CHECK: llvm.br ^[[BB_ENTRY]]({{.*}})
// CHECK: ^[[BB_EXIT]]:
// CHECK: omp.terminator
@@ -703,15 +703,15 @@ func.func @_QPsb() {
// CHECK: omp.parallel {
// CHECK: omp.wsloop reduction(@[[EQV_REDUCTION]] %[[RED_ACCUMULATOR]] -> %[[PRV:.+]] : !llvm.ptr) for
// CHECK: %[[ARRAY_ELEM_REF:.*]] = llvm.getelementptr %[[ARRAY_REF]][0, %{{.*}}] : (!llvm.ptr, i64) -> !llvm.ptr
-// CHECK: %[[ARRAY_ELEM:.*]] = llvm.load %[[ARRAY_ELEM_REF]] : !llvm.ptr -> i32
-// CHECK: %[[LPRV:.+]] = llvm.load %[[PRV]] : !llvm.ptr -> i32
+// CHECK: %[[ARRAY_ELEM:.*]] = ptr.load %[[ARRAY_ELEM_REF]] : !llvm.ptr -> i32
+// CHECK: %[[LPRV:.+]] = ptr.load %[[PRV]] : !llvm.ptr -> i32
// CHECK: %[[ZERO_1:.*]] = llvm.mlir.constant(0 : i64) : i32
// CHECK: %[[ARGVAL_1:.*]] = llvm.icmp "ne" %[[LPRV]], %[[ZERO_1]] : i32
// CHECK: %[[ZERO_2:.*]] = llvm.mlir.constant(0 : i64) : i32
// CHECK: %[[ARGVAL_2:.*]] = llvm.icmp "ne" %[[ARRAY_ELEM]], %[[ZERO_2]] : i32
// CHECK: %[[RES:.*]] = llvm.icmp "eq" %[[ARGVAL_2]], %[[ARGVAL_1]] : i1
// CHECK: %[[RES_EXT:.*]] = llvm.zext %[[RES]] : i1 to i32
-// CHECK: llvm.store %[[RES_EXT]], %[[PRV]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[RES_EXT]], %[[PRV]] : i32, !llvm.ptr
// CHECK: omp.yield
// CHECK: omp.terminator
// CHECK: llvm.return
@@ -781,10 +781,10 @@ func.func @_QPs(%arg0: !fir.ref<!fir.complex<4>> {fir.bindc_name = "x"}) {
//CHECK: omp.parallel {
//CHECK: %[[CONST_1:.*]] = llvm.mlir.constant(1 : i32) : i32
//CHECK: %[[ALLOCA_1:.*]] = llvm.alloca %[[CONST_1:.*]] x !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)> {alignment = 8 : i64} : (i32) -> !llvm.ptr
-//CHECK: %[[LOAD:.*]] = llvm.load %[[ALLOCA]] : !llvm.ptr -> !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>
-//CHECK: llvm.store %[[LOAD]], %[[ALLOCA_1]] : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>, !llvm.ptr
+//CHECK: %[[LOAD:.*]] = ptr.load %[[ALLOCA]] : !llvm.ptr -> !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>
+//CHECK: ptr.store %[[LOAD]], %[[ALLOCA_1]] : !llvm.struct<(ptr, i64, i32, i8, i8, i8, i8)>, !llvm.ptr
//CHECK: %[[GEP:.*]] = llvm.getelementptr %[[ALLOCA_1]][0, 0] : (!llvm.ptr) -> !llvm.ptr
-//CHECK: %[[LOAD_2:.*]] = llvm.load %[[GEP]] : !llvm.ptr -> !llvm.ptr
+//CHECK: %[[LOAD_2:.*]] = ptr.load %[[GEP]] : !llvm.ptr -> !llvm.ptr
//CHECK: omp.terminator
//CHECK: }
@@ -864,13 +864,13 @@ func.func @sub_() {
omp.flush(%arg0, %arg1, %arg2 : !fir.ref<i32>, !fir.ref<i32>, !fir.ref<i32>)
// CHECK: omp.flush
omp.flush
-// CHECK: %[[A_VAL:.*]] = llvm.load %[[ARG_A]] : !llvm.ptr -> i32
+// CHECK: %[[A_VAL:.*]] = ptr.load %[[ARG_A]] : !llvm.ptr -> i32
%0 = fir.load %arg0 : !fir.ref<i32>
-// CHECK: %[[B_VAL:.*]] = llvm.load %[[ARG_B]] : !llvm.ptr -> i32
+// CHECK: %[[B_VAL:.*]] = ptr.load %[[ARG_B]] : !llvm.ptr -> i32
%1 = fir.load %arg1 : !fir.ref<i32>
// CHECK: %[[C_VAL:.*]] = llvm.add %[[A_VAL]], %[[B_VAL]] : i32
%2 = arith.addi %0, %1 : i32
-// CHECK: llvm.store %[[C_VAL]], %[[ARG_C]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[C_VAL]], %[[ARG_C]] : i32, !llvm.ptr
fir.store %2 to %arg2 : !fir.ref<i32>
// CHECK: omp.terminator
omp.terminator
@@ -892,13 +892,13 @@ func.func @omp_critical_() {
%1 = fir.alloca i32 {bindc_name = "y", uniq_name = "_QFomp_criticalEy"}
// CHECK: omp.critical(@help)
omp.critical(@help) {
-// CHECK: %[[X_VAL:.*]] = llvm.load %[[X_REF]] : !llvm.ptr -> i32
+// CHECK: %[[X_VAL:.*]] = ptr.load %[[X_REF]] : !llvm.ptr -> i32
%2 = fir.load %0 : !fir.ref<i32>
-// CHECK: %[[Y_VAL:.*]] = llvm.load %[[Y_REF]] : !llvm.ptr -> i32
+// CHECK: %[[Y_VAL:.*]] = ptr.load %[[Y_REF]] : !llvm.ptr -> i32
%3 = fir.load %1 : !fir.ref<i32>
// CHECK: %[[RESULT:.*]] = llvm.add %[[X_VAL]], %[[Y_VAL]] : i32
%4 = arith.addi %2, %3 : i32
-// CHECK: llvm.store %[[RESULT]], %[[X_REF]] : i32, !llvm.ptr
+// CHECK: ptr.store %[[RESULT]], %[[X_REF]] : i32, !llvm.ptr
fir.store %4 to %0 : !fir.ref<i32>
// CHECK: omp.terminator
omp.terminator
diff --git a/flang/test/Fir/convert-to-llvm.fir b/flang/test/Fir/convert-to-llvm.fir
index 21323a5e657c94..93fcb7315a437d 100644
--- a/flang/test/Fir/convert-to-llvm.fir
+++ b/flang/test/Fir/convert-to-llvm.fir
@@ -218,7 +218,7 @@ func.func @test_alloc_and_freemem_one() {
// CHECK-LABEL: llvm.func @test_alloc_and_freemem_one() {
// CHECK-NEXT: %[[NULL:.*]] = llvm.mlir.zero : !llvm.ptr
// CHECK-NEXT: %[[GEP:.*]] = llvm.getelementptr %[[NULL]][1]
-// CHECK-NEXT: %[[N:.*]] = llvm.ptrtoint %[[GEP]] : !llvm.ptr to i64
+// CHECK-NEXT: %[[N:.*]] = ptr.ptrtoint %[[GEP]] : !llvm.ptr to i64
// CHECK-NEXT: llvm.call @malloc(%[[N]])
// CHECK: llvm.call @free(%{{.*}})
// CHECK-NEXT: llvm.return
@@ -237,7 +237,7 @@ func.func @test_alloc_and_freemem_several() {
// CHECK-LABEL: llvm.func @test_alloc_and_freemem_several() {
// CHECK: [[NULL:%.*]] = llvm.mlir.zero : !llvm.ptr
// CHECK: [[PTR:%.*]] = llvm.getelementptr [[NULL]][{{.*}}] : (!llvm.ptr) -> !llvm.ptr, !llvm.array<100 x f32>
-// CHECK: [[N:%.*]] = llvm.ptrtoint [[PTR]] : !llvm.ptr to i64
+// CHECK: [[N:%.*]] = ptr.ptrtoint [[PTR]] : !llvm.ptr to i64
// CHECK: [[MALLOC:%.*]] = llvm.call @malloc([[N]])
// CHECK: llvm.call @free([[MALLOC]])
// CHECK: llvm.return
@@ -253,7 +253,7 @@ func.func @test_with_shape(%ncols: index, %nrows: index) {
// CHECK-SAME: %[[NCOLS:.*]]: i64, %[[NROWS:.*]]: i64
// CHECK: %[[NULL:.*]] = llvm.mlir.zero : !llvm.ptr
// CHECK: %[[GEP:.*]] = llvm.getelementptr %[[NULL]][1]
-// CHECK: %[[FOUR:.*]] = llvm.ptrtoint %[[GEP]] : !llvm.ptr to i64
+// CHECK: %[[FOUR:.*]] = ptr.ptrtoint %[[GEP]] : !llvm.ptr to i64
// CHECK: %[[DIM1_SIZE:.*]] = llvm.mul %[[FOUR]], %[[NCOLS]] : i64
// CHECK: %[[TOTAL_SIZE:.*]] = llvm.mul %[[DIM1_SIZE]], %[[NROWS]] : i64
// CHECK: %[[MEM:.*]] = llvm.call @malloc(%[[TOTAL_SIZE]])
@@ -271,7 +271,7 @@ func.func @test_string_with_shape(%len: index, %nelems: index) {
// CHECK-SAME: %[[LEN:.*]]: i64, %[[NELEMS:.*]]: i64)
// CHECK: %[[NULL:.*]] = llvm.mlir.zero : !llvm.ptr
// CHECK: %[[GEP:.*]] = llvm.getelementptr %[[NULL]][1]
-// CHECK: %[[ONE:.*]] = llvm.ptrtoint %[[GEP]] : !llvm.ptr to i64
+// CHECK: %[[ONE:.*]] = ptr.ptrtoint %[[GEP]] : !llvm.ptr to i64
// CHECK: %[[LEN_SIZE:.*]] = llvm.mul %[[ONE]], %[[LEN]] : i64
// CHECK: %[[TOTAL_SIZE:.*]] = llvm.mul %[[LEN_SIZE]], %[[NELEMS]] : i64
// CHECK: %[[MEM:.*]] = llvm.call @malloc(%[[TOTAL_SIZE]])
@@ -749,7 +749,7 @@ func.func @convert_from_int(%arg0 : i32) {
// CHECK: %{{.*}} = llvm.trunc %[[ARG0]] : i32 to i16
// CHECK-NOT: %{{.*}} = llvm.trunc %[[ARG0]] : i32 to i32
// CHECK: %{{.*}} = llvm.sext %[[ARG0]] : i32 to i64
-// CHECK: %{{.*}} = llvm.inttoptr %{{.*}} : i64 to !llvm.ptr
+// CHECK: %{{.*}} = ptr.inttoptr %{{.*}} : i64 to !llvm.ptr
func.func @convert_from_i1(%arg0 : i1) {
@@ -774,7 +774,7 @@ func.func @convert_from_ref(%arg0 : !fir.ref<i32>) {
// CHECK-LABEL: convert_from_ref(
// CHECK-SAME: %[[ARG0:.*]]: !llvm.ptr
// CHECK-NOT: %{{.*}} = llvm.bitcast %[[ARG0]] : !llvm.ptr to !llvm.ptr
-// CHECK: %{{.*}} = llvm.ptrtoint %[[ARG0]] : !llvm.ptr to i32
+// CHECK: %{{.*}} = ptr.ptrtoint %[[ARG0]] : !llvm.ptr to i32
// -----
@@ -848,7 +848,7 @@ func.func @test_constc8() -> !fir.complex<8> {
// -----
-// Test `fir.store` --> `llvm.store` conversion
+// Test `fir.store` --> `ptr.store` conversion
func.func @test_store_index(%val_to_store : index, %addr : !fir.ref<index>) {
fir.store %val_to_store to %addr : !fir.ref<index>
@@ -857,7 +857,7 @@ func.func @test_store_index(%val_to_store : index, %addr : !fir.ref<index>) {
// CHECK-LABEL: llvm.func @test_store_index
// CHECK-SAME: (%[[arg0:.*]]: i64, %[[arg1:.*]]: !llvm.ptr) {
-// CHECK-NEXT: llvm.store %[[arg0]], %[[arg1]] : i64, !llvm.ptr
+// CHECK-NEXT: ptr.store %[[arg0]], %[[arg1]] : i64, !llvm.ptr
// CHECK-NEXT: llvm.return
// CHECK-NEXT: }
@@ -869,8 +869,8 @@ func.func @test_store_box(%array : !fir.ref<!fir.box<!fir.array<?x?xf32>>>, %box
// CHECK-LABEL: llvm.func @test_store_box
// CHECK-SAME: (%[[arg0:.*]]: !llvm.ptr,
// CHECK-SAME: %[[arg1:.*]]: !llvm.ptr) {
-// CHECK-NEXT: %[[box_to_store:.*]] = llvm.load %arg1 : !llvm.ptr -> !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, array<2 x array<3 x i{{.*}}>>)>
-// CHECK-NEXT: llvm.store %[[box_to_store]], %[[arg0]] : !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, array<2 x array<3 x i{{.*}}>>)>, !llvm.ptr
+// CHECK-NEXT: %[[box_to_store:.*]] = ptr.load %arg1 : !llvm.ptr -> !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, array<2 x array<3 x i{{.*}}>>)>
+// CHECK-NEXT: ptr.store %[[box_to_store]], %[[arg0]] : !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, array<2 x array<3 x i{{.*}}>>)>, !llvm.ptr
// CHECK-NEXT: llvm.return
// CHECK-NEXT: }
@@ -883,19 +883,19 @@ func.func @store_unlimited_polymorphic_box(%arg0 : !fir.class<none>, %arg1 : !fi
return
}
// CHECK-LABEL: llvm.func @store_unlimited_polymorphic_box(
-// CHECK: %[[VAL_8:.*]] = llvm.load %{{.*}} : !llvm.ptr -> !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, ptr, array<1 x i{{.*}}>)>
-// CHECK: llvm.store %[[VAL_8]], %{{.*}} : !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, ptr, array<1 x i{{.*}}>)>, !llvm.ptr
-// CHECK: %[[VAL_9:.*]] = llvm.load %{{.*}} : !llvm.ptr -> !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, array<1 x array<3 x i{{.*}}>>, ptr, array<1 x i{{.*}}>)>
-// CHECK: llvm.store %[[VAL_9]], %{{.*}} : !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, array<1 x array<3 x i{{.*}}>>, ptr, array<1 x i{{.*}}>)>, !llvm.ptr
-// CHECK: %[[VAL_10:.*]] = llvm.load %{{.*}} : !llvm.ptr -> !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, ptr, array<1 x i{{.*}}>)>
-// CHECK: llvm.store %[[VAL_10]], %{{.*}} : !llvm.struct<(ptr, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, i{{.*}}, ptr, array<1 x i{{.*}}>)>, !llvm.ptr
-// CHECK: %[[VAL_11:.*]] = ll...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/73057
More information about the flang-commits
mailing list