[flang-commits] [flang] [flang] Do not produce result for void runtime call (PR #123155)

via flang-commits flang-commits at lists.llvm.org
Wed Jan 15 20:43:24 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-flang-fir-hlfir

@llvm/pr-subscribers-flang-openmp

Author: Valentin Clement (バレンタイン クレメン) (clementval)

<details>
<summary>Changes</summary>

Runtime function call to a void function are producing a ssa value because the FunctionType result is set to NoneType with is later translated to a empty struct. This is not an issue when going to LLVM IR but it breaks when lowering a gpu module to PTX. This patch update the RTModel to correctly set the FunctionType result type to nothing.

---

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


159 Files Affected:

- (modified) flang/docs/OpenACC-descriptor-management.md (+1-1) 
- (modified) flang/docs/ParameterizedDerivedTypes.md (+9-9) 
- (modified) flang/docs/PolymorphicEntities.md (+1-1) 
- (modified) flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h (+3) 
- (modified) flang/include/flang/Optimizer/Dialect/FIRType.h (+1-1) 
- (modified) flang/lib/Lower/Runtime.cpp (+3-3) 
- (modified) flang/lib/Optimizer/Builder/Runtime/Inquiry.cpp (+3-3) 
- (modified) flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp (+1-2) 
- (modified) flang/lib/Optimizer/Builder/Runtime/Reduction.cpp (+1-1) 
- (modified) flang/lib/Optimizer/Builder/Runtime/Transformational.cpp (+8-16) 
- (modified) flang/test/Analysis/AliasAnalysis/ptr-component.fir (+1-1) 
- (modified) flang/test/Fir/CUDA/cuda-alloc-free.fir (+1-1) 
- (modified) flang/test/Fir/CUDA/cuda-allocate.fir (+3-3) 
- (modified) flang/test/Fir/CUDA/cuda-code-gen.mlir (+5-5) 
- (modified) flang/test/Fir/CUDA/cuda-constructor-2.f90 (+2-2) 
- (modified) flang/test/Fir/CUDA/cuda-data-transfer.fir (+25-25) 
- (modified) flang/test/Fir/CUDA/cuda-global-addr.mlir (+1-1) 
- (modified) flang/test/Fir/abstract-result-2.fir (+2-2) 
- (modified) flang/test/Fir/array-value-copy-3.fir (+3-3) 
- (modified) flang/test/Fir/array-value-copy-4.fir (+1-1) 
- (modified) flang/test/Fir/boxproc-openmp.fir (+4-4) 
- (modified) flang/test/Fir/polymorphic.fir (+3-3) 
- (modified) flang/test/Fir/rebox_assumed_rank_codegen.fir (+6-6) 
- (modified) flang/test/Fir/tbaa-codegen2.fir (+2-2) 
- (modified) flang/test/HLFIR/all-lowering.fir (+3-3) 
- (modified) flang/test/HLFIR/any-elemental.fir (+1-1) 
- (modified) flang/test/HLFIR/any-lowering.fir (+3-3) 
- (modified) flang/test/HLFIR/assign-codegen.fir (+15-15) 
- (modified) flang/test/HLFIR/assumed_shape_with_value_keyword.f90 (+1-1) 
- (modified) flang/test/HLFIR/boxchar_emboxing.f90 (+2-2) 
- (modified) flang/test/HLFIR/bufferize-destroy-for-derived.fir (+4-4) 
- (modified) flang/test/HLFIR/bufferize-end-associate-for-derived.fir (+2-2) 
- (modified) flang/test/HLFIR/bufferize-poly-expr.fir (+4-4) 
- (modified) flang/test/HLFIR/bufferize01.fir (+6-6) 
- (modified) flang/test/HLFIR/copy-in-out-codegen.fir (+5-5) 
- (modified) flang/test/HLFIR/count-lowering-default-int-kinds.fir (+4-4) 
- (modified) flang/test/HLFIR/count-lowering.fir (+3-3) 
- (modified) flang/test/HLFIR/cshift-lowering.fir (+7-7) 
- (modified) flang/test/HLFIR/elemental-codegen.fir (+9-9) 
- (modified) flang/test/HLFIR/matmul-lowering.fir (+3-3) 
- (modified) flang/test/HLFIR/maxloc-lowering.fir (+7-7) 
- (modified) flang/test/HLFIR/maxval-lowering.fir (+3-3) 
- (modified) flang/test/HLFIR/minloc-lowering.fir (+7-7) 
- (modified) flang/test/HLFIR/minval-lowering.fir (+3-3) 
- (modified) flang/test/HLFIR/optional_dummy.f90 (+1-1) 
- (modified) flang/test/HLFIR/order_assignments/lhs-conflicts-codegen.fir (+9-9) 
- (modified) flang/test/HLFIR/order_assignments/runtime-stack-temp.fir (+5-5) 
- (modified) flang/test/HLFIR/order_assignments/user-defined-assignment-finalization.fir (+9-9) 
- (modified) flang/test/HLFIR/product-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/sum-lowering.fir (+2-2) 
- (modified) flang/test/HLFIR/transpose-lowering.fir (+1-1) 
- (modified) flang/test/Integration/OpenMP/parallel-private-reduction-worstcase.f90 (+1-1) 
- (modified) flang/test/Integration/OpenMP/private-global.f90 (+1-1) 
- (modified) flang/test/Lower/CUDA/cuda-allocatable.cuf (+3-3) 
- (modified) flang/test/Lower/HLFIR/array-ctor-as-runtime-temp.f90 (+9-9) 
- (modified) flang/test/Lower/HLFIR/array-ctor-character.f90 (+3-3) 
- (modified) flang/test/Lower/HLFIR/array-ctor-derived.f90 (+6-6) 
- (modified) flang/test/Lower/HLFIR/assumed-rank-inquiries-3.f90 (+11-11) 
- (modified) flang/test/Lower/HLFIR/assumed-rank-inquiries.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/cray-pointers.f90 (+14-14) 
- (modified) flang/test/Lower/HLFIR/function-return-as-expr.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/ignore-rank-unlimited-polymorphic.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/intentout-allocatable-components.f90 (+2-2) 
- (modified) flang/test/Lower/HLFIR/internal-procedures-polymorphic.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/intrinsic-subroutines.f90 (+1-1) 
- (modified) flang/test/Lower/HLFIR/local-end-of-scope-component-dealloc.f90 (+10-10) 
- (modified) flang/test/Lower/HLFIR/structure-constructor.f90 (+21-21) 
- (modified) flang/test/Lower/Intrinsics/abort.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/adjustl.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/adjustr.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/all.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/any.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/bessel_jn.f90 (+8-8) 
- (modified) flang/test/Lower/Intrinsics/bessel_yn.f90 (+8-8) 
- (modified) flang/test/Lower/Intrinsics/count.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/date_and_time.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/dot_product.f90 (+5-5) 
- (modified) flang/test/Lower/Intrinsics/eoshift.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/etime-function.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/etime.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/execute_command_line-optional.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/execute_command_line.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/exit-2.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/exit.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/findloc.f90 (+11-11) 
- (modified) flang/test/Lower/Intrinsics/free.f90 (+5-5) 
- (modified) flang/test/Lower/Intrinsics/iall.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/iand.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/iany.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/index.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/iparity.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/matmul.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/maxloc.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/maxval.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/minloc.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/minval.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/norm2.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/pack.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/parity.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/product.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/random.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/random_number_real16.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/rename.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/repeat.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/reshape.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/scan.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/sleep.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/spread.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/storage_size.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/sum.f90 (+2-2) 
- (modified) flang/test/Lower/Intrinsics/system-optional.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/system.f90 (+3-3) 
- (modified) flang/test/Lower/Intrinsics/transfer.f90 (+4-4) 
- (modified) flang/test/Lower/Intrinsics/transpose.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/trim.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/ubound01.f90 (+1-1) 
- (modified) flang/test/Lower/Intrinsics/verify.f90 (+1-1) 
- (modified) flang/test/Lower/OpenACC/stop-stmt-in-region.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/delayed-privatization-default-init.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/parallel-reduction-pointer-array.f90 (+1-1) 
- (modified) flang/test/Lower/OpenMP/parallel-reduction3.f90 (+2-2) 
- (modified) flang/test/Lower/OpenMP/private-derived-type.f90 (+3-3) 
- (modified) flang/test/Lower/OpenMP/stop-stmt-in-region.f90 (+7-7) 
- (modified) flang/test/Lower/allocatable-assignment.f90 (+2-2) 
- (modified) flang/test/Lower/allocatable-polymorphic.f90 (+35-35) 
- (modified) flang/test/Lower/allocatable-runtime.f90 (+2-2) 
- (modified) flang/test/Lower/allocate-mold.f90 (+3-3) 
- (modified) flang/test/Lower/allocate-source-allocatables-2.f90 (+1-1) 
- (modified) flang/test/Lower/allocate-source-allocatables.f90 (+12-12) 
- (modified) flang/test/Lower/allocate-source-pointers.f90 (+12-12) 
- (modified) flang/test/Lower/array-derived-assignments.f90 (+1-1) 
- (modified) flang/test/Lower/basic-function.f90 (+1-1) 
- (modified) flang/test/Lower/call-by-value-attr.f90 (+1-1) 
- (modified) flang/test/Lower/call-copy-in-out.f90 (+4-4) 
- (modified) flang/test/Lower/default-initialization.f90 (+9-9) 
- (modified) flang/test/Lower/derived-assignments.f90 (+3-3) 
- (modified) flang/test/Lower/derived-type-finalization.f90 (+13-13) 
- (modified) flang/test/Lower/derived-type-temp.f90 (+1-1) 
- (modified) flang/test/Lower/do_concurrent_local_default_init.f90 (+1-1) 
- (modified) flang/test/Lower/fail_image.f90 (+2-2) 
- (modified) flang/test/Lower/forall/forall-allocatable-2.f90 (+1-1) 
- (modified) flang/test/Lower/forall/forall-where.f90 (+1-1) 
- (modified) flang/test/Lower/goto-statement.f90 (+5-5) 
- (modified) flang/test/Lower/nested-where.f90 (+2-2) 
- (modified) flang/test/Lower/nullify-polymorphic.f90 (+1-1) 
- (modified) flang/test/Lower/optional-value-caller.f90 (+2-2) 
- (modified) flang/test/Lower/parent-component.f90 (+1-1) 
- (modified) flang/test/Lower/pointer-association-polymorphic.f90 (+7-7) 
- (modified) flang/test/Lower/pointer-disassociate.f90 (+1-1) 
- (modified) flang/test/Lower/polymorphic-temp.f90 (+10-10) 
- (modified) flang/test/Lower/polymorphic.f90 (+17-17) 
- (modified) flang/test/Lower/select-type-2.fir (+2-2) 
- (modified) flang/test/Lower/stop-statement.f90 (+2-2) 
- (modified) flang/test/Lower/structure-constructors-alloc-comp.f90 (+4-4) 
- (modified) flang/test/Lower/structure-constructors.f90 (+1-1) 
- (modified) flang/test/Lower/transformational-intrinsics.f90 (+6-6) 
- (modified) flang/test/Transforms/omp-reduction-cfg-conversion.fir (+1-1) 
- (modified) flang/test/Transforms/simplifyintrinsics.fir (+27-27) 
- (modified) flang/test/Transforms/stack-arrays.fir (+2-2) 


``````````diff
diff --git a/flang/docs/OpenACC-descriptor-management.md b/flang/docs/OpenACC-descriptor-management.md
index 0b5103000d8e7c..52d00ae4daef88 100644
--- a/flang/docs/OpenACC-descriptor-management.md
+++ b/flang/docs/OpenACC-descriptor-management.md
@@ -348,7 +348,7 @@ acc.attach.recipe @attach_ref :
      %offset : index,
      %size : index):
   fir.call _FortranAOpenACCAttachDescriptor(%aug_ptr, %base_addr_val, %offset, %size) :
