Skip to content

Commit 3aa4ab2

Browse files
authored
Call OutputInteger{8,16,32,64,128} functions (#1199)
Size specific OutputInteger calls are needed for BOZ edit descriptors.
1 parent 080bcac commit 3aa4ab2

File tree

12 files changed

+93
-59
lines changed

12 files changed

+93
-59
lines changed

flang/include/flang/Optimizer/Builder/Runtime/RTBuilder.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#define FORTRAN_OPTIMIZER_BUILDER_RUNTIME_RTBUILDER_H
1919

2020
#include "flang/Common/Fortran.h"
21+
#include "flang/Common/uint128.h"
2122
#include "flang/Optimizer/Builder/FIRBuilder.h"
2223
#include "flang/Optimizer/Dialect/FIRType.h"
2324
#include "mlir/IR/BuiltinTypes.h"
@@ -141,6 +142,13 @@ constexpr TypeBuilderFunc getModel<long long>() {
141142
};
142143
}
143144
template <>
145+
constexpr TypeBuilderFunc getModel<Fortran::common::int128_t>() {
146+
return [](mlir::MLIRContext *context) -> mlir::Type {
147+
return mlir::IntegerType::get(context,
148+
8 * sizeof(Fortran::common::int128_t));
149+
};
150+
}
151+
template <>
144152
constexpr TypeBuilderFunc getModel<long long &>() {
145153
return [](mlir::MLIRContext *context) -> mlir::Type {
146154
TypeBuilderFunc f{getModel<long long>()};

flang/lib/Lower/IO.cpp

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include "flang/Lower/IO.h"
1414
#include "ConvertVariable.h"
1515
#include "StatementContext.h"
16+
#include "flang/Common/uint128.h"
1617
#include "flang/Lower/Allocatable.h"
1718
#include "flang/Lower/Bridge.h"
1819
#include "flang/Lower/ConvertExpr.h"
@@ -85,15 +86,17 @@ static constexpr std::tuple<
8586
mkIOKey(SetRec), mkIOKey(SetRound), mkIOKey(SetSign),
8687
mkIOKey(OutputNamelist), mkIOKey(InputNamelist), mkIOKey(OutputDescriptor),
8788
mkIOKey(InputDescriptor), mkIOKey(OutputUnformattedBlock),
88-
mkIOKey(InputUnformattedBlock), mkIOKey(OutputInteger64),
89-
mkIOKey(InputInteger), mkIOKey(OutputReal32), mkIOKey(InputReal32),
90-
mkIOKey(OutputReal64), mkIOKey(InputReal64), mkIOKey(OutputComplex32),
91-
mkIOKey(InputComplex32), mkIOKey(OutputComplex64), mkIOKey(InputComplex64),
92-
mkIOKey(OutputAscii), mkIOKey(InputAscii), mkIOKey(OutputLogical),
93-
mkIOKey(InputLogical), mkIOKey(SetAccess), mkIOKey(SetAction),
94-
mkIOKey(SetAsynchronous), mkIOKey(SetCarriagecontrol), mkIOKey(SetEncoding),
95-
mkIOKey(SetForm), mkIOKey(SetPosition), mkIOKey(SetRecl),
96-
mkIOKey(SetStatus), mkIOKey(SetFile), mkIOKey(GetNewUnit), mkIOKey(GetSize),
89+
mkIOKey(InputUnformattedBlock), mkIOKey(OutputInteger8),
90+
mkIOKey(OutputInteger16), mkIOKey(OutputInteger32),
91+
mkIOKey(OutputInteger64), mkIOKey(OutputInteger128), mkIOKey(InputInteger),
92+
mkIOKey(OutputReal32), mkIOKey(InputReal32), mkIOKey(OutputReal64),
93+
mkIOKey(InputReal64), mkIOKey(OutputComplex32), mkIOKey(InputComplex32),
94+
mkIOKey(OutputComplex64), mkIOKey(InputComplex64), mkIOKey(OutputAscii),
95+
mkIOKey(InputAscii), mkIOKey(OutputLogical), mkIOKey(InputLogical),
96+
mkIOKey(SetAccess), mkIOKey(SetAction), mkIOKey(SetAsynchronous),
97+
mkIOKey(SetCarriagecontrol), mkIOKey(SetEncoding), mkIOKey(SetForm),
98+
mkIOKey(SetPosition), mkIOKey(SetRecl), mkIOKey(SetStatus),
99+
mkIOKey(SetFile), mkIOKey(GetNewUnit), mkIOKey(GetSize),
97100
mkIOKey(GetIoLength), mkIOKey(GetIoMsg), mkIOKey(InquireCharacter),
98101
mkIOKey(InquireLogical), mkIOKey(InquirePendingId),
99102
mkIOKey(InquireInteger64), mkIOKey(EndIoStatement)>
@@ -390,10 +393,23 @@ static mlir::FuncOp getOutputFunc(mlir::Location loc,
390393
bool isFormatted) {
391394
if (!isFormatted)
392395
return getIORuntimeFunc<mkIOKey(OutputDescriptor)>(loc, builder);
393-
if (auto ty = type.dyn_cast<mlir::IntegerType>())
394-
return ty.getWidth() == 1
395-
? getIORuntimeFunc<mkIOKey(OutputLogical)>(loc, builder)
396-
: getIORuntimeFunc<mkIOKey(OutputInteger64)>(loc, builder);
396+
if (auto ty = type.dyn_cast<mlir::IntegerType>()) {
397+
switch (ty.getWidth()) {
398+
case 1:
399+
return getIORuntimeFunc<mkIOKey(OutputLogical)>(loc, builder);
400+
case 8:
401+
return getIORuntimeFunc<mkIOKey(OutputInteger8)>(loc, builder);
402+
case 16:
403+
return getIORuntimeFunc<mkIOKey(OutputInteger16)>(loc, builder);
404+
case 32:
405+
return getIORuntimeFunc<mkIOKey(OutputInteger32)>(loc, builder);
406+
case 64:
407+
return getIORuntimeFunc<mkIOKey(OutputInteger64)>(loc, builder);
408+
case 128:
409+
return getIORuntimeFunc<mkIOKey(OutputInteger128)>(loc, builder);
410+
}
411+
llvm_unreachable("unknown OutputInteger kind");
412+
}
397413
if (auto ty = type.dyn_cast<mlir::FloatType>())
398414
return ty.getWidth() <= 32
399415
? getIORuntimeFunc<mkIOKey(OutputReal32)>(loc, builder)

flang/test/Lower/OpenMP/omp-master.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ program main
6868
!$OMP PARALLEL
6969
!FIRDialect: omp.parallel {
7070
!FIRDialect: fir.call @_FortranAioBeginExternalListOutput
71-
!FIRDialect: fir.call @_FortranAioOutputInteger64
71+
!FIRDialect: fir.call @_FortranAioOutputInteger32
7272
!FIRDialect: fir.call @_FortranAioEndIoStatement
7373
!FIRDialect: omp.terminator
7474
!FIRDialect: }

flang/test/Lower/OpenMP/omp-parallel-firstprivate-clause-scalar.f90

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,22 +91,17 @@ subroutine firstprivate_complex(arg1, arg2)
9191
!FIRDialect-DAG: fir.store %[[ARG6_VAL]] to %[[ARG6_PVT]] : !fir.ref<i128>
9292
!FIRDialect-DAG: %[[LIST_IO:.*]] = fir.call @_FortranAioBeginExternalListOutput
9393
!FIRDialect-DAG: %[[ARG1_PVT_VAL:.*]] = fir.load %[[ARG1_PVT]] : !fir.ref<i32>
94-
!FIRDialect-DAG: %[[ARG1_PVT_CVT:.*]] = fir.convert %[[ARG1_PVT_VAL]] : (i32) -> i64
95-
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger64(%[[LIST_IO]], %[[ARG1_PVT_CVT]]) : (!fir.ref<i8>, i64) -> i1
94+
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger32(%[[LIST_IO]], %[[ARG1_PVT_VAL]]) : (!fir.ref<i8>, i32) -> i1
9695
!FIRDialect-DAG: %[[ARG2_PVT_VAL:.*]] = fir.load %[[ARG2_PVT]] : !fir.ref<i8>
97-
!FIRDialect-DAG: %[[ARG2_PVT_CVT:.*]] = fir.convert %[[ARG2_PVT_VAL]] : (i8) -> i64
98-
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger64(%[[LIST_IO]], %[[ARG2_PVT_CVT]]) : (!fir.ref<i8>, i64) -> i1
96+
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger8(%[[LIST_IO]], %[[ARG2_PVT_VAL]]) : (!fir.ref<i8>, i8) -> i1
9997
!FIRDialect-DAG: %[[ARG3_PVT_VAL:.*]] = fir.load %[[ARG3_PVT]] : !fir.ref<i16>
100-
!FIRDialect-DAG: %[[ARG3_PVT_CVT:.*]] = fir.convert %[[ARG3_PVT_VAL]] : (i16) -> i64
101-
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger64(%[[LIST_IO]], %[[ARG3_PVT_CVT]]) : (!fir.ref<i8>, i64) -> i1
98+
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger16(%[[LIST_IO]], %[[ARG3_PVT_VAL]]) : (!fir.ref<i8>, i16) -> i1
10299
!FIRDialect-DAG: %[[ARG4_PVT_VAL:.*]] = fir.load %[[ARG4_PVT]] : !fir.ref<i32>
103-
!FIRDialect-DAG: %[[ARG4_PVT_CVT:.*]] = fir.convert %[[ARG4_PVT_VAL]] : (i32) -> i64
104-
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger64(%[[LIST_IO]], %[[ARG4_PVT_CVT]]) : (!fir.ref<i8>, i64) -> i1
100+
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger32(%[[LIST_IO]], %[[ARG4_PVT_VAL]]) : (!fir.ref<i8>, i32) -> i1
105101
!FIRDialect-DAG: %[[ARG5_PVT_VAL:.*]] = fir.load %[[ARG5_PVT]] : !fir.ref<i64>
106102
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger64(%[[LIST_IO]], %[[ARG5_PVT_VAL]]) : (!fir.ref<i8>, i64) -> i1
107103
!FIRDialect-DAG: %[[ARG6_PVT_VAL:.*]] = fir.load %[[ARG6_PVT]] : !fir.ref<i128>
108-
!FIRDialect-DAG: %[[ARG6_PVT_CVT:.*]] = fir.convert %[[ARG6_PVT_VAL]] : (i128) -> i64
109-
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger64(%[[LIST_IO]], %[[ARG6_PVT_CVT]]) : (!fir.ref<i8>, i64) -> i1
104+
!FIRDialect-DAG: %{{.*}} = fir.call @_FortranAioOutputInteger128(%[[LIST_IO]], %[[ARG6_PVT_VAL]]) : (!fir.ref<i8>, i128) -> i1
110105
!FIRDialect-DAG: omp.terminator
111106
!FIRDialect-DAG: }
112107

flang/test/Lower/OpenMP/omp-parallel-region.f90

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ program parallel
4646
!FIRDialect-NEXT: }
4747
!FIRDialect: fir.call @_FortranAioBeginExternalListOutput
4848
!FIRDialect: fir.load %[[VAR_C]]
49-
!FIRDialect: fir.call @_FortranAioOutputInteger64
49+
!FIRDialect: fir.call @_FortranAioOutputInteger32
5050
!FIRDialect: fir.call @_FortranAioEndIoStatement
5151
!FIRDialect: omp.terminator
5252
!FIRDialect-NEXT: }
@@ -67,7 +67,7 @@ program parallel
6767
!LLVMIRDialect: ^bb2: // 2 preds: ^bb0, ^bb1
6868
!LLVMIRDialect: llvm.call @_FortranAioBeginExternalListOutput
6969
!LLVMIRDialect: llvm.load %[[VAR_C]] : !llvm.ptr<i32>
70-
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger64
70+
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger32
7171
!LLVMIRDialect: llvm.call @_FortranAioEndIoStatement
7272
!LLVMIRDialect: omp.terminator
7373
!LLVMIRDialect-NEXT: }
@@ -82,7 +82,7 @@ program parallel
8282
!LLVMIR: %[[COND_RES:.*]] = icmp sgt i32 %{{.*}}, 4
8383
!LLVMIR: br i1 %[[COND_RES]], label %{{.*}}, label %{{.*}}
8484
!LLVMIR: call i8* @_FortranAioBeginExternalListOutput
85-
!LLVMIR: call i1 @_FortranAioOutputInteger64
85+
!LLVMIR: call i1 @_FortranAioOutputInteger32
8686
!LLVMIR: call i32 @_FortranAioEndIoStatement
8787
c = a + b
8888

