| ! RUN: %flang_fc1 -fdebug-unparse %s 2>&1 | FileCheck %s |
| |
| ! Test that compiler directives can appear in various places. |
| |
| #define PROC(KIND) \ |
| interface; integer(KIND) function foo(a); \ |
| integer(KIND), intent(in) :: a; \ |
| !dir$ ignore_tkr a; \ |
| end; end interface |
| |
| !dir$ integer |
| module m |
| !dir$ integer |
| use iso_fortran_env |
| !dir$ integer |
| implicit integer(a-z) |
| !dir$ integer |
| !dir$ integer=64 |
| !dir$ integer = 64 |
| !dir$ integer = 64 |
| PROC(4) |
| !dir$ optimize:1 |
| !dir$ optimize : 1 |
| !dir$ loop count (10000) |
| !dir$ loop count (1, 500, 5000, 10000) |
| type stuff |
| real(8), allocatable :: d(:) |
| !dir$ align : 1024 :: d |
| end type stuff |
| end |
| |
| subroutine vector_always |
| !dir$ vector always |
| ! CHECK: !DIR$ VECTOR ALWAYS |
| do i=1,10 |
| enddo |
| end subroutine |
| |
| subroutine unroll |
| !dir$ unroll |
| ! CHECK: !DIR$ UNROLL |
| do i=1,10 |
| enddo |
| !dir$ unroll 2 |
| ! CHECK: !DIR$ UNROLL 2 |
| do i=1,10 |
| enddo |
| !dir$ nounroll |
| ! CHECK: !DIR$ NOUNROLL |
| do i=1,10 |
| enddo |
| end subroutine |
| |
| subroutine unroll_and_jam |
| !dir$ unroll_and_jam |
| ! CHECK: !DIR$ UNROLL_AND_JAM |
| do i=1,10 |
| enddo |
| !dir$ unroll_and_jam 2 |
| ! CHECK: !DIR$ UNROLL_AND_JAM 2 |
| do i=1,10 |
| enddo |
| !dir$ nounroll_and_jam |
| ! CHECK: !DIR$ NOUNROLL_AND_JAM |
| do i=1,10 |
| enddo |
| end subroutine |
| |
| subroutine no_vector |
| !dir$ novector |
| ! CHECK: !DIR$ NOVECTOR |
| do i=1,10 |
| enddo |
| end subroutine |
| |
| subroutine inline |
| integer :: a |
| !dir$ forceinline |
| ! CHECK: !DIR$ FORCEINLINE |
| a = f(2) |
| |
| !dir$ inline |
| ! CHECK: !DIR$ INLINE |
| call g() |
| |
| !dir$ noinline |
| ! CHECK: !DIR$ NOINLINE |
| call g() |
| |
| contains |
| function f(x) |
| integer :: x |
| f = x**2 |
| end function |
| |
| subroutine g() |
| end subroutine |
| end subroutine |