llvm-project/flang/runtime
Peter Klausler cd03e96f00 [flang] Add & use a better visit() (take 2)
Adds flang/include/flang/Common/log2-visit.h, which defines
a Fortran::common::visit() template function that is a drop-in
replacement for std::visit().  Modifies most use sites in
the front-end and runtime to use common::visit().

The C++ standard mandates that std::visit() have O(1) execution
time, which forces implementations to build dispatch tables.
This new common::visit() is O(log2 N) in the number of alternatives
in a variant<>, but that N tends to be small and so this change
produces a fairly significant improvement in compiler build
memory requirements, a 5-10% improvement in compiler build time,
and a small improvement in compiler execution time.

Building with -DFLANG_USE_STD_VISIT causes common::visit()
to be an alias for std::visit().

Calls to common::visit() with multiple variant arguments
are referred to std::visit(), pending further work.

This change is enabled only for GCC builds with GCC >= 9;
an earlier attempt (D122441) ran into bugs in some versions of
clang and was reverted rather than simply disabled; and it is
not well tested with MSVC. In non-GCC and older GCC builds,
common::visit() is simply an alias for std::visit().
2022-04-16 16:00:48 -07:00
..
CMakeLists.txt [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
ISO_Fortran_binding.cpp [flang] LBOUND() edge case: empty dimension 2022-03-14 11:16:09 -07:00
allocatable.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
assign.cpp [flang] Make subscript list argument a nullable pointer 2021-11-08 11:53:13 -08:00
buffer.cpp [flang] Remove *- C++ -* incantation from runtime .cpp files. NFC 2021-09-03 07:17:45 +00:00
buffer.h [flang] runtime perf: larger I/O buffer growth increments 2022-01-31 14:53:15 -08:00
character.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
command.cpp Fix invalid overflow check in flang 2022-03-30 16:47:33 +02:00
complex-reduction.c [flang] Change complex type define in runtime for clang-cl 2021-09-22 06:54:33 +00:00
complex-reduction.h [flang] Change complex type define in runtime for clang-cl 2021-09-22 06:54:33 +00:00
config.h.cmake
connection.cpp [flang] Honor RECL= in list-directed/namelist output 2022-03-02 12:07:18 -08:00
connection.h [flang] Always encode multi-byte output in UTF-8 2022-04-14 11:13:51 -07:00
copy.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
copy.h [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
derived-api.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
derived.cpp [flang] Fix extent computation in finalization 2022-03-09 09:01:02 -08:00
derived.h [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
descriptor-io.cpp [flang] Fix repeated "DT" editing 2022-01-21 17:22:51 -08:00
descriptor-io.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
descriptor.cpp [flang][runtime] Ensure PointerDeallocate actually deallocate pointers 2022-03-28 10:22:08 +02:00
dot-product.cpp [flang] Fix DOT_PRODUCT for logical 2021-10-22 15:56:20 -07:00
edit-input.cpp [flang][runtime] Don't skip input spaces when they are significant 2022-04-14 21:30:43 -07:00
edit-input.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
edit-output.cpp [flang] Make F0.1 output editing of zero edge case consistent 2022-04-14 15:31:47 -07:00
edit-output.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
environment.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
environment.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
extensions.cpp [flang] Add CALL FLUSH(n) legacy extension 2021-12-08 08:56:54 -08:00
extrema.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
file.cpp [flang] Debugging of ACCESS='STREAM' I/O (take 2) 2022-02-04 18:02:34 -08:00
file.h [flang] Debugging of ACCESS='STREAM' I/O (take 2) 2022-02-04 18:02:34 -08:00
findloc.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
format-implementation.h [flang] Extension: don't require commas between most edit descriptors in formats 2022-03-01 15:15:59 -08:00
format.cpp [flang] Remove *- C++ -* incantation from runtime .cpp files. NFC 2021-09-03 07:17:45 +00:00
format.h [flang] Do not print format tabs 2022-02-23 20:03:10 -08:00
inquiry.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
internal-unit.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
internal-unit.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
io-api.cpp [flang] add a static assert in CheckUnitNumberInRangeImpl 2022-04-11 09:32:52 +02:00
io-error.cpp [flang] Error recovery improvement in runtime (IOMSG=) 2022-03-18 17:24:32 -07:00
io-error.h [flang] Error recovery improvement in runtime (IOMSG=) 2022-03-18 17:24:32 -07:00
io-stmt.cpp [flang] Add & use a better visit() (take 2) 2022-04-16 16:00:48 -07:00
io-stmt.h [flang] Add & use a better visit() (take 2) 2022-04-16 16:00:48 -07:00
iostat.cpp [flang][runtime] Don't skip input spaces when they are significant 2022-04-14 21:30:43 -07:00
lock.h [flang] More Fortran runtime support for CHARACTER operations 2020-06-17 15:51:48 -07:00
main.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
matmul.cpp [flang] Speed common runtime cases of DOT_PRODUCT & MATMUL 2021-10-22 14:36:13 -07:00
memory.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
misc-intrinsic.cpp [flang] Return arrays in Transfer runtime with SIZE argument 2021-12-03 08:23:30 +01:00
namelist.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
namelist.h [flang] Support NAMELIST input of short arrays 2021-10-22 13:38:11 -07:00
numeric.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
pointer.cpp [flang][runtime] Ensure PointerDeallocate actually deallocate pointers 2022-03-28 10:22:08 +02:00
product.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
ragged.cpp [flang] Simplify RaggedArrayHeader and make it plain C struct 2021-12-09 22:28:06 +01:00
random.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
reduction-templates.h [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
reduction.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
stat.cpp [flang] Implement GET_ENVIRONMENT_VARIABLE(VALUE) 2021-11-01 09:19:20 +00:00
stat.h [flang] Implement GET_ENVIRONMENT_VARIABLE(VALUE) 2021-11-01 09:19:20 +00:00
stop.cpp [flang] Rename the runtime routine that reports a fatal user error 2022-02-01 09:01:50 -08:00
sum.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
support.cpp [flang] Define & implement a lowering support API IsContiguous() in runtime 2021-11-30 14:15:56 -08:00
terminator.cpp [flang] Remove *- C++ -* incantation from runtime .cpp files. NFC 2021-09-03 07:17:45 +00:00
terminator.h [flang] Define & implement a lowering support API IsContiguous() in runtime 2021-11-30 14:15:56 -08:00
time-intrinsic.cpp [flang] Use full result range for clock_gettime implementation of SYSTEM_CLOCK 2022-04-14 13:01:32 -07:00
tools.cpp [flang] runtime: Read environment variables directly 2021-10-28 07:49:30 +00:00
tools.h [flang] Allow more concurrently open NEWUNIT= values, with recycling 2022-02-28 16:13:22 -08:00
transformational.cpp [flang] Convert RUNTIME_CHECK to better error for user errors in transformational.cpp 2022-03-18 16:52:43 -07:00
type-code.cpp [flang] Hanlde COMPLEX 2/3/10 in runtime TypeCode(cat, kind) 2022-03-15 09:26:14 +01:00
type-info.cpp [flang] Allow for deferred-length character in EstablishDescriptor 2022-02-14 10:05:07 -08:00
type-info.h [flang] Allow for deferred-length character in EstablishDescriptor 2022-02-14 10:05:07 -08:00
unit-map.cpp [flang] Allow more concurrently open NEWUNIT= values, with recycling 2022-02-28 16:13:22 -08:00
unit-map.h [flang] Allow more concurrently open NEWUNIT= values, with recycling 2022-02-28 16:13:22 -08:00
unit.cpp [flang][runtime] Don't emit empty lines for bad writes 2022-04-15 20:32:32 -07:00
unit.h [flang] Respect left tab limit with Tn editing after ADVANCE='NO' 2022-04-13 21:45:53 -07:00
utf.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
utf.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00