| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
[Flang] Add -fconvert option to swap endianness for unformatted files. To accomplish this, this patch creates an optional list of environment variable default values to be set by the runtime to allow directly using the existing runtime implementation of FORT_CONVERT for I/O conversions. | 3 年前 | |
[AMDGPU] Add targets gfx1150 and gfx1151 This is the target definition only. Currently they are treated the same as GFX 11.0.x. Differential Revision: https://reviews.llvm.org/D155429 | 3 年前 | |
[flang][runtime] Fixes for element size calculation. BytesFor() used to return KIND for the size, which is not always correct, so I changed it to return the size of the actual CppType corresponding to the given category and kind. MinElemLen() used to calculate size incorrectly (e.g. CFI_type_extended_double was sized 10, whereas it may occupy more bytes on a target), so I changed it to call BytesFor(). Additional changes were needed to resolve new failures for transformational intrinsics. These intrinsics used to work for not fully supported data types (e.g. REAL(3)), but now stopped working because CppType cannot be computed for those categories/kinds. The solution is to use known element size from the source argument(s) for establishing the destination descriptor - the element size is all that is needed for transformational intrinsics to keep working. Note that this does not help cases, where runtime still has to compute the element size, e.g. when it creates descriptors for components of derived types. If the component has unsupported data type, BytesFor() will still fail. So these cases require adding support for the missing types. New regression unit test in Runtime/Transformational.cpp demonstrates the case that will start working properly with this commit. | 3 年前 | |
[flang][runtime] Fixes for element size calculation. BytesFor() used to return KIND for the size, which is not always correct, so I changed it to return the size of the actual CppType corresponding to the given category and kind. MinElemLen() used to calculate size incorrectly (e.g. CFI_type_extended_double was sized 10, whereas it may occupy more bytes on a target), so I changed it to call BytesFor(). Additional changes were needed to resolve new failures for transformational intrinsics. These intrinsics used to work for not fully supported data types (e.g. REAL(3)), but now stopped working because CppType cannot be computed for those categories/kinds. The solution is to use known element size from the source argument(s) for establishing the destination descriptor - the element size is all that is needed for transformational intrinsics to keep working. Note that this does not help cases, where runtime still has to compute the element size, e.g. when it creates descriptors for components of derived types. If the component has unsupported data type, BytesFor() will still fail. So these cases require adding support for the missing types. New regression unit test in Runtime/Transformational.cpp demonstrates the case that will start working properly with this commit. | 3 年前 | |
[flang] Add AllocatableInit functions for use in allocate lowering AllocatableInitIntrinsic, AllocatableInitCharacter and AllocatableInitDerived are meant to be used to initialize a descriptor when it is instantiated and not to be used multiple times in a scope. Add AllocatableInitDerivedForAllocate, AllocatableInitCharacterForAllocate and AllocatableInitDerivedForAllocate to be used for the allocation in allocate statement. These new functions are meant to be used on an initialized descriptor and will return directly if the descriptor is allocated so the error handling is done by the call to AllocatableAllocate. Reviewed By: PeteSteinfeld Differential Revision: https://reviews.llvm.org/D146290 | 3 年前 | |
[flang][runtime] Add API to help with the difficult array constructor cases This runtime API can be used to lower any flavor of array constructors, but is mainly intended to be used with: - array constructors for which the extent or length parameters cannot be computed without lowering some ac-value or ac-implied-do-control that cannot be pre-evaluated. - array constructors of a derived type with allocatable component where copy is not trivial or PDTS. Example of use cases: - [((i+j,i=1, ifoo()), j=1,n)] where ifoo() is not pure. - [return_allocatable_array(), return_allocatable_array()] Differential Revision: https://reviews.llvm.org/D144411 | 3 年前 | |
[flang][runtime] Handle aliasing in Assign() Detect and handle LHS/RHS aliasing when effecting intrinsic assignments via the Assign() runtime function. Also: don't apply special handling for allocatable LHS when calling a user-defined type-bound ASSIGNMENT(=) generic procedure for a polymorphic type, and refactor some code into utility functions to make Assign() more comprehensible. Differential Revision: https://reviews.llvm.org/D144026 | 3 年前 | |
[flang][hlfir] Do not dereference unallocated entities in structure constructor. Component-by-component assignment must be able to handle unallocated allocatable values in structure constructor. F2018 7.5.10 p. 7 states that the component must have unallocated status as a result of such construction. The structure constructor temporary is initialized such that all the allocatable components are unallocated, so we just need to make sure not to do the component assignment if RHS is deallocated. Depends on D152482 (the same LIT test is affected) Reviewed By: jeanPerier, tblah Differential Revision: https://reviews.llvm.org/D152493 | 3 年前 | |
[flang] Remove *- C++ -* incantation from runtime .cpp files. NFC We should only need to spell the language out in .h files. Differential Revision: https://reviews.llvm.org/D109138 | 4 年前 | |
[flang][runtime] Keep frame buffer in sync with file when truncating When the I/O runtime is truncating an external file due to an implied ENDFILE or explicit ENDFILE, ensure that the unit's frame buffer for the file discards any data that have become obsolete. This bug caused trouble with ACCESS='STREAM' I/O using POS= on a WRITE, but it may have not been limited to that scenario. Differential Revision: https://reviews.llvm.org/D129673 | 3 年前 | |
[flang][runtime] ensure character compares to blank are unsigned CompareToBlankPadding was doing signed compare on architecture where char is signed. This caused 'abc'//char(128) > 'abc' to evaluate to false at runtime instead of true. Differential Revision: https://reviews.llvm.org/D133693 | 3 年前 | |
[flang] Allow runtime build with AVOID_NATIVE_INT128_T=1 This patch enables the Fortran runtime support library to be built without native 128-bit integer support in the C++ compiler. Experimental: do not merge yet. Differential Revision: https://reviews.llvm.org/D154660 (cherry picked from commit 1c35c1a73907a95ce54b5a0edca513591e2bc069) | 2 年前 | |
[flang] Add cpowi function to runtime and use instead of pgmath This patch adds a cpowi function to the flang runtime, and switches to using that function instead of pgmath for complex number to integer power operations. Differential Revision: https://reviews.llvm.org/D134889 | 3 年前 | |
[flang][runtime] Use __float128 where possible & needed in runtime On targets with __float128 available and distinct from long double, use it to support more kind=16 entry points. This affects mostly x86-64 targets. This means that more runtime entry points are defined for lowering to call. Delete Common/long-double.h and its LONG_DOUBLE macro in favor of testing the standard macro LDBL_MANT_DIG. Differential Revision: https://reviews.llvm.org/D127025 | 4 年前 | |
[flang] Added missing _Complex for COMPLEX(10) C reduction API. I noticed _Complex was missing for the long double case. I might be missing something, but it looks like the compiler does not call the C wrappers directly. Do we need to keep the complex-reduction.[ch] at all? Differential Revision: https://reviews.llvm.org/D148479 | 3 年前 | |
[flang] Support platforms without strerror_r Original-commit: flang-compiler/f18@0575b54cc79110ae03f73b136e704f6313e2d63f Reviewed-on: https://github.com/flang-compiler/f18/pull/1068 | 6 年前 | |
[flang] Honor RECL= in list-directed/namelist output Advancement to new output lines was taking fixed-sized direct-access and internal character array element lengths into account, but not RECL= settings from OPEN statements. Differential Revision: https://reviews.llvm.org/D120837 | 4 年前 | |
[flang][runtime] Support DT edit descriptor in result of READ(SIZE=) When a formatted I/O READ statement processes a DT edit descriptor to call a user-defined I/O subroutine to read a derived type data item, all of the characters that that subroutine reads via child I/O count as charecters read by an edit descriptor and should accumulate in the result returned by a SIZE= item in the original READ statement's control list. Differential Revision: https://reviews.llvm.org/D144234 | 3 年前 | |
[flang] Move runtime API headers to flang/include/flang/Runtime Move the closure of the subset of flang/runtime/*.h header files that are referenced by source files outside flang/runtime (apart from unit tests) into a new directory (flang/include/flang/Runtime) so that relative include paths into ../runtime need not be used. flang/runtime/pgmath.h.inc is moved to flang/include/flang/Evaluate; it's not used by the runtime. Differential Revision: https://reviews.llvm.org/D109107 | 4 年前 | |
[RFC][flang] Experimental device build of Flang runtime. These are initial changes to experiment with building the Fortran runtime as a CUDA or OpenMP target offload library. The initial patch defines a set of macros that have to be used consistently in Flang runtime source code so that it can be built for different offload devices using different programming models (CUDA, HIP, OpenMP target offload). Currently supported modes are: * CUDA: Flang runtime may be built as a fatlib for the host and a set of CUDA architectures specified during the build. The packaging of the device code is done by the CUDA toolchain and may differ from toolchan to toolchain. * OpenMP offload: - host_device mode: Flang runtime may be built as a fatlib for the host and a set of OpenMP offload architectures. The packaging of the device code is done by the OpenMP offload compiler and may differ from compiler to compiler. OpenMP offload 'nohost' mode is a TODO to match the build setup of libomptarget/DeviceRTL. Flang runtime will be built as LLVM Bitcode library using Clang/LLVM toolchain. The host part of the library will be "empty", so there will be two distributable object: the host Flang runtime and dummy host library with device Flang runtime pieces packaged using clang-offload-packager and clang. In all supported modes, enabling parts of Flang runtime for the device compilation can be done iteratively to make the patches observable. Note that at any point in time the resulting library may have unresolved references to not yet enabled parts of Flang runtime. Example cmake/make commands for building with Clang for NVPTX target: cmake \ -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \ -DCMAKE_CUDA_ARCHITECTURES=80 \ -DCMAKE_C_COMPILER=/clang_nvptx/bin/clang \ -DCMAKE_CXX_COMPILER=/clang_nvptx/bin/clang++ \ -DCMAKE_CUDA_COMPILER=/clang_nvptx/bin/clang \ /llvm-project/flang/runtime/ make -j FortranRuntime Example cmake/make commands for building with Clang OpenMP offload: cmake \ -DFLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD="host_device" \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DFLANG_OMP_DEVICE_ARCHITECTURES="sm_80" \ ../flang/runtime/ make -j FortranRuntime Differential Revision: https://reviews.llvm.org/D151173 | 3 年前 | |
[flang] Fixed managing copy-in/copy-out temps. There are several observations regarding the copy-in/copy-out: * Actual argument associated with INTENT(OUT) dummy argument that requires finalization (7.5.6.3 p. 7) may be read by the finalization function, so a copy-in is required. * A temporary created for the copy-in/copy-out must be destroyed without finalization after the call (or after the corresponding copy-out), otherwise, memory leaks may occur. * The copy-out assignment must not perform finalization for the LHS. * The copy-out assignment from the temporary to the actual argument may or may not need to initialize the LHS. This change-set introduces new runtime methods: CopyOutAssign and DestroyWithoutFinalization. They are called by the compiler generated code to match the behavior described above. Reviewed By: jeanPerier Differential Revision: https://reviews.llvm.org/D151135 | 3 年前 | |
[flang][runtime] Initialize uninitialized pointer components Pointer components without default initialization pose some difficult (or impossible) problems when they appear as right-hand side targets in pointer assignment statements; they may contain garbage or stale data that looks enough like a valid descriptor to cause a crash. Solve the problem by avoiding it -- ensure that pointers' descriptors are at least minimally established. Differential Revision: https://reviews.llvm.org/D149979 | 3 年前 | |
[flang] Move runtime API headers to flang/include/flang/Runtime Move the closure of the subset of flang/runtime/*.h header files that are referenced by source files outside flang/runtime (apart from unit tests) into a new directory (flang/include/flang/Runtime) so that relative include paths into ../runtime need not be used. flang/runtime/pgmath.h.inc is moved to flang/include/flang/Evaluate; it's not used by the runtime. Differential Revision: https://reviews.llvm.org/D109107 | 4 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang][runtime] Fixes for element size calculation. BytesFor() used to return KIND for the size, which is not always correct, so I changed it to return the size of the actual CppType corresponding to the given category and kind. MinElemLen() used to calculate size incorrectly (e.g. CFI_type_extended_double was sized 10, whereas it may occupy more bytes on a target), so I changed it to call BytesFor(). Additional changes were needed to resolve new failures for transformational intrinsics. These intrinsics used to work for not fully supported data types (e.g. REAL(3)), but now stopped working because CppType cannot be computed for those categories/kinds. The solution is to use known element size from the source argument(s) for establishing the destination descriptor - the element size is all that is needed for transformational intrinsics to keep working. Note that this does not help cases, where runtime still has to compute the element size, e.g. when it creates descriptors for components of derived types. If the component has unsupported data type, BytesFor() will still fail. So these cases require adding support for the missing types. New regression unit test in Runtime/Transformational.cpp demonstrates the case that will start working properly with this commit. | 3 年前 | |
[flang][runtime] Enable real/complex kind 10 and 16 variants of dot_product. HasCppTypeFor<> used to evaluate to false always, so kind 10 and 16 variants of dot_product were not instantiated even though the host supported 80- and 128-bit real and complex data types. In addition, HAS_FLOAT128 was not enabling complex kind=16 variant of dot_product. This is fixed now. Note that the change for HasCppTypeFor<> may also affect other functions such as matmul, i.e. kind 10 and 16 variants of them may become available now (depending on the build host). Differential Revision: https://reviews.llvm.org/D133051 | 3 年前 | |
[flang][runtime] Don't do partial data transfer on short character read with ADVANCE='NO', PAD='NO' When a non-advancing formatted READ can't completely fill a CHARACTER input item with data, and PAD='NO', don't modify the variable at all. This matters when the error is recoverable. Fixes https://github.com/llvm/llvm-project/issues/63772 Differential Revision: https://reviews.llvm.org/D155000 | 3 年前 | |
[flang] Initial UTF-8 support in runtime I/O Implements UTF-8 encoding and decoding for external units with OPEN(ENCODING='UTF-8'). This encoding applies to default CHARACTER values that are not 7-bit ASCII as well as to the wide CHARACTER kinds 2 and 4. Basic testing is in place via direct calls to the runtime I/O APIs, but serious checkout awaits lowering support of the wide CHARACTER kinds. Differential Revision: https://reviews.llvm.org/D122038 | 4 年前 | |
[flang] Detect output field width overflow for Inf/NaN The output editing code paths for F and E/D output that handle IEEE-754 infinities and NaNs fail to check for overflow of the output field, which should cause the field to be filled with asterisks instead. Catch these cases. Differential Revision: https://reviews.llvm.org/D151738 | 3 年前 | |
[flang][runtime] Detect overflow of fixed-sized exponent output field When Ew.dEe or Gw.dEe output has an exponent requiring more than 'e' digits, the whole output field must overflow to asterisks. The runtime was detecting short fields and padding them with zeroes, but not overflow. Differential Revision: https://reviews.llvm.org/D127428 | 4 年前 | |
[flang][runtime] Reset the left tab limit when flushing output When flushing output to a non-positionable tty or socket file, reset the left tab limit. Otherwise, non-advancing output to that file will contain an increasing amount of leading spaces in each flush. Also, detect newline characters in stream output, and treat them as record advancement. Differential Revision: https://reviews.llvm.org/D148157 | 3 年前 | |
[Flang] Add -fconvert option to swap endianness for unformatted files. To accomplish this, this patch creates an optional list of environment variable default values to be set by the runtime to allow directly using the existing runtime implementation of FORT_CONVERT for I/O conversions. | 3 年前 | |
[Flang] Add -fconvert option to swap endianness for unformatted files. To accomplish this, this patch creates an optional list of environment variable default values to be set by the runtime to allow directly using the existing runtime implementation of FORT_CONVERT for I/O conversions. | 3 年前 | |
[Flang] Add -fconvert option to swap endianness for unformatted files. To accomplish this, this patch creates an optional list of environment variable default values to be set by the runtime to allow directly using the existing runtime implementation of FORT_CONVERT for I/O conversions. | 3 年前 | |
[flang] Support GNU extensions IARGC and GETARG in runtime The GNU extension intrinsic IARGC is equivalent to COMMAND_ARGUMENT_COUNT, and the GETARG is similar to GET_COMMAND_ARGUMENT, but with less arguments. Reuse the runtime of COMMAND_ARGUMENT_COUNT and GET_COMMAND_ARGUMENT for IARGC and GETARG. Reviewed By: klausler Differential Revision: https://reviews.llvm.org/D133558 | 3 年前 | |
[flang][runtime] Fix NORM2([negative, ...]) NORM2 is broken for arrays that start with a negative number because it sets the initial running max_ value to that number rather than to its absolute value. Differential Revision: https://reviews.llvm.org/D155976 | 2 年前 | |
Revert "[flang][runtime] Support all non-ASCII characters in temporary path on Windows" This reverts commit fd0d846633b05e1d0072754aea7f3985be36c0dc. It seems to have broken various flang unit tests on AArch64 Windows platform. https://lab.llvm.org/buildbot/#/builders/65/builds/9856 https://lab.llvm.org/buildbot/#/builders/120/builds/4883 Differential Revision: https://reviews.llvm.org/D151571 | 3 年前 | |
[flang][runtime] Catch OPEN of connected file Diagnose OPEN(FILE=f) when f is already connected by the same name to a distinct external I/O unit. Differential Revision: https://reviews.llvm.org/D127035 | 4 年前 | |
[flang][runtime] Use __float128 where possible & needed in runtime On targets with __float128 available and distinct from long double, use it to support more kind=16 entry points. This affects mostly x86-64 targets. This means that more runtime entry points are defined for lowering to call. Delete Common/long-double.h and its LONG_DOUBLE macro in favor of testing the standard macro LDBL_MANT_DIG. Differential Revision: https://reviews.llvm.org/D127025 | 4 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang] Remove *- C++ -* incantation from runtime .cpp files. NFC We should only need to spell the language out in .h files. Differential Revision: https://reviews.llvm.org/D109138 | 4 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[RFC][flang] Experimental device build of Flang runtime. These are initial changes to experiment with building the Fortran runtime as a CUDA or OpenMP target offload library. The initial patch defines a set of macros that have to be used consistently in Flang runtime source code so that it can be built for different offload devices using different programming models (CUDA, HIP, OpenMP target offload). Currently supported modes are: * CUDA: Flang runtime may be built as a fatlib for the host and a set of CUDA architectures specified during the build. The packaging of the device code is done by the CUDA toolchain and may differ from toolchan to toolchain. * OpenMP offload: - host_device mode: Flang runtime may be built as a fatlib for the host and a set of OpenMP offload architectures. The packaging of the device code is done by the OpenMP offload compiler and may differ from compiler to compiler. OpenMP offload 'nohost' mode is a TODO to match the build setup of libomptarget/DeviceRTL. Flang runtime will be built as LLVM Bitcode library using Clang/LLVM toolchain. The host part of the library will be "empty", so there will be two distributable object: the host Flang runtime and dummy host library with device Flang runtime pieces packaged using clang-offload-packager and clang. In all supported modes, enabling parts of Flang runtime for the device compilation can be done iteratively to make the patches observable. Note that at any point in time the resulting library may have unresolved references to not yet enabled parts of Flang runtime. Example cmake/make commands for building with Clang for NVPTX target: cmake \ -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \ -DCMAKE_CUDA_ARCHITECTURES=80 \ -DCMAKE_C_COMPILER=/clang_nvptx/bin/clang \ -DCMAKE_CXX_COMPILER=/clang_nvptx/bin/clang++ \ -DCMAKE_CUDA_COMPILER=/clang_nvptx/bin/clang \ /llvm-project/flang/runtime/ make -j FortranRuntime Example cmake/make commands for building with Clang OpenMP offload: cmake \ -DFLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD="host_device" \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DFLANG_OMP_DEVICE_ARCHITECTURES="sm_80" \ ../flang/runtime/ make -j FortranRuntime Differential Revision: https://reviews.llvm.org/D151173 | 3 年前 | |
[flang] Improve runtime crash messages Where possible, I added additional information to the messages to help programmers figure out what went wrong. I also removed all uses of the word "bad" from the messages since (to me) that implies a moral judgement rather than a programming error. I replaced it with either "invalid" or "unsupported" where appropriate. Differential Revision: https://reviews.llvm.org/D121493 | 4 年前 | |
[flang][runtime] Support DT edit descriptor in result of READ(SIZE=) When a formatted I/O READ statement processes a DT edit descriptor to call a user-defined I/O subroutine to read a derived type data item, all of the characters that that subroutine reads via child I/O count as charecters read by an edit descriptor and should accumulate in the result returned by a SIZE= item in the original READ statement's control list. Differential Revision: https://reviews.llvm.org/D144234 | 3 年前 | |
[flang][runtime] Support DT edit descriptor in result of READ(SIZE=) When a formatted I/O READ statement processes a DT edit descriptor to call a user-defined I/O subroutine to read a derived type data item, all of the characters that that subroutine reads via child I/O count as charecters read by an edit descriptor and should accumulate in the result returned by a SIZE= item in the original READ statement's control list. Differential Revision: https://reviews.llvm.org/D144234 | 3 年前 | |
[flang] Allow runtime build with AVOID_NATIVE_INT128_T=1 This patch enables the Fortran runtime support library to be built without native 128-bit integer support in the C++ compiler. Experimental: do not merge yet. Differential Revision: https://reviews.llvm.org/D154660 (cherry picked from commit 1c35c1a73907a95ce54b5a0edca513591e2bc069) | 2 年前 | |
Remove HAVE_STRERROR Most systems support strerror_r. For the remaining systems (e.g. MSVC) strerror_s and strerror can be used as fallbacks. We don't have a supported operating system/compiler that doesn't provide strerror. Close https://github.com/llvm/llvm-project/issues/62804 https://github.com/flang-compiler/f18/pull/1068 added a fallback when strerror is unavailable, but I think the code path is dead. Reviewed By: serge-sans-paille, vzakhari Differential Revision: https://reviews.llvm.org/D151718 | 3 年前 | |
[flang][runtime] Clean up asynchronous I/O APIs Now that the requirements and implementation of asynchronous I/O are better understood, adjust their I/O runtime APIs. In particular: 1) Remove the BeginAsynchronousOutput/Input APIs; they're not needed, since any data transfer statement might have ASYNCHRONOUS= and (if ASYNCHRONOUS='YES') ID= control list specifiers that need to at least be checked. 2) Add implementations for BeginWait(All) to check for the error case of a bad unit number and nonzero ID=. 3) Rearrange and comment SetAsynchronous so that it's clear that it can be called for READ/WRITE as well as for OPEN. The implementation remains completely synchronous, but should be conforming. Where opportunities make sense for true asynchronous implementations of some big block transfers without SIZE= in the future, we'll need to add a GetAsynchronousId API to capture ID= on a READ or WRITE; add sourceFile and sourceLine arguments to BeginWait(All) for good error reporting; track pending operations in unit.h; and add code to force synchronization to non-asynchronous I/O operations. Lowering should call SetAsynchronous when ASYNCHRONOUS= appears as a control list specifier. It should also set ID=x variables to 0 until such time as we support asynchronous operations, if ever. This patch only removes the removed APIs from lowering. Differential Revision: https://reviews.llvm.org/D126143 | 4 年前 | |
[flang][runtime] Detect NEWUNIT= without FILE= or STATUS='SCRATCH' It is an error to open a new unit with OPEN(NEWUNIT=) and have neither a file name nor a scratch status. Catch it, and report a new error code. Differential Revision: https://reviews.llvm.org/D155967 | 2 年前 | |
[flang][runtime] Detect NEWUNIT= without FILE= or STATUS='SCRATCH' It is an error to open a new unit with OPEN(NEWUNIT=) and have neither a file name nor a scratch status. Catch it, and report a new error code. Differential Revision: https://reviews.llvm.org/D155967 | 2 年前 | |
[flang][runtime] Detect NEWUNIT= without FILE= or STATUS='SCRATCH' It is an error to open a new unit with OPEN(NEWUNIT=) and have neither a file name nor a scratch status. Catch it, and report a new error code. Differential Revision: https://reviews.llvm.org/D155967 | 2 年前 | |
[flang] Restore old unit locking behavior Rework the recursive I/O error check on I/O units so that threads again hold a lock on a unit throughout an I/O statement. Add an API to the runtime's Lock class implementation for pthreads to allow detection of solf-deadlock without depending on EDEADLK or recursive mutexes. This should fix I/O from OpenMP threads. Differential Revision: https://reviews.llvm.org/D139477 | 3 年前 | |
[Flang] Add -fconvert option to swap endianness for unformatted files. To accomplish this, this patch creates an optional list of environment variable default values to be set by the runtime to allow directly using the existing runtime implementation of FORT_CONVERT for I/O conversions. | 3 年前 | |
[NFC][flang] Distinguish MATMUL and MATMUL-TRANSPOSE printouts. When MatmulTranpose reports incorrect shapes of the arguments it cannot represent itself as MATMUL, because the reading of the first argument's shape will be confusing. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D155911 | 2 年前 | |
[flang][runtime] Improve error message for incompatible MATMUL arguments Print the full shapes of both argument when the dimensions that must match do not do so. Differential Revision: https://reviews.llvm.org/D132153 | 3 年前 | |
[flang] Move runtime API headers to flang/include/flang/Runtime Move the closure of the subset of flang/runtime/*.h header files that are referenced by source files outside flang/runtime (apart from unit tests) into a new directory (flang/include/flang/Runtime) so that relative include paths into ../runtime need not be used. flang/runtime/pgmath.h.inc is moved to flang/include/flang/Evaluate; it's not used by the runtime. Differential Revision: https://reviews.llvm.org/D109107 | 4 年前 | |
[flang] Error detection/avoidance for TRANSFER with empty MOLD= type When MOLD= is an array and there is no SIZE= in a call to TRANSFER(), the size of an element of the MOLD= is used as the denominator in a division to establish the extent of the vector result. When the total storage size of the SOURCE= is known to be zero, the result is empty and no division is needed. To avoid a division by zero at runtime, we need to check for a zero-sized MOLD= element type when the storage size of SOURCE= is nonzero and there is no SIZE=. Further, in the compilation-time rewriting of calls to SHAPE(TRANSFER(...)) and SIZE(TRANSFER(...)) for constant folding and simplification purposes, we can't replace the call with an arithmetic element count expression when the storage size of SOURCE= is not known to be zero and the element size of MOLD= is not known to be nonzero at compilation time. These changes mostly affect tests using a MOLD= argument that is an assumed-length character. Differential Revision: https://reviews.llvm.org/D129680 | 3 年前 | |
[flang] Non-type-bound defined IO lowering Generate supporting data structures and calls to new runtime IO functions for defined IO that accesses non-type-bound procedures, such as wft in: module m1 type t integer n end type interface write(formatted) module procedure wft end interface contains subroutine wft(dtv, unit, iotype, v_list, iostat, iomsg) class(t), intent(in) :: dtv integer, intent(in) :: unit character(*), intent(in) :: iotype integer, intent(in) :: v_list(:) integer, intent(out) :: iostat character(*), intent(inout) :: iomsg iostat = 0 write(unit,*,iostat=iostat,iomsg=iomsg) 'wft was called: ', dtv%n end subroutine end module module m2 contains subroutine test1 use m1 print *, 'test1, should call wft: ', t(1) end subroutine subroutine test2 use m1, only: t print *, 'test2, should not call wft: ', t(2) end subroutine end module use m1 use m2 call test1 call test2 print *, 'main, should call wft: ', t(3) end | 3 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang] Non-type-bound defined IO lowering Generate supporting data structures and calls to new runtime IO functions for defined IO that accesses non-type-bound procedures, such as wft in: module m1 type t integer n end type interface write(formatted) module procedure wft end interface contains subroutine wft(dtv, unit, iotype, v_list, iostat, iomsg) class(t), intent(in) :: dtv integer, intent(in) :: unit character(*), intent(in) :: iotype integer, intent(in) :: v_list(:) integer, intent(out) :: iostat character(*), intent(inout) :: iomsg iostat = 0 write(unit,*,iostat=iostat,iomsg=iomsg) 'wft was called: ', dtv%n end subroutine end module module m2 contains subroutine test1 use m1 print *, 'test1, should call wft: ', t(1) end subroutine subroutine test2 use m1, only: t print *, 'test2, should not call wft: ', t(2) end subroutine end module use m1 use m2 call test1 call test2 print *, 'main, should call wft: ', t(3) end | 3 年前 | |
[flang] Allow runtime build with AVOID_NATIVE_INT128_T=1 This patch enables the Fortran runtime support library to be built without native 128-bit integer support in the C++ compiler. Experimental: do not merge yet. Differential Revision: https://reviews.llvm.org/D154660 (cherry picked from commit 1c35c1a73907a95ce54b5a0edca513591e2bc069) | 2 年前 | |
[flang] Only apply PointerIsAssociatedWith fix for derived-type Only apply the change made in D145604 for derived-type. zero-sized character for example are supposed to give a false result Reviewed By: PeteSteinfeld Differential Revision: https://reviews.llvm.org/D145675 | 3 年前 | |
[flang][runtime] Use __float128 where possible & needed in runtime On targets with __float128 available and distinct from long double, use it to support more kind=16 entry points. This affects mostly x86-64 targets. This means that more runtime entry points are defined for lowering to call. Delete Common/long-double.h and its LONG_DOUBLE macro in favor of testing the standard macro LDBL_MANT_DIG. Differential Revision: https://reviews.llvm.org/D127025 | 4 年前 | |
[flang] Simplify RaggedArrayHeader and make it plain C struct - Join indirection and rank into a single value flags - Make the struct a plain C struct. Reviewed By: schweitz Differential Revision: https://reviews.llvm.org/D115464 | 4 年前 | |
[flang] Intrinsic RANDOM_SEED calls with dynamically absent/present arguments | 3 年前 | |
[flang] Lower F08 FINDLOC intrinsic The implementation follows the patterns established by the lowering of other similar intrinsics. In addition to the code for lowering, the DoTotalReduction template had to be fixed to correctly break when signaled to do so by the accumulator function. Differential Revision: https://reviews.llvm.org/D138140 | 3 年前 | |
[flang][runtime] Fixes for element size calculation. BytesFor() used to return KIND for the size, which is not always correct, so I changed it to return the size of the actual CppType corresponding to the given category and kind. MinElemLen() used to calculate size incorrectly (e.g. CFI_type_extended_double was sized 10, whereas it may occupy more bytes on a target), so I changed it to call BytesFor(). Additional changes were needed to resolve new failures for transformational intrinsics. These intrinsics used to work for not fully supported data types (e.g. REAL(3)), but now stopped working because CppType cannot be computed for those categories/kinds. The solution is to use known element size from the source argument(s) for establishing the destination descriptor - the element size is all that is needed for transformational intrinsics to keep working. Note that this does not help cases, where runtime still has to compute the element size, e.g. when it creates descriptors for components of derived types. If the component has unsupported data type, BytesFor() will still fail. So these cases require adding support for the missing types. New regression unit test in Runtime/Transformational.cpp demonstrates the case that will start working properly with this commit. | 3 年前 | |
[flang] Improve error message for move_alloc This patch improves the error message when MOVE_ALLOC is passed the same allocated allocatable as both the to and from arguments. Differential Revision: https://reviews.llvm.org/D142899 | 3 年前 | |
[flang] Improve error message for move_alloc This patch improves the error message when MOVE_ALLOC is passed the same allocated allocatable as both the to and from arguments. Differential Revision: https://reviews.llvm.org/D142899 | 3 年前 | |
[flang] Support extention intrinsic ABORT The semantic checks and runtime have been supported. This supports the lowering of intrinsic ABORT. gfortran prints a backtrace before abort, unless -fno-backtrace is given. This is good to use. The intrinsic BACKTRACE is not supported yet, so add TODO in the runtime. This extention is needed in SPEC2017 521.wrf_r in https://github.com/llvm/llvm-project/issues/55955. Reviewed By: klausler Differential Revision: https://reviews.llvm.org/D130439 | 3 年前 | |
[flang][runtime] Use __float128 where possible & needed in runtime On targets with __float128 available and distinct from long double, use it to support more kind=16 entry points. This affects mostly x86-64 targets. This means that more runtime entry points are defined for lowering to call. Delete Common/long-double.h and its LONG_DOUBLE macro in favor of testing the standard macro LDBL_MANT_DIG. Differential Revision: https://reviews.llvm.org/D127025 | 4 年前 | |
[flang] Define & implement a lowering support API IsContiguous() in runtime Create a new flang/runtime/support.cpp module to hold miscellaneous runtime APIs to support lowering, and define an API IsContiguous() to wrap the member function predicate Descriptor::IsContiguous(). And do a little clean-up of other API headers that don't need to expose Runtime/descriptor.h. Differential Revision: https://reviews.llvm.org/D114752 | 4 年前 | |
[flang][runtime] Add dynamically allocated temporary storage These functions will be used as part of the HLFIR lowering for forall/where. The contents of the API were requested by @jeanPerier. The API is designed around that use case, assuming that the caller knows through some side channel what size to allocate for boxes returned from the pop() function. Differential Revision: https://reviews.llvm.org/D150050 | 3 年前 | |
[flang] Remove *- C++ -* incantation from runtime .cpp files. NFC We should only need to spell the language out in .h files. Differential Revision: https://reviews.llvm.org/D109138 | 4 年前 | |
[RFC][flang] Experimental device build of Flang runtime. These are initial changes to experiment with building the Fortran runtime as a CUDA or OpenMP target offload library. The initial patch defines a set of macros that have to be used consistently in Flang runtime source code so that it can be built for different offload devices using different programming models (CUDA, HIP, OpenMP target offload). Currently supported modes are: * CUDA: Flang runtime may be built as a fatlib for the host and a set of CUDA architectures specified during the build. The packaging of the device code is done by the CUDA toolchain and may differ from toolchan to toolchain. * OpenMP offload: - host_device mode: Flang runtime may be built as a fatlib for the host and a set of OpenMP offload architectures. The packaging of the device code is done by the OpenMP offload compiler and may differ from compiler to compiler. OpenMP offload 'nohost' mode is a TODO to match the build setup of libomptarget/DeviceRTL. Flang runtime will be built as LLVM Bitcode library using Clang/LLVM toolchain. The host part of the library will be "empty", so there will be two distributable object: the host Flang runtime and dummy host library with device Flang runtime pieces packaged using clang-offload-packager and clang. In all supported modes, enabling parts of Flang runtime for the device compilation can be done iteratively to make the patches observable. Note that at any point in time the resulting library may have unresolved references to not yet enabled parts of Flang runtime. Example cmake/make commands for building with Clang for NVPTX target: cmake \ -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \ -DCMAKE_CUDA_ARCHITECTURES=80 \ -DCMAKE_C_COMPILER=/clang_nvptx/bin/clang \ -DCMAKE_CXX_COMPILER=/clang_nvptx/bin/clang++ \ -DCMAKE_CUDA_COMPILER=/clang_nvptx/bin/clang \ /llvm-project/flang/runtime/ make -j FortranRuntime Example cmake/make commands for building with Clang OpenMP offload: cmake \ -DFLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD="host_device" \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DFLANG_OMP_DEVICE_ARCHITECTURES="sm_80" \ ../flang/runtime/ make -j FortranRuntime Differential Revision: https://reviews.llvm.org/D151173 | 3 年前 | |
[flang] Avoid dependency of runtime library on pthread for MinGW When building the Fortran runtime on MinGW, clock_gettime is currently used. That function is provided by the pthread library on that platform. That means that all programs that link libFortranRuntime also require to be linked with pthread on that platform. There is already a code path (for MSVC) that doesn't use clock_gettime in the implementation of the Fortran library. Use the same code path also on MinGW by undefining CLOCKID. Reviewed By: vzakhari Differential Revision: https://reviews.llvm.org/D149051 | 3 年前 | |
[flang] Change "bad kind" messages in the runtime to "not yet implemented" Similar to change D125046. If a programmer is able to compile and link a program that contains types that are not yet supported by the runtime, it must be because they're not yet implemented. This change will make it easier to find unimplemented code in tests. Differential Revision: https://reviews.llvm.org/D125267 | 4 年前 | |
[flang] Allow runtime build with AVOID_NATIVE_INT128_T=1 This patch enables the Fortran runtime support library to be built without native 128-bit integer support in the C++ compiler. Experimental: do not merge yet. Differential Revision: https://reviews.llvm.org/D154660 (cherry picked from commit 1c35c1a73907a95ce54b5a0edca513591e2bc069) | 2 年前 | |
[RFC][flang] Experimental device build of Flang runtime. These are initial changes to experiment with building the Fortran runtime as a CUDA or OpenMP target offload library. The initial patch defines a set of macros that have to be used consistently in Flang runtime source code so that it can be built for different offload devices using different programming models (CUDA, HIP, OpenMP target offload). Currently supported modes are: * CUDA: Flang runtime may be built as a fatlib for the host and a set of CUDA architectures specified during the build. The packaging of the device code is done by the CUDA toolchain and may differ from toolchan to toolchain. * OpenMP offload: - host_device mode: Flang runtime may be built as a fatlib for the host and a set of OpenMP offload architectures. The packaging of the device code is done by the OpenMP offload compiler and may differ from compiler to compiler. OpenMP offload 'nohost' mode is a TODO to match the build setup of libomptarget/DeviceRTL. Flang runtime will be built as LLVM Bitcode library using Clang/LLVM toolchain. The host part of the library will be "empty", so there will be two distributable object: the host Flang runtime and dummy host library with device Flang runtime pieces packaged using clang-offload-packager and clang. In all supported modes, enabling parts of Flang runtime for the device compilation can be done iteratively to make the patches observable. Note that at any point in time the resulting library may have unresolved references to not yet enabled parts of Flang runtime. Example cmake/make commands for building with Clang for NVPTX target: cmake \ -DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \ -DCMAKE_CUDA_ARCHITECTURES=80 \ -DCMAKE_C_COMPILER=/clang_nvptx/bin/clang \ -DCMAKE_CXX_COMPILER=/clang_nvptx/bin/clang++ \ -DCMAKE_CUDA_COMPILER=/clang_nvptx/bin/clang \ /llvm-project/flang/runtime/ make -j FortranRuntime Example cmake/make commands for building with Clang OpenMP offload: cmake \ -DFLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD="host_device" \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ -DFLANG_OMP_DEVICE_ARCHITECTURES="sm_80" \ ../flang/runtime/ make -j FortranRuntime Differential Revision: https://reviews.llvm.org/D151173 | 3 年前 | |
[flang][runtime] Fixes for element size calculation. BytesFor() used to return KIND for the size, which is not always correct, so I changed it to return the size of the actual CppType corresponding to the given category and kind. MinElemLen() used to calculate size incorrectly (e.g. CFI_type_extended_double was sized 10, whereas it may occupy more bytes on a target), so I changed it to call BytesFor(). Additional changes were needed to resolve new failures for transformational intrinsics. These intrinsics used to work for not fully supported data types (e.g. REAL(3)), but now stopped working because CppType cannot be computed for those categories/kinds. The solution is to use known element size from the source argument(s) for establishing the destination descriptor - the element size is all that is needed for transformational intrinsics to keep working. Note that this does not help cases, where runtime still has to compute the element size, e.g. when it creates descriptors for components of derived types. If the component has unsupported data type, BytesFor() will still fail. So these cases require adding support for the missing types. New regression unit test in Runtime/Transformational.cpp demonstrates the case that will start working properly with this commit. | 3 年前 | |
[flang][runtime] Initialize uninitialized pointer components Pointer components without default initialization pose some difficult (or impossible) problems when they appear as right-hand side targets in pointer assignment statements; they may contain garbage or stale data that looks enough like a valid descriptor to cause a crash. Solve the problem by avoiding it -- ensure that pointers' descriptors are at least minimally established. Differential Revision: https://reviews.llvm.org/D149979 | 3 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang][runtime] Catch OPEN of connected file Diagnose OPEN(FILE=f) when f is already connected by the same name to a distinct external I/O unit. Differential Revision: https://reviews.llvm.org/D127035 | 4 年前 | |
[flang][runtime] Catch more (all?) negative unit number errors Fortran does have negative unit numbers -- they show up in child I/O subroutines for defined I/O and for OPEN(NEWUNIT=) -- but the runtime needs to catch the cases where a negative unit number that wasn't generated by the runtime is passed in for OPEN or for an I/O statement that would ordinarily create an anonymous "fort.NNN" file for a hitherto unseen unit. Differential Revision: https://reviews.llvm.org/D127788 | 4 年前 | |
[flang][runtime] Fix BACKSPACE over an empty record The implementation of BACKSPACE on a variable-length sequential formatted file has a bug that prevents it from working on an empty record. Differential Revision: https://reviews.llvm.org/D154750 | 3 年前 | |
[flang] Rework handling of non-type-bound user-defined I/O A fairly recent introduction of runtime I/O APIs called OutputDerivedType() and InputDerivedType() didn't cover NAMELIST I/O's need to access non-type-bound generic interfaces for user-defined derived type I/O when those generic interfaces are defined in some scope other than the one that defines the derived type. The patch adds a new data structure shared between lowering and the runtime that can represent all of the cases that can arise with non-type-bound defined I/O. It can represent scopes in which non-type-bound defined I/O generic interfaces are inaccessible, too, due to IMPORT statements. The data structure is now an operand to OutputDerivedType() and InputDerivedType() as well as a data member in the NamelistGroup structure. Differential Revision: https://reviews.llvm.org/D148257 | 3 年前 | |
[flang] Initial UTF-8 support in runtime I/O Implements UTF-8 encoding and decoding for external units with OPEN(ENCODING='UTF-8'). This encoding applies to default CHARACTER values that are not 7-bit ASCII as well as to the wide CHARACTER kinds 2 and 4. Basic testing is in place via direct calls to the runtime I/O APIs, but serious checkout awaits lowering support of the wide CHARACTER kinds. Differential Revision: https://reviews.llvm.org/D122038 | 4 年前 | |
[flang] Initial UTF-8 support in runtime I/O Implements UTF-8 encoding and decoding for external units with OPEN(ENCODING='UTF-8'). This encoding applies to default CHARACTER values that are not 7-bit ASCII as well as to the wide CHARACTER kinds 2 and 4. Basic testing is in place via direct calls to the runtime I/O APIs, but serious checkout awaits lowering support of the wide CHARACTER kinds. Differential Revision: https://reviews.llvm.org/D122038 | 4 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 6 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 2 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 3 年前 | ||
| 3 年前 | ||
| 4 年前 | ||
| 4 年前 |