flang/test/Lower/OpenMP/omp-wsloop-dynamic.f90

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,12 @@ program wsloop_dynamic
5858
do i=1, 9
5959
print*, i
6060
!FIRDialect: %[[RTBEGIN:.*]] = fir.call @_FortranAioBeginExternalListOutput
61-
!FIRDialect: %[[CONVERTED:.*]] = fir.convert %[[I]] : (i32) -> i64
62-
!FIRDialect: fir.call @_FortranAioOutputInteger64(%[[RTBEGIN]], %[[CONVERTED]]) : (!fir.ref<i8>, i64) -> i1
61+
!FIRDialect: fir.call @_FortranAioOutputInteger32(%[[RTBEGIN]], %[[I]]) : (!fir.ref<i8>, i32) -> i1
6362
!FIRDialect: fir.call @_FortranAioEndIoStatement(%[[RTBEGIN]]) : (!fir.ref<i8>) -> i32
6463

6564

6665
!LLVMIRDialect: llvm.call @_FortranAioBeginExternalListOutput(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, !llvm.ptr<i8>, i32) -> !llvm.ptr<i8>
67-
!LLVMIRDialect: %{{.*}} = llvm.sext %arg0 : i32 to i64
68-
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i64) -> i1
66+
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i32) -> i1
6967
!LLVMIRDialect: llvm.call @_FortranAioEndIoStatement(%{{.*}}) : (!llvm.ptr<i8>) -> i32
7068