-      (!fir.ref<none>, !fir.ref<!fir.box<none>>, index, index) -> none
+      (!fir.ref<none>, !fir.ref<!fir.box<none>>, index, index) -> ()
   acc.yield
 }
 
diff --git a/flang/docs/ParameterizedDerivedTypes.md b/flang/docs/ParameterizedDerivedTypes.md
index 851775b123b43d..0ed9f8b494e783 100644
--- a/flang/docs/ParameterizedDerivedTypes.md
+++ b/flang/docs/ParameterizedDerivedTypes.md
@@ -435,16 +435,16 @@ allocate(t1(2)::p)
 **FIR**
 ```
 // For allocatable
-%5 = fir.call @_FortranAAllocatableInitDerived(%desc, %type) : (!fir.box<none>, ) -> ()
+fir.call @_FortranAAllocatableInitDerived(%desc, %type) : (!fir.box<none>, ) -> ()
 // The AllocatableSetDerivedLength functions is called for each length type parameters.
-%6 = fir.call @_FortranAAllocatableSetDerivedLength(%desc, %pos, %value) : (!fir.box<none>, i32, i64) -> ()
-%7 = fir.call @_FortranAAllocatableAllocate(%3) : (!fir.box<none>) -> ()
+fir.call @_FortranAAllocatableSetDerivedLength(%desc, %pos, %value) : (!fir.box<none>, i32, i64) -> ()
+fir.call @_FortranAAllocatableAllocate(%3) : (!fir.box<none>) -> ()
 
 // For pointer
-%5 = fir.call @_FortranAPointerNullifyDerived(%desc, %type) : (!fir.box<none>, ) -> ()
+fir.call @_FortranAPointerNullifyDerived(%desc, %type) : (!fir.box<none>, ) -> ()
 // The PointerSetDerivedLength functions is called for each length type parameters.
-%6 = fir.call @_FortranAPointerSetDerivedLength(%desc, %pos, %value) : (!fir.box<none>, i32, i64) -> ()
-%7 = fir.call @_FortranAPointerAllocate(%3) : (!fir.box<none>) -> ()
+fir.call @_FortranAPointerSetDerivedLength(%desc, %pos, %value) : (!fir.box<none>, i32, i64) -> ()
+fir.call @_FortranAPointerAllocate(%3) : (!fir.box<none>) -> ()
 ```
 
 `DEALLOCATE`
