[flang-commits] [PATCH] D122441: [flang] Add & use a better visit()

Peter Klausler via Phabricator via flang-commits flang-commits at lists.llvm.org
Thu Mar 24 15:54:52 PDT 2022


klausler created this revision.
klausler added a reviewer: jeanPerier.
klausler added a project: Flang.
Herald added a subscriber: jdoerfert.
Herald added a reviewer: sscalpone.
Herald added a project: All.
klausler requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added a subscriber: sstefan1.

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.


https://reviews.llvm.org/D122441

Files:
  flang/include/flang/Common/idioms.h
  flang/include/flang/Common/template.h
  flang/include/flang/Common/unwrap.h
  flang/include/flang/Common/visit.h
  flang/include/flang/Evaluate/expression.h
  flang/include/flang/Evaluate/fold-designator.h
  flang/include/flang/Evaluate/initial-image.h
  flang/include/flang/Evaluate/shape.h
  flang/include/flang/Evaluate/tools.h
  flang/include/flang/Evaluate/traverse.h
  flang/include/flang/Parser/parse-tree-visitor.h
  flang/include/flang/Parser/tools.h
  flang/include/flang/Semantics/expression.h
  flang/include/flang/Semantics/symbol.h
  flang/include/flang/Semantics/tools.h
  flang/lib/Evaluate/call.cpp
  flang/lib/Evaluate/characteristics.cpp
  flang/lib/Evaluate/check-expression.cpp
  flang/lib/Evaluate/expression.cpp
  flang/lib/Evaluate/fold-designator.cpp
  flang/lib/Evaluate/fold-implementation.h
  flang/lib/Evaluate/fold-integer.cpp
  flang/lib/Evaluate/fold-logical.cpp
  flang/lib/Evaluate/fold-real.cpp
  flang/lib/Evaluate/fold.cpp
  flang/lib/Evaluate/formatting.cpp
  flang/lib/Evaluate/shape.cpp
  flang/lib/Evaluate/tools.cpp
  flang/lib/Evaluate/type.cpp
  flang/lib/Evaluate/variable.cpp
  flang/lib/Parser/message.cpp
  flang/lib/Parser/parse-tree.cpp
  flang/lib/Parser/provenance.cpp
  flang/lib/Parser/tools.cpp
  flang/lib/Parser/unparse.cpp
  flang/lib/Semantics/canonicalize-do.cpp
  flang/lib/Semantics/check-allocate.cpp
  flang/lib/Semantics/check-call.cpp
  flang/lib/Semantics/check-case.cpp
  flang/lib/Semantics/check-data.cpp
  flang/lib/Semantics/check-deallocate.cpp
  flang/lib/Semantics/check-declarations.cpp
  flang/lib/Semantics/check-do-forall.cpp
  flang/lib/Semantics/check-io.cpp
  flang/lib/Semantics/check-nullify.cpp
  flang/lib/Semantics/check-omp-structure.cpp
  flang/lib/Semantics/check-select-rank.cpp
  flang/lib/Semantics/check-select-type.cpp
  flang/lib/Semantics/data-to-inits.cpp
  flang/lib/Semantics/expression.cpp
  flang/lib/Semantics/mod-file.cpp
  flang/lib/Semantics/pointer-assignment.cpp
  flang/lib/Semantics/program-tree.cpp
  flang/lib/Semantics/resolve-directives.cpp
  flang/lib/Semantics/resolve-names-utils.cpp
  flang/lib/Semantics/resolve-names.cpp
  flang/lib/Semantics/rewrite-parse-tree.cpp
  flang/lib/Semantics/runtime-type-info.cpp
  flang/lib/Semantics/symbol.cpp
  flang/lib/Semantics/tools.cpp
  flang/runtime/io-stmt.cpp
  flang/runtime/io-stmt.h

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D122441.418067.patch
Type: text/x-patch
Size: 225709 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20220324/880510f9/attachment-0001.bin>


More information about the flang-commits mailing list