7169
!LLVMIR: br label %omp_loop.cond
@@ -79,8 +77,7 @@ program wsloop_dynamic
7977
!LLVMIR: br label %omp.wsloop.region
8078
!LLVMIR: omp.wsloop.region: ; preds = %omp_loop.body
8179
!LLVMIR: %{{.*}} = call i8* @_FortranAioBeginExternalListOutput
82-
!LLVMIR: %{{.*}} = sext i32 %{{.*}} to i64
83-
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger64
80+
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger32
8481
!LLVMIR: %{{.*}} = call i32 @_FortranAioEndIoStatement
8582

8683
end do

flang/test/Lower/OpenMP/omp-wsloop-monotonic.f90

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,12 @@ program wsloop_dynamic
5858
do i=1, 9
5959
print*, i
6060
!FIRDialect: %[[RTBEGIN:.*]] = fir.call @_FortranAioBeginExternalListOutput
61-
!FIRDialect: %[[CONVERTED:.*]] = fir.convert %[[I]] : (i32) -> i64
62-
!FIRDialect: fir.call @_FortranAioOutputInteger64(%[[RTBEGIN]], %[[CONVERTED]]) : (!fir.ref<i8>, i64) -> i1
61+
!FIRDialect: fir.call @_FortranAioOutputInteger32(%[[RTBEGIN]], %[[I]]) : (!fir.ref<i8>, i32) -> i1
6362
!FIRDialect: fir.call @_FortranAioEndIoStatement(%[[RTBEGIN]]) : (!fir.ref<i8>) -> i32
6463

