Visible to Intel only — GUID: GUID-D210DD4C-310C-491D-A2E5-E324999687A4
Visible to Intel only — GUID: GUID-D210DD4C-310C-491D-A2E5-E324999687A4
New Features
ifx is now fully compliant with Fortran 2018.
New Features
Option -inline-forceinline (Linux) and /Qinline-forceinline (Windows), which tells the compiler to treat inline routines as forceinline. For more information, see inline-forceinline, Qinline-forceinline.
A data object with a coarray component can now be an array, and it can be allocatable (arrays of coarrays).
The AT format edit descriptor, which allows output of arbitrary length character data with any trailing blanks removed prior to output. For more information, see Character Editing (A and AT).
Option -fvec-allow-scalar-stores (Linux) and /Qvec-allow-scalar-stores (Windows), which ensures vectorization of an explicit simd loop. For more information, see fvec-allow-scalar-stores, Qvec-allow-scalar-stores.
You can specify new functions in intrinsic module IEEE_ARITHMETIC: IEEE_MAX, IEEE_MAX_MAG, IEEE_MIN, and IEEE_MIN_MAG .
You can specify new pure intrinsic subroutines SPLIT and TOKENIZE.
Option -fopenmp-offload-mandatory and /Qopenmp-offload-mandatory, which instructs the compiler to only generate a device version of OpenMP* TARGET regions. For more information, see fopenmp-offload-mandatory, Qopenmp-offload-mandatory.
New OpenMP* Features
You can specify an AFFINITY clause in a TASK construct. For more information, see TASK.
You can specify an IF clause in the TEAMS directives. For more information, see TEAMS.
You can specify a DEVICE_TYPE clause in a TARGET directive and a DECLARE TARGET directive. For more information, see TARGET and DECLARE TARGET.
Previous Features Added to ifx
You can specify a THREAD_LIMIT clause in the TARGET and TEAMS directives. For more information, see THREAD_LIMIT.
You can specify a NOWAIT clause in construct directives: DO, DO SIMD, SCOPE, SECTIONS, SINGLE, and WORKSHARE.
You can specify a COPYPRIVATE clause in a SINGLE directive. For more information, see SINGLE.
You can specify a LOOP construct in a DO CONCURRENT directive. For more information, see LOOP.
Option -ffp-accuracy (Linux) and /Qfp-accuracy (Windows), which let you specify the required accuracy (precision) for floating-point operations and library calls. . For more information, see ffp-accuracy, Qfp-accuracy.
Option -ftarget-register-alloc-mode (Linux) and /Qtarget-register-alloc-mode (Windows), which let you specify a register allocation mode for specific hardware for use by supported target backends . For more information, see ftarget-register-alloc-mode, Qtarget-register-alloc-mode.
Option -fopenmp-concurrent-host-device-compile (Linux) and /Qopenmp-concurrent-host-device-compile (Windows), which let you specify the format of device code stored in a resulting object. This is an experimental feature. For more information, see fopenmp-concurrent-host-device-compile, Qopenmp-concurrent-host-device-compile.
Option -fopenmp-do-concurrent-maptype-modifier (Linux) and /Qopenmp-do-concurrent-maptype-modifier (Windows), which let you specify the data movement for variables referenced inside the DO CONCURRENT region when it is auto-offloaded. For more information, see fopenmp-do-concurrent-maptype-modifier, Qopenmp-do-concurrent-maptype-modifier.
Option [q or Q]mkl-sycl-impl, which lets you link to one or more specific Intel® oneAPI Math Kernel Library (oneMKL) SYCL libraries. For more information, see qmkl-sycl-impl, Qmkl-sycl-impl.
Option -fmaintain-32-byte-stack-align (Linux) and /Qmaintain-32-byte-stack-align (Windows), which tell the compiler to realign the stack to 32-byte if stack alignment is uncertain for functions with external linkage, and retain 32-byte alignment for other functions. For more information, see fmaintain-32-byte-stack-align, Qmaintain-32-byte-stack-align.
Option -fstrict-overflow (Linux) and /Qstrict-overflow (Windows), which determine whether strict overflow is enabled for signed addition, subtraction, and multiplication wrap arounds using twos-complement representation. For more information, see fstrict-overflow, Qstrict-overflow.
Option -fopenmp-target-default-sub-group-size (Linux) and /Qopenmp-target-default-sub-group-size (Windows), which let you specify a default sub-group size globally for single program multiple data (SPMD) kernels that are generated for OpenMP* target constructs when offloading to SPIR64-based devices. For more information, see fopenmp-target-default-sub-group-size, Qopenmp-target-default-sub-group-size.
Option -fpreview-breaking-changes, which lets a user tell the compiler that they are willing to give up backward compatibility guarantees and lets the compiler enable new backward breaking changes that will appear in the next major release.. For more information, see fpreview-breaking-changes.
Option -fopenmp-target-loopopt (Linux) and /Qopenmp-target-loopopt (Windows), which enable the loop optimizer and auto-vectorization for OpenMP* offloading device compilation when option O2 or higher is set or specified. For more information, see fopenmp-target-loopopt, Qopenmp-target-loopopt.
Option -fopenmp-target-simd (Linux) and /Qopenmp-target-simd (Windows), which enable OpenMP* SIMD loop vectorization for OpenMP offloading device compilation when option level O2 or higher is set or specified. For more information, see fopenmp-target-simd, Qopenmp-target-simd.
Option [q or Q]opt-prefetch-distance, which specifies the prefetch distance to be used for compiler-generated prefetches inside loops.. For more information, see qopt-prefetch-distance, Qopt-prefetch-distance.
Option [q or Q]opt-prefetch-loads-only, which tells the compiler to only insert prefetches based on the loads inside the loop. Stores are ignored. For more information, see qopt-prefetch-loads-only, Qopt-prefetch-loads-only.
You can specify an ALLOCATE clause in the SCOPE directive. For more information, see ALLOCATE Clause.
You can specify a HINT clause in the ATOMIC and CRITICAL directives. For more information, see HINT Clause.
METADIRECTIVE directive
Specifies variant OpenMP directives, one of which may conditionally replace the metadirective based on the OpenMP context enclosing the metadirective. For more information, see METADIRECTIVE.
You can specify the MAP map-type-modifier PRESENT in the DECLARE MAPPER directive. For more information, see DECLARE MAPPER.
You can specify contexts and context selectors. For more information, see OpenMP* Contexts. Context selectors are permitted in the MATCH clause in the DECLARE VARIANT directive. For more information, see DECLARE VARIANT.
For DEPOBJ directives, the previous syntax for clause DESTROY has been deprecated. The new syntax is DESTROY (destroy-var). For more information, see DEPOBJ.
In a TASKLOOP directive, you can specify modifier STRICT for clauses GRAINSIZE and NUM_TASKS. For more information, see TASKLOOP.
The ORDER clause replaces the ORDER (CONCURRENT) clause. For more information, see ORDER Clause.
You can specify an ORDER clause in the DISTRIBUTE directive. For more information, see DISTRIBUTE Clause.
GROUPPRIVATE directive
Specifies that a variable is replicated once per group of threads participating in a parallel region. For more information, see GROUPPRIVATE.
DEVICE_TYPE clause
Specifies whether a version of a procedure or a copy of a data entity is to be available on a HOST device, a non-HOST device, or both. For more information, see DEVICE_TYPE.
Option -fopenmp-device-code-split (Linux) and /Qopenmp-device-code-split (Windows), which enable parallel compilation of SPIR-V* kernels for OpenMP offload Ahead-Of-Time compilation. For more information, see fopenmp-device-code-split, Qopenmp-device-code-split.
Option -fopenmp-max-parallel-link-jobs (Linux) and /Qopenmp-max-parallel-link-jobs (Windows), which determine the maximum number of parallel actions to be performed during device linking steps, where applicable.. For more information, see fopenmp-max-parallel-link-jobs, Qopenmp-max-parallel-link-jobs.
Option fsanitize, which enables the specified code sanitizer to detect certain issues at runtime. For more information, see fsanitize.
Option fprofile-ml-use, which enables the use of a pre-trained machine learning model to predict branch execution probabilities driving profile-guided optimizations. For more information, see fprofile-ml-use.
Options -mno-gather (Linux) and /Qgather- (Windows), which disable the generation of gather instructions in auto-vectorization. For more information, see mno-gather, Qgather-.
Options -mno-scatter (Linux) and /Qscatter- (Windows), which disable the generation of scatter instructions in auto-vectorization. For more information, see mno-scatter, Qscatter-.
Options -mauto-arch (Linux) and /Qauto-arch (Windows), which tell the compiler to generate multiple, feature-specific auto-dispatch code paths for x86 architecture processors if there is a performance benefit. For more information, see mauto-arch, Qauto-arch.
Option -flink-huge-device-code, which tells the compiler to place device code later in the linked binary. This is to prevent 32-bit PC-relative relocations between surrounding Executable and Linkable Format (ELF) sections when the device code is larger than 2GB. For more information, see flink-huge-device-code.
Option fopenmp-default-allocator (and Qopenmp-default-allocator), which tells the compiler that all Fortran ALLOCATE statements should be treated as though there was an explicit OpenMP ALLOCATE directive that preceded them. For more information, see fopenmp-default-allocator, Qopenmp-default-allocator.
Enhancement to option -check uninit for Linux. For more information, see option check.
ALLOCATORS directive
Specifies memory allocators to be used to allocate variables in the associated Fortran ALLOCATE statement and to use in their deallocation. For more information, see ALLOCATORS.
TILE directive
Tiles (or blocks) one or more loops of a loop-nest. For more information, see TILE.
Iterators are supported in the DEPEND clause.
Optional END construct directives are supported with strictly structured block construct bodies.
ASSUMES directive
Provides hints to the optimizer about the current compilation unit and all the code it can reach through procedure calls. For more information, see ASSUMES.
ERROR directive
Causes the compiler or runtime system to process an error condition. For more information, see ERROR.
NOTHING directive
Provides documentary clarity in conditionally compiled code or conditional OpenMP code. It has no effect on the semantics or execution of the program. For more information, see NOTHING .
new clauses LINK and INDIRECT for directive DECLARE TARGET
The LINK clause maps the list items for specific device executions, supporting functions called in a TARGET region that refer to the list items. The INDIRECT clause determines whether procedures specified in an ENTER clause can be called by an indirect device invocation. For more information, see DECLARE TARGET.
PREFETCH DATA directive for OpenMP
Suggests to the compiler to preload data into cache. Preloading data in cache minimizes the effects of memory latency. This is an Intel® language extension. For more information, see PREFETCH DATA.
DEPOBJ construct
Initializes, updates, or uninitializes an OpenMP depend object. For more information, see DEPOBJ.
INTEROP clause for DISPATCH
For more information, see DISPATCH.
DEPEND types MUTEXINOUTSET, INOUTSET, and DEPOBJ
For more information, see DEPEND.
DECLARE MAPPER with variable length arrays
For more information, see DECLARE MAPPER.
PREFER_TYPE in the APPEND_ARGS clause of DECLARE VARIANT
For more information, see DECLARE VARIANT.
SCOPE construct
For more information, see SCOPE.
Compiler option flto
Enables whole program link time optimization (LTO). For more information, see flto.
OpenMP 5.1 feature: UNROLL construct
Partially or fully unrolls a DO loop. For more information, see UNROLL.
OpenMP 5.1 feature: You can specify PRESENT as a map-type-modifier in a MAP clause. For more information, see MAP .
OpenMP 5.1 feature: SCAN directive
Specifies a scan computation that updates each list item in each iteration of the loop. For more information, see SCAN .
Compiler option fopenmp-target-do-concurrent and Qopenmp-target-do-concurrent
This option determines whether a DO CONCURRENT construct is automatically converted into an OpenMP* TARGET region. For more information, see fopenmp-target-do-concurrent, Qopenmp-target-do-concurrent.
Support for ATTRIBUTES directives DLLIMPORT and DLLEXPORT
These directives enable you to create and use dynamic libraries in the Windows environment.
Fortran 2018 coarray features and coarrays with allocatable fields
Coarrays, including Fortran 2018 teams and events, are fully supported.
Support for Fortran 2018 C interoperability
All C interoperability features, including assumed rank arrays and C array descriptors are supported.
Support for compiler option check bounds
Array bounds checking is supported
Support for general directive !DIR$ ASSUME
The !DIR$ ASSUME directive is supported for the check and assume options that ifx supports.
Support for compiler option [Q]init
This option allows classes of variables to be initialized to zero or IEEE exceptional values.
Support for dynamic COMMON
Compiler option [Q]dyncom allows COMMON blocks to be allocated dynamically instead of statically.
F2008 Parameterized derived types (PDTs).
IEEE compares (-assume ieee_compares).
The DIM argument of many array intrinsics can be a present optional argument.
VAX union and structures (Intel language extension).
The argument to the C_LOC function in the intrinsic module ISO_C_BINDING conforms to the Fortran standard definition.
DECLARE MAPPER directive
Declares a user-defined mapper for the specified type, and optionally declares a map-identifier which can be used in a MAP clause on other directives or in a motion-clause of a TARGET UPDATE directive. For more information, see DECLARE MAPPER.
FIRSTPRIVATE and PRIVATE clauses have been added to the TARGET directive, and implicit-behaviors ALLOC, TO, TOFROM, FROM, FIRSTPRIVATE, NONE and default have been added to the DEFAULTMAP clause of the TARGET directive. For more information, see TARGET.
You can specify implicit-behavior in the DEFAULTMAP clause for the TARGET directive. For more information, see TARGET.
You can specify the TO clause for the DECLARE TARGET directive. For more information, see DECLARE TARGET.
ifx provides improved debugging of CPU and offloaded code.
Variable expressions are supported in FORMAT specifiers. See Variable Format Expressions.
Option [q or Q]opt-for-throughput
Determines how the compiler optimizes for throughput depending on whether the program is to run in single-job or multi-job mode. For more information see qopt-for-throughput, Qopt-for-throughput.
You can specify the DEPEND clause and the NOWAIT clause in an OpenMP* TASKWAIT directive.
You can specify PRIMARY as a PROC_BIND specifier in an OpenMP* PARALLEL directive.
Option -fopenmp-target-buffers=default|4G and /Qopenmp-target-buffers:default|4G
Specifying 4G enables a way to overcome the problem where some offload SPIR_V devices produce incorrect code when a target object is greater than 4GB. For more information see fopenmp-target-buffers, Qopenmp-target-buffers.
Option -fopenmp has been deprecated, use option -qopenmp or option -fiopenmp.
You can specify BLOCK constructs.
You can specify intrinsic routine EXECUTE_COMMAND_LINE.
You can specify intrinsic routine FINDLOC.
You can specify the BACK argument in MAXLOC and MINLOC intrinsic routines.
You can specify the IN_REDUCTION clause and the HAS_DEVICE_ADDR clause in the TARGET directive.
You can specify the ALIGN clause in an ALLOCATE directive.
You can specify the ALIGN modifier in an ALLOCATE clause.
You can specify the MASKED construct (without the FILTER clause) as an alternate to MASTER, which has been deprecated.
You can specify OpenMP* combined constructs with MASKED or MASTER in them.
Preprocessor cmake macro __INTEL_LLVM_COMPILER
Is replaced by the version of the compiler in format VVVVMMUU. For more information on the macro and format, see Using Predefined Preprocessor Symbols.
Enhancement to the DECLARE VARIANT directive
You can specify clauses ADJUST_ARGS and APPEND_ARGS and you can specify one or more architectures in the MATCH (context-selector-specification) for the directive. For more information, including what architecture values you can specify, see DECLARE VARIANT.
Intel-specific OpenMP* memory allocators
You can specify additional predefined memory spaces that are Intel extensions to the OpenMP* standard. For more information, see OpenMP* Memory Spaces and Allocators.
TASK and DEFAULT OpenMP* reduction modifiers
You can specify TASK and DEFAULT in REDUCTION clauses. For more information, see REDUCTION.
USE_DEVICE_ADDR clause
Indicates that list iems in the structured block of the construct are references to the device address of the item if the item has corresponding storage in the device data environment. For more information, see TARGET DATA.
Compiler option fopenmp-targets and Qopenmp-targets
Enables offloading to a specified GPU target if OpenMP* features have been enabled. For more information, see fopenmp-targets, Qopenmp-targets.
ALLOCATE clause
Specifies the memory allocator to be used for one or more private variables or common blocks of a construct. For more information, see ALLOCATE Clause.
ALLOCATE directive
Specifies memory allocators to use for object allocation and deallocation. For more information, see ALLOCATE Directive.
DECLARE VARIANT directive
Identifies a variant of a base procedure and specifies the context in which this variant is used. For more information, see DECLARE VARIANT.
DISPATCH directive
Determines if a variant of a procedure is called for a given function or subroutine call. For more information, see DISPATCH.
INTEROP directive
Identifies a foreign runtime context and identifies runtime characteristics of that context, enabling interoperability with it. For more information, see INTEROP.
LOOP construct
Specifies that the iterations of the associated loops can execute concurrently. For more information, see LOOP.
ORDER (CONCURRENT) clause
Indicates that the iterations of the loop may execute in any order or simultaneously. For more information, see LOOP and DO Directive.
PARALLEL LOOP directive
Specifies a shortcut for indicating that a loop or loop nest can execute concurrently across multiple threads. For more information, see PARALLEL LOOP.
REQUIRES directive
Lists the features that an implementation must support so that the program compiles and runs correctly. For more information, see REQUIRES.
TARGET PARALLEL LOOP directive
Specifies a shortcut for specifying a parallel loop inside a TARGET construct that contains no other statements than the parallel loop. For more information, see TARGET PARALLEL LOOP.
TARGET TEAMS LOOP construct
Specifies a shortcut for specifying a TEAMS LOOP construct inside a TEAMS construct that contains no other statements. For more information, see TARGET TEAMS LOOP.
TEAMS construct
You can specify a TEAMS construct outside of a TARGET region. For more information about about the construct, see TEAMS.
TEAMS LOOP construct
Specifies a shortcut for specifying a LOOP construct inside a TEAMS construct. For more information, see TEAMS LOOP.