=============================================================================== Version 5.2.0 =============================================================================== * Release date: Feb.29.2024 * Corresponding Manuals - The 34th edition of C/C++ Compiler Users Guide (G2AF01) - The 34th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Change the default of -f[no-]cse-after-vectorization to -fcse-after-vectorization when -On (n=2,3,4) is effective. 2. The compiler option default is changed from -mno-list-vector to -mlist-vector when the target architecture is VE3. 3. List-vector summation vectorization is applied even if an ivdep directive is specified to a loop, when the target architecture is VE3 and list-vector summation vectorization is applicable. 4. A vector diagnostic message is output, when a specified vreg or pvreg directive is not valid. 1. Improved automatic parallelization for loops that packed vector instructions were applied. [Fixed Problem] 1. When the following conditions were fulfilled, work vector area allocated on stack was not freed. Therefore, "Unable to grow stack" error might occur at execution. - A loop is partially vectorized, or an outer loop is vectorized. - Work vector is used for the loop. - The loop length is not a variable, but a constant. 2. The [no]neighbors directive for SX series could not be converted by the compiler directive conversion tool. 3. When the following conditions were fulfilled, the result might be incorrect. - The target architecture is VE3. - A loop is vectorized using packed vector instructions. - The loop length is 1, or multiple of 512 plus 1. - The loop includes one or more IF statements. 4. When a volatile array or a volatile pointer reference was used in a vectorized loop, the compiler might terminate abnormally, or the execution result might be wrong. 1. In DO WHILE statement, if the loop process was interrupted by an IF statement, the index variable might not be updated. 2. When a complete subarray of a pointer with a two-dimensional or more CONTIGUOUS attribute, which was a component of a derived type, was the target of pointer assignment for remapping, an error occurred at compilation. 3. The diagnostic message "opt(1268): Use of pointer variable/expression inhibits optimization." might be output erroneously at compilation. 4. When -bss was specified and it read the value to a scalar variable in namelist input, the value read in the subsequent reference of the scalar variable could not be referenced. 5. When a procedure had a DO WHILE statement and the procedure was inlined, an exception might occur. 1. When the following conditions were fulfilled, the C++ program was terminated abnormally at execution. - An exception object was rethrown using std::rethrow_exception(). - Another exception was thrown within a catch block that caught the exception rethrown with std::rethrow_exception(). 2. When the following conditions were fulfilled, a link error might occur. - Using nc++ compiler version 3.2.0 or later, or using the version 4.0.0 or later with -stdlib=compat enabled. - -std=c++17, -std=c++20, -std=gnu++17 or -std=gnu++20 was enabled. - The header was included in multiple source programs. 3. An internal error might occur when the template argument in the member function of a derived class template was a function pointer in C++. 4. When the following conditions were fulfilled, a compilation error might occur. - Using nc++ compiler version 3.2.0 or later, or using the version 4.0.0 or later with -stdlib=compat enabled. - -std=c++17, -std=c++20, -std=gnu++17 or -std=gnu++20 was enabled. - Structured bindings in C++17 (ISO/IEC 14882:2017) were used in a C++ program. [Performance Improvements] 1. Vector single precision cbrt function performance is improved. 1. Improved loop fusion of array expressions which include intrinsic functions MAX/MIN. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 5.1.0 =============================================================================== * Release date: Aug.31.2023 * Corresponding Manuals - The 33rd edition of C/C++ Compiler Users Guide (G2AF01) - The 33rd edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Support option directive for each routine 2. Add -report-userinfo option to output user's comment in a compilation list 3. Add new value "no" which can be specified as a value of -minit-stack=value 1. Improve error message when the options directive is not specified at the top of your source program 2. Improve to accept name-value subsequences that omit values without delimiters for namelist input 3. Add the following compiler options - -fivdep-do-concurrent-loop 1. Support to specify vector-type object by vreg directive 2. Add the following compiler options - -finline-attribute - -finline-loop-test=keyword 3. Change the default value of the following compiler option - -finline-max-times=20 (Change from 6 to 20) [Fixed Problem] 1. When multiple loops that the induction variable of the outer loop was referred to in the loop control expression of the inner loop and the loop body were interchanged, the program might terminate abnormally at execution. 2. When a variable specified in an OpneMP firstprivate clause was used in task region which was following after that clause, the execution result was incorrect. 3. When a vector condition in which a conditional expression of an IF statement is a vector element and scalar conditions in which conditional expressions of IF statements are scalar elements are nested in a vectorized loop, the execution result may be incorrect. 4. -march, -mfp16-format, -mvector-neighbors were not output in the options list. 5. It was taking a long time to compile to vectorize when a loop was long and has many array dependencies. 6. Loops might not be collapsed, although a collapse directive was specified. 7. When -fno-fast-math-check was specified at compilation, a compile error of "unrecognized option" occurred. 8. An error occurred at compilation when the OpenMP ATOMIC clause was used. 9. Optimizations might cause line numbers in traceback information to be displayed incorrectly. 10. When using the vector version of the single precision CBRT function, an exception might occur. 11. When there is an integer scalar power of a single-precision vector or an integer vector power of a single-precision scalar, SIGSEGV might occur at compilation. 12. When compile option -fno-move-loop-invariants was specified and a left hand side element of an assignment in an inner vectorized loop is invariant on an outer loop level, the execution result might be incorrect. 13. When -mvector-packed option was specified and a power function was vectorized, compiler aborted by SIGSEGV. 1. When the following conditions were fulfilled, an internal error might occur at compilation. - A derived-type component with three or more nested ALLOCATABLE attributes was in the module. - There was an array component in the third nest from the top. 2. When there is a free-form file with an fpp suffixes under the directory specified by the -finline-directory, SIGABRT might occur at compilation. 3. When an allocatable array and the type of the array element is a derived type with a sequence attribute, SIGSEGV might occur at compilation. 4. An error was detected incorrectly when a reduction clause was in OpenMP directive which was not related to parallelization. 5. If CONTIGUOUS attribute was specified in an array with POINTER attribute, the execution result might be incorrect. 6. The compiler was aborted in cross-file inlining when the source files included allocatable arrays whose element size were same. 7. When specifying a variable with a non-constant character length as an argument of the SIZEOF function, an error occurs at compilation. 8. If the same array is allocated twice without a deallocation, no error occurs at execution. 9. If the actual argument of a routine call contained two or more subarrays and one of the arguments was the result of an operation of a subarray and another expression, the program terminated abnormally at execution. 10. When a polymorphic variable object containing a derived-type component with the ALLOCATABLE attribute was specified as the actual argument of the type-binding procedure, a memory leak might occur for the object. 11. Loops containing IF statements might be vectorized incorrectly and the execution result might be incorrect. 12. If all of the following conditions were fulfilled, an error occurs at compilation: - -fpp is specified. - One sentence is divided into multiple lines. - The following & in the continuation line is a string of numbers that represents a number. - The characters that follow the above are either 'D/d' or 'E/e' or 'Q/q'. - The next character is anything other than ','. 13. If all of the following conditions were fulfilled, the compiler aborts: - The format of the argument of the SIZEOF function is x%y(n)%z or x(m)%y(n)%z. - x is a variable or array of type CLASS or TYPE. - y is an array of TYPE type of ALLOCATABLE attributes. - z is an array of POINTER attributes. 1. When the type of the determination of loop termination is other than integer type, an internal error might occur at compilation. 2. When the -fno-check-noexcept-violation was enabled and the function was called after the return statement such as "return function()" in a function with the noexcept keyword, the function argument might be incorrect. 3. When -mvector-packed option was specified, an operation which was not summation might be wrongly vectorized as a summation macro operation and the result might be wrong. [Performance Improvements] 1. Separately allocated arrays are vectorized without dependency. 2. Improve dependency analysis to vectorize a loop that includes vector iteration macro even if the loop is in an inlined routine. 1. Improve loop collapsing of a nested loop that includes calling of a routine whose parameter is assumed-shape array. 2. Change the deallocation point of work array for subarray that is an actual array of a routine call from the end of this routine to immediately after the called routine. [Notices] 1. If you installed version 5.0.0, 5.0.1, or 5.0.2, you also had to install VEOS version 3.0.2 or later. However, if you are installing version 5.1.0 or later, you no longer need to upgrade VEOS. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 5.0.2 =============================================================================== * Release date: Jul.31.2023 * Corresponding Manuals - The 32nd edition of C/C++ Compiler Users Guide (G2AF01) - The 32nd edition of Fortran Compiler Users Guide (G2AF02) [Fixed Problem] 1. When there was currently handled exception, std::current_exception() of NEC Compat C++ Standard Library incorrectly returned a null exception_ptr object. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 5.0.1 =============================================================================== * Release date: Jun.29.2023 * Corresponding Manuals - The 31th edition of C/C++ Compiler Users Guide (G2AF01) - The 31th edition of Fortran Compiler Users Guide (G2AF02) [Fixed Problem] 1. SIGSEGV might occur at the end of execution of a program that dynamically loads and unloads the C++ shared objects built with nc++. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 5.0.0 =============================================================================== * Release date: Mar.30.2023 * Corresponding Manuals - The 30th edition of C/C++ Compiler Users Guide (G2AF01) - The 30th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Support VE3 Architecture 2. Support Half-Precision Floating-Point (VE3 only) 3. Add the following compiler options - -mvector-neighbors - -mabi - -march - -mfp16-format 4. Add the following compiler directive - neighbors 5. Add the following predefined macros - __VE_ARCH_1__ - __VE_ARCH_3__ - __FP16_FORMAT__ - __FP16_IEEE - __FP16_BFLOAT 6. Add the following matrix multiply library - VHMXV, VHSXV, VHMXP, VHSXP - VHMXVA, VHSXVA, VHMXPA, VHSXPA - VHMXMA, VHSXMA, VHMXQA, VHSXQA [Fixed Problem] 1. When a loop which included an atan2 function call was vectorized, floating point exception might occur at execution. 1. When offloading to VH is enabled and the output size after editing on the VH side is greater than 2147483647 bytes, "Segmentation fault" was occurred at execution. 2. When the following conditions were fulfilled, the result might be incorrect. - "-floop-unroll -finline-functions" was specified at compilation - An user procedure was inlined - The procedure was called in a loop and the loop was vectorized - An argument of the procedure was an array - In the procedure, a value was assigned to the array passed as an argument - The array assignment was unrolled 1. When a value is set to array with a dynamically allocated restrict type modifier, "Segmentation fault" may occur at execution. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 4.0.0 =============================================================================== * Release date: Nov.30.2022 * Corresponding Manuals - The 29th edition of C/C++ Compiler Users Guide (G2AF01) - The 29th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Add the following compiler option - -ffast-math-check - -mconditional-index-test - -mvector-assignment-threshold=n - -stdlib 1. Add the following compiler option - -Wunmatched-subscript - -Wunmatched-subscript-errors 2. Change to ignore any leading blanks of the strings specified in the FILE specifier of the INQUIRE and OPEN statements 1. Support libc++ C++ Standard Library 2. Support Vector Type [Fixed Problem] 1. Scalar trigonometric functions returned NaN when absolute value of an argument was large. 2. When there was an unvectorizable dependency and the distance of array elements of the same array in right hand side and left hand side was more than max vector length(256) and the loop was partially vectorized, the execution result might be incorrect. 3. When abs(x)/abs(y) was large in double precision atan2(x,y), the result might be incorrect. 4. When an OpenMP collapse clause was used and -O0 -fopenmp was specified, an internal error might occur at compilation 5. When a loop that contained an iteration type idiom was partially vectorized, the result might be incorrect. 6. When an outer loop was divided and the loops were replaced by a vectorized matrix multiply library call, the result might be incorrect. 7. When you specify a value for the omp_set_num_threads function that is less than the number of threads at program startup, the number of threads that are actually running does not match the specified number. 8. When -traceback=verbose was specified at compile time, and there were both of #include and #line directives in program, the compiler might abort with SIGSEGV. 1. When the number of subscript expression in subscript list of the array reference was smaller than the rank of array, specifying -Wunmatched-subscript-errors at compilation will output an error message and stop the compilation. 2. The behavior at execution became undefined when a translation unit included two or more procedures, the procedures defined the COMMON blocks whose names were same, elements in the COMMON blocks were different, and arrays in the COMMON blocks whose names were same were defined or referred to in a loop. 3. A SIGSEGV might occur at compilation when a module procedure declares a named-constant whose type is array, and its value was given by another named-constant, and the procedure was compiled with "-g". 4. A program might be aborted at execution if there were two loops, and the first loop included array whose elements were defined under if-condition, and the second loop referred the array elements under the same if-condition, and the second loop was parallelized by automatic parallelization. 5. When the Fortran intrinsic procedures MinLoc/MaxLoc have mask argument, the runtime errors might occurr. 6. When the following conditions were fulfilled, an internal error occurred at compilation. - There was a derived type A with the allocation array Z as a component. - There was a derived type B that has a scalar pointer Y of derived type A as a component. - There was an allocation array X of derived type B. - The component Z of derived type A pointed to by component Y of a certain element of array X was specified as the actual argument to the intrinsic procedure PACK. ex.) PACK(X(1)%Y%Z,.TRUE.) 7. When an allocatable variable was declared outside of a OpenMP parallel region and allocated in parallel region, the value the result might be incorrect after the parallel region. 8. A bus error occurred at execution with -O1 or higher optimization when allocatable array's type was derived type, and the type included a component whose type was derived type and having POINTER attribute, and the type included a pointer array. 9. When the first reference was to the whole array and the second was an array element or allocation, the incorrect errors might be outputted at compilation. 10. When there were multiple unnamed common blocks in the same file, the result might be incorrect. 11. When -fopenmp and -finline-functions were specified at compilation, and if any of the intrinsic procedure minval, maxval or sum exist in the user function to be inlined, the incorrect code might be generated. 12. When a DO loop calling the intrinsic procedure MAX / MIN in the loop control expression was conditionally vectorized, the execution result might be incorrect. 1. When a constexpr was used in the same file as a OpenMP parallel construct, the construct was not parallelized. 2. When there was an assignment of class, structure, or union, and this assignment was performed by vector instructions, the reason that the loop was not vectorized was not output. 3. When a program that included C/C++ system header by #include and used macro __STDC_LIB_EXT1__ was compiled and linked, a link error might occur for bounds checked functions of "C Language Standard / Annex K". 4. When an object that copy constructor was deleted was inserted by the function template std::map::emplace(), a compilation error might occur. 5. When there was code that adds float _Complex type and integer, compilation errors might occur. 6. Incorrect DWARF debugging information for the TLS variable was output. 7. When a variable of long type was specified as an acutual argument for a dummy argument of size_t type, the result might be incorrect. [Performance Improvements] 1. Performance improvement of input/output statement in io-implied-do when the following conditions are fulfilled. - The subscripts of io-implied-do-object have the same order as the do-variables in io-implied-do-control. - The number of dimensions of the array in io-implied-do-object is different from the number of do-variables in io-implied-do-control. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 3.5.1 =============================================================================== * Release date: Aug.05.2022 * Corresponding Manuals - The 28th edition of C/C++ Compiler Users Guide (G2AF01) - The 28th edition of Fortran Compiler Users Guide (G2AF02) [Fixed Problem] 1. Unexpected result might be given at execution when a program fulfilled the following condition. - A program was an OpenMP program had one or more parallel region. - One parallel region included two or more parallel loops. - Both a parallel loop and its successive parallel loop had "nowait" and "schedule(dynamic[,n])" clauses. 1. A SIGSEGV might occur at compilation when a module procedure declares a named-constant whose type is array, and its value was given by another named-constant, and the procedure was compiled with "-g". 2. When a component of derived type array was specified to selector of an ASSOCIATE statement, an internal error might occur at compilation. 3. When the following conditions were fulfilled, segmentation fault might occur at execution. - An assumed-shape array was declared as a derived type which had a component of type character. - The character type component of the array was used as a selector of an ASSOCIATE construct. - The associate name associated with the component was referred to as an array of type character within the ASSOCIATE construct. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 3.5.0 =============================================================================== * Release date: Jun.30.2022 * Corresponding Manuals - The 27th edition of C/C++ Compiler Users Guide (G2AF01) - The 27th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Support Fortran 2008. 2. Support a part of Fortran 2018 features. 3. Support the MAKEDIRQQ function. 4. Support the GERROR function. 5. Support for specifying dummy arguments of elemental procedure in specification expression. 6. Support -traditional for fpp. 7. Change to be able to define procedures that have the different number of dummy arguments in a MODULE PROCEDURE statement. 8. Change to continue the compilation when a scalar dummy argument is a character type and its length is longer than the length of the actual argument. 9. Change to continue the compilation with warning message even if an external function declared with the EXTERNAL attribute and without an explicit type specification is called. The compilation was stopped by a syntax error in previous version. 1. Support the OMPT interface. [Fixed Problem] 1. When -traceback=verbose or -g is enabled, the compiler might abort at compilation. 2. When elements of multi-dimensional array were defined or used in OpenMP parallel construct, the execution result might be incorrect or the program might be aborted at execution. 3. When a loop was optimized (Loop expansion), the loop control expression was expanded incorrectly, and the program might be abnormally terminated at execution. 1. An internal error occurred at compilation when OpenMP COPYPRIVATE clause was used and compiled with -O0. 2. Compiler might be abnormally terminated when variables that were defined in OpenMP conditional compilation sentinel were used in OpenMP clauses. 3. When the following conditions were fulfilled, an internal error occurred at compilation. - -fcheck=all or -fcheck=dangling was specified. - A procedure (A) had a dummy argument (a) of type C_PTR without TARGET attribute. - A procedure (B) which had an argument (b) of type C_PTR with TARGET attribute was declared. - The procedure (B) was called in the procedure (A) and the dummy argument (a) was specified as the actual argument (b). 4. When the following conditions were fulfilled, an internal error occurred at compilation. - The left-hand side of an array expression was an array section. - The lower bound of the array section was an expression which contained a rank-2 or more array. 5. When a program with the intrinsic procedure is compiled with -O0, a link error occurred. 6. When the following conditions were fulfilled, segmentation fault might occur at execution. - -O2 or higher was specified. - An array was allocated and deallocated repeatedly. - After the first allocation, a section of the array was assigned values using an array constructor. 7. When the following conditions were fulfilled, segmentation fault might occur at execution. - -O2 or higher was specified. - In a loop, a pointer was associated with another pointer. - The pointer was referred to after the loop. 8. In namelist input, a run-time error occurred when the input data satisfy all of the following conditions: - The input data is the name of the derived type. - Value(s) for one or more members in the derived type was not specified by the input data. - The derived type of the input data contains a mixture of character type and non-character type members, and the first member is a character type. 9. When there was an inner loop consisted of IF and GOTO statements in a DO loop, and there was another GOTO statement in the inner loop that go out of the inner loop, the execution result might be wrong or the program might be aborted at execution. 10. When the following conditions were fulfilled, the execution result might be incorrect. - A variable with the TARGET attribute was specified as the actual argument in a procedure call - The variable did not appear in a pointer assignment in the called procedure 11. When a variable specified in an OpneMP private clause was used in another OpenMP directive which was following after that clause, the execution result might be incorrect. 12. When -fcheck=bounds or -fbounds-check was specified, an arithmetic exception to be detected might not be detected. 13. A loop might be wrongly vectorized when the loop increment was negative and there were two multi-dimensional arrays whose dependency was unvectorizable in the loop. 14. When a loop included procedure calling, it was inlined, and its parameter appeared in an expression of IF statement, it was moved to outside of the loop even if it was not loop-invariant. 15. A syntax error occurred when default(none) was specified and the data-sharing attribute of implied-do indices were not specified explicitly. 16. A syntax error occurred when default(none) was specified and the data-sharing attribute of variables used in num_threads clause were not specified explicitly. 1. When an OpenMP program included a parallel construct and it was compiled with "-fopenmp -finline-functions", an internal error occurred. 2. When a program including a function called from parallel region, whose parameter was VLA, and the program was compiled with "-fopenmp -finline-functions", an internal error occurred at compilation. 3. When a value of 256 or more was specified for N of -ftemplate-depth=N, runaway recursive instantiations might occur and the compilation might be aborted. 4. When an expression which contained successive logical negation operators "!" was optimized, the execution result might be incorrect. 5. When the following conditions were fulfilled the result might be incorrect. - The result of a function call was assigned to target of a pointer indicated by return value of a pointer type function. ex.) *func1(arg) = func2(arg) - The function call was inlined. - The assignment was in a vectorized loop. 6. When a loop including a call to the system library function fread() was optimized, the execution of the program might not be finished. [Performance Improvements] 1. Improve forced_collapse directive feature so as to collapse a nested loop whose loop body is very big. 2. Improve vectorization of compress/expand loop whose index is array element. 1. Improve forced_collapse directive feature so as to collapse a nested loop which includes a host-associated array. 2. Improve vector register allocation of loop unrolling. 3. Improving performance of intrinsic procedure PACK. 1. Promoting vectorization of a loop containing a call to the C++ vector member function size() in the controlling expression of a for statement. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 3.4.2 =============================================================================== * Release date: Mar.31.2022 * Corresponding Manuals - The 26th edition of C/C++ Compiler Users Guide (G2AF01) - The 26th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Change to continue the compilation with warning message even if a constant value which cannot be represented by the size of default integer type. The compilation was stopped by an syntax error in previous version. (Upper bits of the value is truncated to fit in the size of default integer type.) [Fixed Problem] 1. When -traceback or -g was specified in cross-file inlining, the compilation might be abnormally terminated by assembler error. The cross-file inlining is enabled when both -finline-functions and -finline-file=file-name are specified. 1. When an array appeared in left-hand and right-hand expressions, and one of the expressions was an array expression, and it was in a loop parallelized by OpenMP or automatic parallelization, the loop might be vectorized incorrectly. 2. When a routine having another routine call that copy-in and/or copy-out of an actual argument was needed, and the program was compiled with -O0, its execution was abnormally terminated. 3. When a routine included two or more automatic arrays, and one of the arrays was a derived type array, and the derived type has an allocatable component, its execution might be abnormally terminated. 4. When an assumed-size array was used, a runtime error might be incorrectly detected in array bounds checking (-fcheck=bounds). 5. An exception at execution occurred when offloading to VH was enabled and the output size after editing on the VH side was greater than 1073741824 bytes. 6. When automatic parallelization or OpenMP parallelization was enabled, "Recursive I/O" error occurred in the I/O statement after executing the fseek function. 7. When the following conditions were fulfilled, an internal error occurred at compilation. - A function had no RESULT clause and returns an array. - At least one of dimensions of the array was declared with a variable lower bound. - The array appearred in the right hand side of an array assignment statement, and the subscript expression for the dimension which was declared with a variable lower bound is ":". 8. When a fixed form source program containing OPTIONS directive was compiled with -fopenmp, incorrect syntax error was detected. 9. When a dummy argument had POINTER attribute or ALLOCATABLE attribute, its type was CHARACTER type, and it appeared as an actual argument of LOC function, the compilation might be aborted. 10. When the following conditions were fulfilled, the compilation error occurred. - There was a procedure which overrides a type-bound procedure of a type defined in a separately-compiled module. - It had a dummy argument with constant character length, and the overriding procedure specified the length with an expression that was not a literal constant. 1. When the intrinsic function putc() or getc() was called with "std::" like "std::getc(fp)", the compilation error occurred. In addition, several minor fixes and performance improvements is done. =============================================================================== Version 3.4.0 =============================================================================== * Release date: Nov.30.2021 * Corresponding Manuals - The 25th edition of C/C++ Compiler Users Guide (G2AF01) - The 25th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Add the following compiler option. - -fivdep-omp-worksharing-loop 2. Remove the restriction of OpenMP that array section specified in reduction clause. 3. Relaxed restrictions on combined directives that contain distribute, target and teams. 1. Support the H edit descriptor for input statement. 2. The option -floop-unroll-complete-nest is applied not only to array expressions but also to DO loops. 1. Add the following compiler options. - -std=gnu++20/-std=c++20 - -report-system-header 2. Enhance that the private/firstprivate/reduction clauses of OpenMP can be specified in parallel master construct. [Fixed Problem] 1. When an iteration included another unvectorizable dependency, the compiler might abort or the execution result might be incorrect. 1. After executed a READ statement with the POS specifier having no input-list-item, the file position was not set (changed) to the specified position by POS specifier. 2. When there were nested IF statements in a vectorized loop, segmentation fault might occur at execution because of the earlier evaluation of an inner IF statement. 3. When the following conditions were fulfilled the result might be incorrect. - A procedure was declared in an interface block or it was a module procedure. - Loops containing arrays passed as arguments to the procedure were transformed into a vector matrix library function call. 4. A letter 'V' was not output for an array assignment expression even if it was vectorized. 5. When the intrinsic procedure TRANSPOSE was specified as an actual argument to the intrinsic procedure MATMUL and -fno-replace-matmul-to-matrix-multiply option was specified at compilation, the execution result might be incorrect. 6. When -O3 compile option was specified, a loop which constituted an array expression and its outer DO loop were exchanged, the result might differ in each execution. 7. When NEC directive other than OPTIONS is specified in the 1st line of fixed form source, nfort erroneously detects a sytax error. 8. When a derived type with two or more nested derived-type components was defined in a module file and the following conditions were fulfilled by these components, an internal error might occur at compilation of the program using a variable of the derived-type. - The type of a component had a type-bound defined assignment statement - Another component was declared with the CLASS keyword 1. When the header was included within a scope which had C language linkage in a C++ program, a syntax error was detected erroneously at compilation. 2. When the following conditions were fulfilled, the execution result might be incorrect. - The compiler options -O2 -finline-functions were specified. - Two or more constant terms appeared in a controlling expression of the nested for-statements. 3. Compiler directives in lambda expressions were ignored. [Performance Improvements] 1. Improvement of compilation time when specifying the compiler option -report-cg or -report-all. 1. Performance improvement of input/output statement in io-implied-do when the following conditions are fulfilled. - The subscripts of io-implied-do-object have the same order as the do-variables in io-implied-do-control. - The number of dimensions of the array in io-implied-do-object is different from the number of do-variables in io-implied-do-control. 2. The interchange of loops and automatic parallelization of loops containing array expressions are promoted. =============================================================================== Version 3.3.1 =============================================================================== * Release date: Sep.16.2021 * Corresponding Manuals - The 24th edition of C/C++ Compiler Users Guide (G2AF01) - The 24th edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Add the following environment variable. - VE_FORT_UFMTENDIAN_NOVEC [Fixed Problem] 1. When the reduction variable in OpenMP reduction clause was not used as reduction in parallel section, the parallelization was suppressed. 2. When the following conditions were fulfilled, the program might hang-up or the result might be incorrect at execution. - OpenMP parallel do directive (Fortran) or parallel for directive (C/C++) was specified to the outer loop of nested loops. - OpenMP simd directive was specified to the inner loop of nested loops. 1. When INQUIRE statement for an unformatted direct file has SIZE specifier, the program aborted at execution. 2. When the number of elements of a multi-dimensional array expression's rightmost dimension was a small constant and the corresponding loop was completely unrolled, the results might vary at each execution. 3. When the unit number of which READ statement has no input item is set to the environment variable VE_FORT_UFMTENDIAN, a runtime error occurred. 4. When the unit number of which WRITE statement has output item of big-size array sets to the environment variable VE_FORT_UFMTENDIAN, the program might be aborted at execution. [Performance Improvements] 1. Improve outer-loop unrolling feature for a loop in an ASSOCIATE construct. 2. Improve performance of input/output statement in io-implied-do when the environment variable VE_FORT_UFMTENDIAN is set. 3. Improve vectorization when a loop includes a calling of maximum or minimum value function having three or more actual arguments. =============================================================================== Version 3.3.0 =============================================================================== * Release date: Jul.29.2021 * Corresponding Manuals - The 23rd edition of C/C++ Compiler Users Guide (G2AF01) - The 23rd edition of Fortran Compiler Users Guide (G2AF02) [New Features] 1. Change the default for the compiler option -msched-keyword from -msched-insns to -msched-block. 2. Add the following environment variable. - VE_INIT_STACK 3. Add the following compiler option. - -minit-stack=runtime 4. Enhance the diagnostic message output when the compiler option -fmove-loop-invariants-unsafe is specified. 5. Improve precision of the intrinsic procedures LOG and EXP for scalar version. 1. Add the following environment variable. - VE_FORT_UFMTADJUST 2. Improve a displayed procedure name in FTRACE, which is generated for loop parallelization in a module procedure by the compiler. [Fixed Problems] 1. When the NOVECTOR directive was specified to an outer loop of nested loops, it might be enabled for the inner loop instead of the outer loop. 2. When the following conditions were fulfilled, the execution result might be incorrect. - A nested loop was vectorized. - There was an assignment to an array of complex type in the nested loop. - The most inner loop of the nested loop was unrolled. 3. When both operands of comparison in an if statement in a vectorized loop were NaNs, the execution result might be incorrect. 4. When the following conditions were fulfilled, the execution result might be incorrect. - OpenMP parallelization was enabled. - There were multiple OpenMP single directives in one parallel region. - One of the OpenMP single directives had the nowait clause. 5. When the following conditions were fulfilled, the floating-point overflow exception was detected incorrectly at execution. - VE_FPE_ENABLE=FOF was set. - The intrinsic procedure TANH was vectorized. - An array was specified to the argument of the TANH. - Small and large values mixed together in the array. 1. When the compiler option -mno-stack-arrays was specified, the heap area might not be initialized with a value specified by the environment variable VE_INIT_HEAP. 2. When an array of character type was declared and initialized with zero length character by an array constructor, the compiler aborted. 3. When an array constructor was used to collectively assign an array section to an array of type class, the compilation error might occur. 4. When the following conditions were fulfilled, the execution result might be incorrect. - A procedure was inlined. - The procedure contained a loop. - In the loop, a function of type pointer was called, and the target of its return value was assigned a return value of another function. - The pointer function and the inlined procedure had a DO variable as an argument. 5. The type of return value of the intrinsic procedure LOC was 4-byte integer. 6. When a loop which contained the intrinsic procedure TRANSFER was specified the ivdep directive and was vectorized, the execution result was incorrect. 7. When the following conditions were fulfilled, the execution result might be incorrect. - A loop was vectorized. - There was the unvectorizable dependency in the loop. - There was an IF construct in the loop. - There was an assignment to an array which was a member of derived type and had the same subscript as the above-mentioned assignment in the IF construct. 8. When returning from a function that contained a call of the intrinsic procedure PACK, a program might abort. 9. A unit number which was set to the environment variable VE_FORT_NORCW or VE_FORT_EXPRCW might be incorrect. 10. When the following conditions were fulfilled, the execution result might be incorrect. - An external procedure was declared without explicitly interface in a module. - The procedure was called from the module subprogram and passed a module function as an argument. - A value declared in the module was set as the kind type parameter of the module function. - The above procedure was called in another file which used this module, and the kind type parameter of its argument was a different from the value set in the module. 11. When the following conditions were fulfilled, the execution result might be incorrect. - There were nested loops and they were loop interchanged. - There was an assignment to a complex variable of derived type in the loop. 12. When the following conditions were fulfilled, The ALLOCATED statement might incorrectly return TRUE for an unallocated variable. - OpenMP parallelization was enabled. - A variable was specified to OpenMP private clause. - An ALLOCATED statement was executed for the variable before executing an ALLOCATE statement. 13. When the following conditions were fulfilled, the execution result might be incorrect. - An array was declared with a lower and upper bound. - An assignment statement to the array was contained in nested loops and the outer loop was parallelized. 14. When the following conditions were fulfilled, the compilation error occurred. - In OPEN statement, variable was specified instead of a constant to specifiers such as "FORM=" and "ACTION=" which could accept character-type expressions (except "FILE="). - There was an ENTRY statement after the OPEN statement in a procedure. 15. When a variable of type character which had allocatable attribute was specified as an argument of the intrinsic procedure LOC, the internal error occurred at compilation. 16. When an array expression which was in OpenMP workshare construct was parallelized and vectorized, "P" instead of "Y" might be displayed at the array expression in the format list. 1. When using the C++ class template std::pair, the compilation error occurred. 2. When using the C++ class template std::tuple, the compilation error occurred. 3. When a pointer which was returned by malloc was used in calculations before it was assigned to a variable, the pointer value might be incorrect. 4. When the following conditions were fulfilled, the compilation error occurred. - The compiler option -std=c++11 or -std=gnu++11 was enabled. - A program contained the eof() in C++ class template std::char_traits. 5. When the the compiler option -MT or -MF and the compiler option -MD were specified together, -MT or -MF was disabled. [Performance Improvements] 1. Promoting vectorization of a loop containing macro operation of sum pattern in IF construct. 2. Promoting collapsing of nested loops. 3. Several performance improvements. 1. Improving performance of intrinsic procedure MATMUL. 2. Promoting optimization when the associate-name of ASSOCIATE construct is associated with an array. 3. Improving performance of endian conversion when the environment variable VE_FORT_UFMTENDIAN is set. 1. Promoting optimization of the compiler directive unroll_complete. ===============================================================================