@@ -478,7 +478,7 @@ NULLIFY(p)
 
 **FIR**
 ```
-%0 = fir.call @_FortranAPointerNullifyDerived(%desc, %type) : (!fir.box<none>, !fir.tdesc) -> ()
+fir.call @_FortranAPointerNullifyDerived(%desc, %type) : (!fir.box<none>, !fir.tdesc) -> ()
 ```
 
 #### Formatted I/O
@@ -518,7 +518,7 @@ func.func @_QMpdtPprint_pdt() {
   %c8_i32 = arith.constant 8 : i32
   %3 = fir.convert %1 : (!fir.box<!fir.type<_QMpdtTt{l:i32,i:!fir.array<?xi32>}>>) -> !fir.box<none>
   %4 = fir.convert %2 : (!fir.ref<!fir.char<1,22>>) -> !fir.ref<i8>
-  %5 = fir.call @_FortranAInitialize(%3, %4, %c8_i32) : (!fir.box<none>, !fir.ref<i8>, i32) -> none
+  fir.call @_FortranAInitialize(%3, %4, %c8_i32) : (!fir.box<none>, !fir.ref<i8>, i32) -> ()
   %c-1_i32 = arith.constant -1 : i32
   %6 = fir.address_of(@_QQcl.2E2F6669725F7064745F6578616D706C652E66393000) : !fir.ref<!fir.char<1,22>>
   %7 = fir.convert %6 : (!fir.ref<!fir.char<1,22>>) -> !fir.ref<i8>
@@ -882,7 +882,7 @@ func.func @_QMpdt_initPlocal() {
   %c8_i32 = arith.constant 8 : i32
   %3 = fir.convert %1 : (!fir.box<!fir.type<_QMpdt_initTt{l:i32,i:!fir.array<?xi32>}>>) -> !fir.box<none>
   %4 = fir.convert %2 : (!fir.ref<!fir.char<1,22>>) -> !fir.ref<i8>
-  %5 = fir.call @_FortranAInitialize(%3, %4, %c8_i32) : (!fir.box<none>, !fir.ref<i8>, i32) -> none
+  fir.call @_FortranAInitialize(%3, %4, %c8_i32) : (!fir.box<none>, !fir.ref<i8>, i32) -> ()
   return
 }
 ```
diff --git a/flang/docs/PolymorphicEntities.md b/flang/docs/PolymorphicEntities.md
index befcc53127a4a5..65830685085846 100644
--- a/flang/docs/PolymorphicEntities.md
+++ b/flang/docs/PolymorphicEntities.md
@@ -609,7 +609,7 @@ finalization with a call the the `@_FortranADestroy` function
 
 **FIR**
 ```
-%5 = fir.call @_FortranADestroy(%desc) : (!fir.box<none>) -> none
+fir.call @_FortranADestroy(%desc) : (!fir.box<none>) -> ()
 ```
 
 The `@_FortranADestroy` function will take care to call the final subroutines
diff --git a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
index 09b49b95fefe57..6c31ae620a3589 100644
--- a/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
+++ b/flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h
@@ -776,6 +776,9 @@ static mlir::func::FuncOp getRuntimeFunc(mlir::Location loc,
   if (func)
     return func;
   auto funTy = RuntimeEntry::getTypeModel()(builder.getContext());
+  if (funTy.getResults().size() == 1 &&
+      mlir::isa<mlir::NoneType>(funTy.getResult(0)))
+    funTy = mlir::FunctionType::get(funTy.getContext(), funTy.getInputs(), {});
   func = builder.createFunction(loc, name, funTy);
   func->setAttr(FIROpsDialect::getFirRuntimeAttrName(), builder.getUnitAttr());
   return func;
diff --git a/flang/include/flang/Optimizer/Dialect/FIRType.h b/flang/include/flang/Optimizer/Dialect/FIRType.h
index ac638d98980d1e..78257ab7030862 100644
--- a/flang/include/flang/Optimizer/Dialect/FIRType.h
+++ b/flang/include/flang/Optimizer/Dialect/FIRType.h
@@ -439,7 +439,7 @@ inline mlir::Type wrapInClassOrBoxType(mlir::Type eleTy,
 /// Return the elementType where intrinsic types are replaced with none for
 /// unlimited polymorphic entities.
 ///
-/// i32 -> none
+/// i32 -> ()
 /// !fir.array<2xf32> -> !fir.array<2xnone>
 /// !fir.heap<!fir.array<2xf32>> -> !fir.heap<!fir.array<2xnone>>
 inline mlir::Type updateTypeForUnlimitedPolymorphic(mlir::Type ty) {
diff --git a/flang/lib/Lower/Runtime.cpp b/flang/lib/Lower/Runtime.cpp
index 3474832bdb225c..2be5ef76e46b8e 100644
--- a/flang/lib/Lower/Runtime.cpp
+++ b/flang/lib/Lower/Runtime.cpp
@@ -210,7 +210,7 @@ void Fortran::lower::genPointerAssociate(fir::FirOpBuilder &builder,
       fir::runtime::getRuntimeFunc<mkRTKey(PointerAssociate)>(loc, builder);
   llvm::SmallVector<mlir::Value> args = fir::runtime::createArguments(
       builder, loc, func.getFunctionType(), pointer, target);
-  builder.create<fir::CallOp>(loc, func, args).getResult(0);
+  builder.create<fir::CallOp>(loc, func, args);
 }
 
 void Fortran::lower::genPointerAssociateRemapping(fir::FirOpBuilder &builder,
@@ -228,7 +228,7 @@ void Fortran::lower::genPointerAssociateRemapping(fir::FirOpBuilder &builder,
   llvm::SmallVector<mlir::Value> args = fir::runtime::createArguments(
       builder, loc, func.getFunctionType(), pointer, target, bounds, sourceFile,
       sourceLine);
-  builder.create<fir::CallOp>(loc, func, args).getResult(0);
+  builder.create<fir::CallOp>(loc, func, args);
 }
 
 void Fortran::lower::genPointerAssociateLowerBounds(fir::FirOpBuilder &builder,
@@ -241,5 +241,5 @@ void Fortran::lower::genPointerAssociateLowerBounds(fir::FirOpBuilder &builder,
           loc, builder);
   llvm::SmallVector<mlir::Value> args = fir::runtime::createArguments(
       builder, loc, func.getFunctionType(), pointer, target, lbounds);
-  builder.create<fir::CallOp>(loc, func, args).getResult(0);
+  builder.create<fir::CallOp>(loc, func, args);
 }
diff --git a/flang/lib/Optimizer/Builder/Runtime/Inquiry.cpp b/flang/lib/Optimizer/Builder/Runtime/Inquiry.cpp
index e01a6f05b5fdd8..f4d03c95ae5184 100644
--- a/flang/lib/Optimizer/Builder/Runtime/Inquiry.cpp
+++ b/flang/lib/Optimizer/Builder/Runtime/Inquiry.cpp
@@ -40,7 +40,7 @@ void fir::runtime::genLbound(fir::FirOpBuilder &builder, mlir::Location loc,
       fir::factory::locationToLineNo(builder, loc, fTy.getInput(4));
   auto args = fir::runtime::createArguments(
       builder, loc, fTy, resultAddr, array, kind, sourceFile, sourceLine);
-  builder.create<fir::CallOp>(loc, func, args).getResult(0);
+  builder.create<fir::CallOp>(loc, func, args);
 }
 
 /// Generate call to `Ubound` runtime routine.  Calls to UBOUND with a DIM
@@ -57,7 +57,7 @@ void fir::runtime::genUbound(fir::FirOpBuilder &builder, mlir::Location loc,
       fir::factory::locationToLineNo(builder, loc, fTy.getInput(2));
   auto args = fir::runtime::createArguments(builder, loc, fTy, resultBox, array,
                                             kind, sourceFile, sourceLine);
-  builder.create<fir::CallOp>(loc, uboundFunc, args).getResult(0);
+  builder.create<fir::CallOp>(loc, uboundFunc, args);
 }
 
 /// Generate call to `Size` runtime routine. This routine is a version when
@@ -113,5 +113,5 @@ void fir::runtime::genShape(fir::FirOpBuilder &builder, mlir::Location loc,
       fir::factory::locationToLineNo(builder, loc, fTy.getInput(4));
   auto args = fir::runtime::createArguments(
       builder, loc, fTy, resultAddr, array, kind, sourceFile, sourceLine);
-  builder.create<fir::CallOp>(loc, func, args).getResult(0);
+  builder.create<fir::CallOp>(loc, func, args);
 }
diff --git a/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp b/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp
index ded9579f2c1df0..963051ccdc3793 100644
--- a/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp
+++ b/flang/lib/Optimizer/Builder/Runtime/Intrinsics.cpp
@@ -38,8 +38,7 @@ struct ForcedRandomNumberReal16 {
       auto strTy = fir::runtime::getModel<const char *>()(ctx);
       auto intTy = fir::runtime::getModel<int>()(ctx);
       ;
-      return mlir::FunctionType::get(ctx, {boxTy, strTy, intTy},
-                                     mlir::NoneType::get(ctx));
+      return mlir::FunctionType::get(ctx, {boxTy, strTy, intTy}, {});
     };
   }
 };
diff --git a/flang/lib/Optimizer/Builder/Runtime/Reduction.cpp b/flang/lib/Optimizer/Builder/Runtime/Reduction.cpp
index 1aa941bd2131c2..e99299fc709bac 100644
--- a/flang/lib/Optimizer/Builder/Runtime/Reduction.cpp
+++ b/flang/lib/Optimizer/Builder/Runtime/Reduction.cpp
@@ -209,7 +209,7 @@ struct ForcedNorm2DimReal16 {
       auto intTy = mlir::IntegerType::get(ctx, 8 * sizeof(int));
       return mlir::FunctionType::get(
           ctx, {fir::ReferenceType::get(boxTy), boxTy, intTy, strTy, intTy},
-          mlir::NoneType::get(ctx));
+          {});
     };
   }
 };
diff --git a/flang/lib/Optimizer/Builder/Runtime/Transformational.cpp b/flang/lib/Optimizer/Builder/Runtime/Transformational.cpp
index 517ba3799798fe..29f00bd8c26de4 100644
--- a/flang/lib/Optimizer/Builder/Runtime/Transformational.cpp
+++ b/flang/lib/Optimizer/Builder/Runtime/Transformational.cpp
@@ -30,9 +30,8 @@ struct ForcedBesselJn_10 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(
-          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {noneTy});
+          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {});
     };
   }
 };
@@ -47,9 +46,8 @@ struct ForcedBesselJn_16 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(
-          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {noneTy});
+          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {});
     };
   }
 };
@@ -63,9 +61,8 @@ struct ForcedBesselJnX0_10 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(ctx, {boxTy, intTy, intTy, strTy, intTy},
-                                     {noneTy});
+                                     {});
     };
   }
 };
@@ -79,9 +76,8 @@ struct ForcedBesselJnX0_16 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(ctx, {boxTy, intTy, intTy, strTy, intTy},
-                                     {noneTy});
+                                     {});
     };
   }
 };
@@ -96,9 +92,8 @@ struct ForcedBesselYn_10 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(
-          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {noneTy});
+          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {});
     };
   }
 };
@@ -113,9 +108,8 @@ struct ForcedBesselYn_16 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(
-          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {noneTy});
+          ctx, {boxTy, intTy, intTy, ty, ty, ty, strTy, intTy}, {});
     };
   }
 };
@@ -129,9 +123,8 @@ struct ForcedBesselYnX0_10 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(ctx, {boxTy, intTy, intTy, strTy, intTy},
-                                     {noneTy});
+                                     {});
     };
   }
 };
@@ -145,9 +138,8 @@ struct ForcedBesselYnX0_16 {
           fir::runtime::getModel<Fortran::runtime::Descriptor &>()(ctx);
       auto strTy = fir::ReferenceType::get(mlir::IntegerType::get(ctx, 8));
       auto intTy = mlir::IntegerType::get(ctx, 32);
-      auto noneTy = mlir::NoneType::get(ctx);
       return mlir::FunctionType::get(ctx, {boxTy, intTy, intTy, strTy, intTy},
-                                     {noneTy});
+                                     {});
     };
   }
 };
diff --git a/flang/test/Analysis/AliasAnalysis/ptr-component.fir b/flang/test/Analysis/AliasAnalysis/ptr-component.fir
index 279143a5814606..856d8e2d94c989 100644
--- a/flang/test/Analysis/AliasAnalysis/ptr-component.fir
+++ b/flang/test/Analysis/AliasAnalysis/ptr-component.fir
@@ -101,7 +101,7 @@ func.func @_QMmPfoo.fir(%arg0: !fir.ref<!fir.type<_QMmTt{next:!fir.box<!fir.ptr<
   %17 = fir.convert %0 : (!fir.ref<!fir.box<!fir.type<_QMmTt{next:!fir.box<!fir.ptr<!fir.type<_QMmTt>>>,i:i32}>>>) -> !fir.ref<!fir.box<none>>
   %18 = fir.convert %15 : (!fir.box<!fir.type<_QMmTt{next:!fir.box<!fir.ptr<!fir.type<_QMmTt>>>,i:i32}>>) -> !fir.box<none>
   %19 = fir.convert %16 : (!fir.ref<!fir.char<1,9>>) -> !fir.ref<i8>
-  %20 = fir.call @_FortranAAssign(%17, %18, %19, %c14_i32) : (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.ref<i8>, i32) -> none
+  fir.call @_FortranAAssign(%17, %18, %19, %c14_i32) : (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.ref<i8>, i32) -> ()
   %21 = fir.field_index next, !fir.type<_QMmTt{next:!fir.box<!fir.ptr<!fir.type<_QMmTt>>>,i:i32}>
   %22 = fir.coordinate_of %5, %21 {test.ptr="xnext2.fir"}: (!fir.ref<!fir.type<_QMmTt{next:!fir.box<!fir.ptr<!fir.type<_QMmTt>>>,i:i32}>>, !fir.field) -> !fir.ref<!fir.box<!fir.ptr<!fir.type<_QMmTt{next:!fir.box<!fir.ptr<!fir.type<_QMmTt>>>,i:i32}>>>>
   %23 = fir.load %22 : !fir.ref<!fir.box<!fir.ptr<!fir.type<_QMmTt{next:!fir.box<!fir.ptr<!fir.type<_QMmTt>>>,i:i32}>>>>
diff --git a/flang/test/Fir/CUDA/cuda-alloc-free.fir b/flang/test/Fir/CUDA/cuda-alloc-free.fir
index abf2d56695b172..6194f0071cd796 100644
--- a/flang/test/Fir/CUDA/cuda-alloc-free.fir
+++ b/flang/test/Fir/CUDA/cuda-alloc-free.fir
@@ -15,7 +15,7 @@ func.func @_QPsub1() {
 // CHECK: %[[CONV:.*]] = fir.convert %3 : (!fir.llvm_ptr<i8>) -> !fir.ref<i32>
 // CHECK: %[[DECL:.*]]:2 = hlfir.declare %[[CONV]] {data_attr = #cuf.cuda<device>, uniq_name = "_QFsub1Eidev"} : (!fir.ref<i32>) -> (!fir.ref<i32>, !fir.ref<i32>)
 // CHECK: %[[DEVPTR:.*]] = fir.convert %[[DECL]]#1 : (!fir.ref<i32>) -> !fir.llvm_ptr<i8>
-// CHECK: fir.call @_FortranACUFMemFree(%[[DEVPTR]], %c0{{.*}}, %{{.*}}, %{{.*}}) : (!fir.llvm_ptr<i8>, i32, !fir.ref<i8>, i32) -> none
+// CHECK: fir.call @_FortranACUFMemFree(%[[DEVPTR]], %c0{{.*}}, %{{.*}}, %{{.*}}) : (!fir.llvm_ptr<i8>, i32, !fir.ref<i8>, i32) -> ()
 
 func.func @_QPsub2() {
   %0 = cuf.alloc !fir.array<10xf32> {bindc_name = "a", data_attr = #cuf.cuda<device>, uniq_name = "_QMcuda_varFcuda_alloc_freeEa"} -> !fir.ref<!fir.array<10xf32>>
diff --git a/flang/test/Fir/CUDA/cuda-allocate.fir b/flang/test/Fir/CUDA/cuda-allocate.fir
index 2f805d4a2b6bbc..35c6e2a77a697d 100644
--- a/flang/test/Fir/CUDA/cuda-allocate.fir
+++ b/flang/test/Fir/CUDA/cuda-allocate.fir
@@ -24,7 +24,7 @@ func.func @_QPsub1() {
 // CHECK: %[[BOX_NONE:.*]] = fir.convert %[[DECL_DESC]]#1 : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>) -> !fir.ref<!fir.box<none>>
 // CHECK: %{{.*}} = fir.call @_FortranAAllocatableDeallocate(%[[BOX_NONE]], %{{.*}}, %{{.*}}, %{{.*}}, %{{.*}}) : (!fir.ref<!fir.box<none>>, i1, !fir.box<none>, !fir.ref<i8>, i32) -> i32
 // CHECK: %[[BOX_NONE:.*]] = fir.convert %[[DECL_DESC]]#1 : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>) -> !fir.ref<!fir.box<none>>
-// CHECK: fir.call @_FortranACUFFreeDescriptor(%[[BOX_NONE]], %{{.*}}, %{{.*}}) : (!fir.ref<!fir.box<none>>, !fir.ref<i8>, i32) -> none
+// CHECK: fir.call @_FortranACUFFreeDescriptor(%[[BOX_NONE]], %{{.*}}, %{{.*}}) : (!fir.ref<!fir.box<none>>, !fir.ref<i8>, i32) -> ()
 
 fir.global @_QMmod1Ea {data_attr = #cuf.cuda<device>} : !fir.box<!fir.heap<!fir.array<?xf32>>> {
     %0 = fir.zero_bits !fir.heap<!fir.array<?xf32>>
@@ -80,7 +80,7 @@ func.func @_QPsub5() {
   %6 = fir.convert %5#1 : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>>) -> !fir.ref<!fir.box<none>>
   %7 = fir.convert %c1 : (index) -> i64
   %8 = fir.convert %c10_i32 : (i32) -> i64
-  %9 = fir.call @_FortranAAllocatableSetBounds(%6, %c0_i32, %7, %8) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> none
+  fir.call @_FortranAAllocatableSetBounds(%6, %c0_i32, %7, %8) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> ()
   %10 = cuf.allocate %5#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>> {data_attr = #cuf.cuda<pinned>} -> i32
   %11 = cuf.deallocate %5#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xf32>>>> {data_attr = #cuf.cuda<pinned>} -> i32
   return
@@ -108,7 +108,7 @@ func.func @_QQsub6() attributes {fir.bindc_name = "test"} {
   %2 = fir.convert %1#1 : (!fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>>) -> !fir.ref<!fir.box<none>>
   %3 = fir.convert %c1 : (index) -> i64
   %4 = fir.convert %c10_i32 : (i32) -> i64
-  %5 = fir.call @_FortranAAllocatableSetBounds(%2, %c0_i32, %3, %4) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> none
+  fir.call @_FortranAAllocatableSetBounds(%2, %c0_i32, %3, %4) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> ()
   %6 = cuf.allocate %1#1 : !fir.ref<!fir.box<!fir.heap<!fir.array<?xi32>>>> {data_attr = #cuf.cuda<device>} -> i32
   return
 }
diff --git a/flang/test/Fir/CUDA/cuda-code-gen.mlir b/flang/test/Fir/CUDA/cuda-code-gen.mlir
index 0f1b8b1cd6a8e6..3ad28fa7bd5179 100644
--- a/flang/test/Fir/CUDA/cuda-code-gen.mlir
+++ b/flang/test/Fir/CUDA/cuda-code-gen.mlir
@@ -91,8 +91,8 @@ module attributes {dlti.dl_spec = #dlti.dl_spec<f80 = dense<128> : vector<2xi64>
     %16 = fir.convert %6 : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?xf32>>>>) -> !fir.ref<!fir.box<none>>
     %17 = fir.convert %c1 : (index) -> i64
     %18 = fir.convert %c16_i32 : (i32) -> i64
-    %19 = fir.call @_FortranAAllocatableSetBounds(%16, %c0_i32, %17, %18) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> none
-    %20 = fir.call @_FortranAAllocatableSetBounds(%16, %c1_i32, %17, %18) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> none
+    fir.call @_FortranAAllocatableSetBounds(%16, %c0_i32, %17, %18) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> ()
+    fir.call @_FortranAAllocatableSetBounds(%16, %c1_i32, %17, %18) fastmath<contract> : (!fir.ref<!fir.box<none>>, i32, i64, i64) -> ()
     %21 = fir.address_of(@...
[truncated]

``````````

</details>


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


More information about the flang-commits mailing list