141 lines
3.3 KiB
Fortran
141 lines
3.3 KiB
Fortran
! RUN: bbc -emit-fir %s -o - | FileCheck %s --check-prefixes="CHECK,PRECISE"
|
|
! RUN: bbc --math-runtime=precise -emit-fir %s -o - | FileCheck %s --check-prefixes="PRECISE"
|
|
! RUN: bbc --force-mlir-complex -emit-fir %s -o - | FileCheck %s --check-prefixes="FAST"
|
|
! RUN: %flang_fc1 -emit-fir %s -o - | FileCheck %s --check-prefixes="CHECK,PRECISE"
|
|
! RUN: %flang_fc1 -fapprox-func -emit-fir %s -o - | FileCheck %s --check-prefixes="CHECK,FAST"
|
|
! RUN: %flang_fc1 -emit-fir -mllvm --math-runtime=precise %s -o - | FileCheck %s --check-prefixes="PRECISE"
|
|
! RUN: %flang_fc1 -emit-fir -mllvm --force-mlir-complex %s -o - | FileCheck %s --check-prefixes="FAST"
|
|
|
|
! Test power operation lowering
|
|
|
|
! CHECK-LABEL: pow_r4_i4
|
|
subroutine pow_r4_i4(x, y, z)
|
|
real :: x, z
|
|
integer :: y
|
|
z = x ** y
|
|
! CHECK: math.fpowi {{.*}} : f32, i32
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_r4_r4
|
|
subroutine pow_r4_r4(x, y, z)
|
|
real :: x, z, y
|
|
z = x ** y
|
|
! CHECK: math.powf %{{.*}}, %{{.*}} : f32
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_r4_i8
|
|
subroutine pow_r4_i8(x, y, z)
|
|
real :: x, z
|
|
integer(8) :: y
|
|
z = x ** y
|
|
! CHECK: math.fpowi {{.*}} : f32, i64
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_r8_i4
|
|
subroutine pow_r8_i4(x, y, z)
|
|
real(8) :: x, z
|
|
integer :: y
|
|
z = x ** y
|
|
! CHECK: math.fpowi {{.*}} : f64, i32
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_r8_i8
|
|
subroutine pow_r8_i8(x, y, z)
|
|
real(8) :: x, z
|
|
integer(8) :: y
|
|
z = x ** y
|
|
! CHECK: math.fpowi {{.*}} : f64, i64
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_r8_r8
|
|
subroutine pow_r8_r8(x, y, z)
|
|
real(8) :: x, z, y
|
|
z = x ** y
|
|
! CHECK: math.powf %{{.*}}, %{{.*}} : f64
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_r4_r8
|
|
subroutine pow_r4_r8(x, y, z)
|
|
real(4) :: x
|
|
real(8) :: z, y
|
|
z = x ** y
|
|
! CHECK: %{{.*}} = fir.convert %{{.*}} : (f32) -> f64
|
|
! CHECK: math.powf %{{.*}}, %{{.*}} : f64
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_i1_i1
|
|
subroutine pow_i1_i1(x, y, z)
|
|
integer(1) :: x, y, z
|
|
z = x ** y
|
|
! CHECK: math.ipowi %{{.*}}, %{{.*}} : i8
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_i2_i2
|
|
subroutine pow_i2_i2(x, y, z)
|
|
integer(2) :: x, y, z
|
|
z = x ** y
|
|
! CHECK: math.ipowi %{{.*}}, %{{.*}} : i16
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_i4_i4
|
|
subroutine pow_i4_i4(x, y, z)
|
|
integer(4) :: x, y, z
|
|
z = x ** y
|
|
! CHECK: math.ipowi %{{.*}}, %{{.*}} : i32
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_i8_i8
|
|
subroutine pow_i8_i8(x, y, z)
|
|
integer(8) :: x, y, z
|
|
z = x ** y
|
|
! CHECK: math.ipowi %{{.*}}, %{{.*}} : i64
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_c4_i4
|
|
subroutine pow_c4_i4(x, y, z)
|
|
complex :: x, z
|
|
integer :: y
|
|
z = x ** y
|
|
! CHECK: call @_FortranAcpowi
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_c4_i8
|
|
subroutine pow_c4_i8(x, y, z)
|
|
complex :: x, z
|
|
integer(8) :: y
|
|
z = x ** y
|
|
! CHECK: call @_FortranAcpowk
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_c8_i4
|
|
subroutine pow_c8_i4(x, y, z)
|
|
complex(8) :: x, z
|
|
integer :: y
|
|
z = x ** y
|
|
! CHECK: call @_FortranAzpowi
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_c8_i8
|
|
subroutine pow_c8_i8(x, y, z)
|
|
complex(8) :: x, z
|
|
integer(8) :: y
|
|
z = x ** y
|
|
! CHECK: call @_FortranAzpowk
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_c4_c4
|
|
subroutine pow_c4_c4(x, y, z)
|
|
complex :: x, y, z
|
|
z = x ** y
|
|
! FAST: complex.pow %{{.*}}, %{{.*}} : complex<f32>
|
|
! PRECISE: call @cpowf
|
|
end subroutine
|
|
|
|
! CHECK-LABEL: pow_c8_c8
|
|
subroutine pow_c8_c8(x, y, z)
|
|
complex(8) :: x, y, z
|
|
z = x ** y
|
|
! FAST: complex.pow %{{.*}}, %{{.*}} : complex<f64>
|
|
! PRECISE: call @cpow
|
|
end subroutine
|
|
|