# New Features for ifx

The following ifort/Fortran 2018 features are now available for ifx:

- 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 now fully supported.

- Support for Fortran 2018 C interoperability

  All C interoperability features, including assumed rank arrays and C array descriptors are now supported.

- Support for compiler option check bounds

  Array bounds checking is now supported

- Support for general directive !DIR$ ASSUME

  The !DIR$ ASSUME directive is now 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.

The following new OpenMP 5.1 features are available for ifx:

- UNROLL construct

  Partially or fully unrolls a DO loop. For more information, see UNROLL.

- You can now specify PRESENT as a map-type-modifier in a MAP clause. For more information, see MAP .

- SCAN directive (previously in ifort)

  Specifies a scan computation that updates each list item in each iteration of the loop. For more information, see SCAN .

The following features were previously shown as new for ifx:

- F2008 Parameterized derived types (PDTs).

- IEEE compares (-assume ieee_compares).

- The DIM argument of many array intrinsics can now 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 now 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 now specify implicit-behavior in the DEFAULTMAP clause for the TARGET directive. For more information, see TARGET.

- You can now 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 now specify the DEPEND clause and the NOWAIT clause in an OpenMP* TASKWAIT directive.

- You can now 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 now specify BLOCK constructs.

- You can now specify intrinsic routine EXECUTE_COMMAND_LINE.

- You can now specify intrinsic routine FINDLOC.

- You can now specify the BACK argument in MAXLOC and MINLOC intrinsic routines.

- You can now specify the IN_REDUCTION clause and the HAS_DEVICE_ADDR clause in the TARGET directive.

- You can now specify the ALIGN clause in an ALLOCATE directive.

- You can now specify the ALIGN modifier in an ALLOCATE clause.

- You can now specify the MASKED construct (without the FILTER clause) as an alternate to MASTER, which has been deprecated.

- You can now 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 now 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 now 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 now 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.

- TARGET VARIANT DISPATCH directive

  Conditionally calls a procedure offload variant if the device is free; otherwise, executes the procedure on the host. For more information, see TARGET VARIANT DISPATCH.

- TEAMS construct

  You can now 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.

Parent topic: Language Reference