6564

6665
!LLVMIRDialect: llvm.call @_FortranAioBeginExternalListOutput(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, !llvm.ptr<i8>, i32) -> !llvm.ptr<i8>
67-
!LLVMIRDialect: %{{.*}} = llvm.sext %[[I]] : i32 to i64
68-
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i64) -> i1
66+
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i32) -> i1
6967
!LLVMIRDialect: llvm.call @_FortranAioEndIoStatement(%{{.*}}) : (!llvm.ptr<i8>) -> i32
7068

7169
!LLVMIR: br label %omp_loop.cond
@@ -79,8 +77,7 @@ program wsloop_dynamic
7977
!LLVMIR: br label %omp.wsloop.region
8078
!LLVMIR: omp.wsloop.region: ; preds = %omp_loop.body
8179
!LLVMIR: %{{.*}} = call i8* @_FortranAioBeginExternalListOutput
82-
!LLVMIR: %{{.*}} = sext i32 %{{.*}} to i64
83-
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger64
80+
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger32
8481
!LLVMIR: %{{.*}} = call i32 @_FortranAioEndIoStatement
8582

8683
end do

flang/test/Lower/OpenMP/omp-wsloop-nonmonotonic.f90

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,12 @@ program wsloop_dynamic
5858
do i=1, 9
5959
print*, i
6060
!FIRDialect: %[[RTBEGIN:.*]] = fir.call @_FortranAioBeginExternalListOutput
61-
!FIRDialect: %[[CONVERTED:.*]] = fir.convert %[[I]] : (i32) -> i64
62-
!FIRDialect: fir.call @_FortranAioOutputInteger64(%[[RTBEGIN]], %[[CONVERTED]]) : (!fir.ref<i8>, i64) -> i1
61+
!FIRDialect: fir.call @_FortranAioOutputInteger32(%[[RTBEGIN]], %[[I]]) : (!fir.ref<i8>, i32) -> i1
6362
!FIRDialect: fir.call @_FortranAioEndIoStatement(%[[RTBEGIN]]) : (!fir.ref<i8>) -> i32
6463

