anchor.diff:    END IF
   
     ! Deallocate global arrays
  +  DO i = 1, s
  +    DEALLOCATE( a(i)%matrix )
  +    DEALLOCATE( b(i)%matrix )
  +  END DO 
     DEALLOCATE(a)
     DEALLOCATE(b)
     DEALLOCATE(c)
  
positive.code:       !$OMP END MASTER
        !$OMP DO
        DO i = LBOUND(a, 1), UBOUND(a, 1)
          CALL xmm(C_LOC(a(i,:,:)), C_LOC(b(i,:,:)), C_LOC(tmp))
        END DO
        !$OMP MASTER
        !$ duration = duration + omp_get_wtime()
  
negative.code:   END IF
    s = LSHIFT(INT8(MAX(i, 0)), 30) / ((m * k + k * n + m * n) * T)
  
    ALLOCATE(c(m,n))
    ALLOCATE(a(s))
    ALLOCATE(b(s))
  
    ! Initialize a, b
    !@TODO figure out how to allocate a,b matrices cont. without
    ! additional copies when call LIBXSMM in the F90 compiler
    !$OMP PARALLEL DO PRIVATE(i) DEFAULT(NONE) SHARED(a, b, m, n, k, s)
    DO i = 1, s
      ALLOCATE( a(i)%matrix(m, k) )
      CALL init(42, a(i)%matrix(:, :), i - 1)
      ALLOCATE( b(i)%matrix(k, n) )
      CALL init(24, b(i)%matrix(:, :), i - 1)
    END DO 
    c(:,:) = 0
  
    WRITE (*, "(A,I3,A,I3,A,I3,A,I6)") "m=", m, " n=", n, " k=", k, " size=", UBOUND(a, 1) 
  