Skip to content

Commit 880871c

Browse files
authored
Merge pull request #1012 from flang-compiler/jpr-date-and-time-lowering-update
DATE_AND_TIME update after runtime upstreaming
2 parents e94d0b5 + b12f68e commit 880871c

File tree

12 files changed

+361
-128
lines changed

12 files changed

+361
-128
lines changed

flang/include/flang/Lower/Runtime.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ mlir::Value genCpuTime(fir::FirOpBuilder &, mlir::Location);
7777
void genDateAndTime(fir::FirOpBuilder &, mlir::Location,
7878
llvm::Optional<fir::CharBoxValue> date,
7979
llvm::Optional<fir::CharBoxValue> time,
80-
llvm::Optional<fir::CharBoxValue> zone);
80+
llvm::Optional<fir::CharBoxValue> zone, mlir::Value values);
8181

8282
void genRandomInit(fir::FirOpBuilder &, mlir::Location, mlir::Value repeatable,
8383
mlir::Value imageDistinct);

flang/lib/Lower/IntrinsicCall.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ static constexpr IntrinsicHandler handlers[]{
672672
{{{"date", asAddr},
673673
{"time", asAddr},
674674
{"zone", asAddr},
675-
{"values", asAddr}}},
675+
{"values", asBox}}},
676676
/*isElemental=*/false},
677677
{"dble", &I::genConversion},
678678
{"dim", &I::genDim},
@@ -2075,13 +2075,14 @@ void IntrinsicLibrary::genDateAndTime(llvm::ArrayRef<fir::ExtendedValue> args) {
20752075
for (auto i = 0; i < 3; ++i)
20762076
if (auto *charBox = args[i].getCharBox())
20772077
charArgs[i] = *charBox;
2078-
// TODO: build descriptor for VALUES (also update runtime)
2079-
if (fir::getBase(args[3]))
2080-
mlir::emitError(loc, "TODO: lowering of DATE_AND_TIME VALUES argument not "
2081-
"yet implemented\n");
2078+
2079+
auto values = fir::getBase(args[3]);
2080+
if (!values)
2081+
values = builder.create<fir::AbsentOp>(
2082+
loc, fir::BoxType::get(builder.getNoneType()));
20822083

20832084
Fortran::lower::genDateAndTime(builder, loc, charArgs[0], charArgs[1],
2084-
charArgs[2]);
2085+
charArgs[2], values);
20852086
}
20862087

20872088
// DIM

flang/lib/Lower/Runtime.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
#include "flang/Lower/Runtime.h"
1010
#include "../../runtime/misc-intrinsic.h"
11-
#include "../runtime/clock.h"
1211
#include "../runtime/pointer.h"
1312
#include "../runtime/random.h"
1413
#include "../runtime/stop.h"
@@ -211,9 +210,11 @@ void Fortran::lower::genDateAndTime(fir::FirOpBuilder &builder,
211210
mlir::Location loc,
212211
llvm::Optional<fir::CharBoxValue> date,
213212
llvm::Optional<fir::CharBoxValue> time,
214-
llvm::Optional<fir::CharBoxValue> zone) {
213+
llvm::Optional<fir::CharBoxValue> zone,
214+
mlir::Value values) {
215215
auto callee =
216216
fir::runtime::getRuntimeFunc<mkRTKey(DateAndTime)>(loc, builder);
217+
auto funcTy = callee.getType();
217218
mlir::Type idxTy = builder.getIndexType();
218219
mlir::Value zero;
219220
auto splitArg = [&](llvm::Optional<fir::CharBoxValue> arg,
@@ -238,12 +239,14 @@ void Fortran::lower::genDateAndTime(fir::FirOpBuilder &builder,
238239
mlir::Value zoneLen;
239240
splitArg(zone, zoneBuffer, zoneLen);
240241

241-
llvm::SmallVector<mlir::Value> args{dateBuffer, timeBuffer, zoneBuffer,
242-
dateLen, timeLen, zoneLen};
243-
llvm::SmallVector<mlir::Value> operands;
244-
for (auto [fst, snd] : llvm::zip(args, callee.getType().getInputs()))
245-
operands.emplace_back(builder.createConvert(loc, snd, fst));
246-
builder.create<fir::CallOp>(loc, callee, operands);
242+
auto sourceFile = fir::factory::locationToFilename(builder, loc);
243+
auto sourceLine =
244+
fir::factory::locationToLineNo(builder, loc, funcTy.getInput(7));
245+
246+
auto args = fir::runtime::createArguments(
247+
builder, loc, funcTy, dateBuffer, dateLen, timeBuffer, timeLen,
248+
zoneBuffer, zoneLen, sourceFile, sourceLine, values);
249+
builder.create<fir::CallOp>(loc, callee, args);
247250
}
248251

249252
void Fortran::lower::genRandomInit(fir::FirOpBuilder &builder,

flang/runtime/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ add_flang_library(FortranRuntime PARTIAL_SOURCES_INTENDED
2929
allocatable.cpp
3030
assign.cpp
3131
buffer.cpp
32-
clock.cpp
3332
complex-reduction.c
3433
copy.cpp
3534
character.cpp

flang/runtime/clock.cpp

Lines changed: 0 additions & 71 deletions
This file was deleted.

flang/runtime/clock.h

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)