6564

6665
!LLVMIRDialect: llvm.call @_FortranAioBeginExternalListOutput(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, !llvm.ptr<i8>, i32) -> !llvm.ptr<i8>
67-
!LLVMIRDialect: %{{.*}} = llvm.sext %arg0 : i32 to i64
68-
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i64) -> i1
66+
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i32) -> i1
6967
!LLVMIRDialect: llvm.call @_FortranAioEndIoStatement(%{{.*}}) : (!llvm.ptr<i8>) -> i32
7068

7169
!LLVMIR: br label %omp_loop.cond
@@ -79,8 +77,7 @@ program wsloop_dynamic
7977
!LLVMIR: br label %omp.wsloop.region
8078
!LLVMIR: omp.wsloop.region: ; preds = %omp_loop.body
8179
!LLVMIR: %{{.*}} = call i8* @_FortranAioBeginExternalListOutput
82-
!LLVMIR: %{{.*}} = sext i32 %{{.*}} to i64
83-
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger64
80+
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger32
8481
!LLVMIR: %{{.*}} = call i32 @_FortranAioEndIoStatement
8582

8683
end do

flang/test/Lower/OpenMP/omp-wsloop-simd.f90

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,14 +58,12 @@ program wsloop_dynamic
5858
do i=1, 9
5959
print*, i
6060
!FIRDialect: %[[RTBEGIN:.*]] = fir.call @_FortranAioBeginExternalListOutput
61-
!FIRDialect: %[[CONVERTED:.*]] = fir.convert %[[I]] : (i32) -> i64
62-
!FIRDialect: fir.call @_FortranAioOutputInteger64(%[[RTBEGIN]], %[[CONVERTED]]) : (!fir.ref<i8>, i64) -> i1
61+
!FIRDialect: fir.call @_FortranAioOutputInteger32(%[[RTBEGIN]], %[[I]]) : (!fir.ref<i8>, i32) -> i1
6362
!FIRDialect: fir.call @_FortranAioEndIoStatement(%[[RTBEGIN]]) : (!fir.ref<i8>) -> i32
6463

