mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-16 11:06:33 +00:00
[flang][cuda] Allow ieee_arithmetic on the device (#131930)
- Allow ieee_arithmetic on the device - Add ignore_tkr(d) to ieee_is_finite
This commit is contained in:
parent
ade22fc1d9
commit
20feca47c1
@ -82,6 +82,14 @@ struct DeviceExprChecker
|
||||
}
|
||||
}
|
||||
}
|
||||
const Symbol &ultimate{sym->GetUltimate()};
|
||||
const Scope &scope{ultimate.owner()};
|
||||
const Symbol *mod{scope.IsModule() ? scope.symbol() : nullptr};
|
||||
// Allow ieee_arithmetic module functions to be called on the device.
|
||||
// TODO: Check for unsupported ieee_arithmetic on the device.
|
||||
if (mod && mod->name() == "ieee_arithmetic") {
|
||||
return {};
|
||||
}
|
||||
} else if (x.GetSpecificIntrinsic()) {
|
||||
// TODO(CUDA): Check for unsupported intrinsics here
|
||||
return {};
|
||||
|
@ -339,6 +339,7 @@ module ieee_arithmetic
|
||||
#define IEEE_IS_FINITE_R(XKIND) \
|
||||
elemental logical function ieee_is_finite_a##XKIND(x); \
|
||||
real(XKIND), intent(in) :: x; \
|
||||
!dir$ ignore_tkr(d) x; \
|
||||
end function ieee_is_finite_a##XKIND;
|
||||
interface ieee_is_finite
|
||||
SPECIFICS_R(IEEE_IS_FINITE_R)
|
||||
|
@ -209,3 +209,15 @@ subroutine host1()
|
||||
a(i) = a(i) + a(j) - 34.0
|
||||
end do
|
||||
end
|
||||
|
||||
subroutine ieee_test
|
||||
use ieee_arithmetic
|
||||
|
||||
real(8), device :: y(100)
|
||||
logical(4), managed :: ll(100)
|
||||
|
||||
!$cuf kernel do(1)<<<*,*>>>
|
||||
do i = 1, 100
|
||||
ll(i) = ieee_is_finite(y(i)) ! allow ieee_arithmetic functions on the device.
|
||||
end do
|
||||
end subroutine
|
||||
|
Loading…
x
Reference in New Issue
Block a user