6564

6665
!LLVMIRDialect: llvm.call @_FortranAioBeginExternalListOutput(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, !llvm.ptr<i8>, i32) -> !llvm.ptr<i8>
67-
!LLVMIRDialect: %{{.*}} = llvm.sext %arg0 : i32 to i64
68-
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i64) -> i1
66+
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i32) -> i1
6967
!LLVMIRDialect: llvm.call @_FortranAioEndIoStatement(%{{.*}}) : (!llvm.ptr<i8>) -> i32
7068

7169
!LLVMIR: br label %omp_loop.cond
@@ -79,8 +77,7 @@ program wsloop_dynamic
7977
!LLVMIR: br label %omp.wsloop.region
8078
!LLVMIR: omp.wsloop.region: ; preds = %omp_loop.body
8179
!LLVMIR: %{{.*}} = call i8* @_FortranAioBeginExternalListOutput
82-
!LLVMIR: %{{.*}} = sext i32 %{{.*}} to i64
83-
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger64
80+
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger32
8481
!LLVMIR: %{{.*}} = call i32 @_FortranAioEndIoStatement
8582

8683
end do

flang/test/Lower/OpenMP/omp-wsloop.f90

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,12 @@ program wsloop
5050
do i=1, 9
5151
print*, i
5252
!FIRDialect: %[[RTBEGIN:.*]] = fir.call @_FortranAioBeginExternalListOutput
53-
!FIRDialect: %[[CONVERTED:.*]] = fir.convert %[[I]] : (i32) -> i64
54-
!FIRDialect: fir.call @_FortranAioOutputInteger64(%[[RTBEGIN]], %[[CONVERTED]]) : (!fir.ref<i8>, i64) -> i1
53+
!FIRDialect: fir.call @_FortranAioOutputInteger32(%[[RTBEGIN]], %[[I]]) : (!fir.ref<i8>, i32) -> i1
5554
!FIRDialect: fir.call @_FortranAioEndIoStatement(%[[RTBEGIN]]) : (!fir.ref<i8>) -> i32
5655

5756

5857
!LLVMIRDialect: llvm.call @_FortranAioBeginExternalListOutput(%{{.*}}, %{{.*}}, %{{.*}}) : (i32, !llvm.ptr<i8>, i32) -> !llvm.ptr<i8>
59-
!LLVMIRDialect: %{{.*}} = llvm.sext %[[I]] : i32 to i64
60-
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger64(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i64) -> i1
58+
!LLVMIRDialect: llvm.call @_FortranAioOutputInteger32(%{{.*}}, %{{.*}}) : (!llvm.ptr<i8>, i32) -> i1
6159
!LLVMIRDialect: llvm.call @_FortranAioEndIoStatement(%{{.*}}) : (!llvm.ptr<i8>) -> i32
6260

6361
!LLVMIR: br label %omp_loop.cond
@@ -73,8 +71,7 @@ program wsloop
7371
!LLVMIR: br label %omp.wsloop.region
7472
!LLVMIR: omp.wsloop.region: ; preds = %omp_loop.body
7573
!LLVMIR: %{{.*}} = call i8* @_FortranAioBeginExternalListOutput
76-
!LLVMIR: %{{.*}} = sext i32 %{{.*}} to i64
77-
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger64
74+
!LLVMIR: %{{.*}} = call i1 @_FortranAioOutputInteger32
7875
!LLVMIR: %{{.*}} = call i32 @_FortranAioEndIoStatement
7976

8077
end do

0 commit comments

Comments
 (0)