| Issue |
176282
|
| Summary |
[Flang] Question on SUM result differences between -O0 and -O1
|
| Labels |
flang
|
| Assignees |
|
| Reporter |
nakazawa-fj
|
```
Version of flang : 22.0.0git(2f7e218017db69454ea84e1849fcb9a11b1f7fef)/AArch64
```
I have a question about SUM result differences between -O0 and -O1 in Flang on an Arm64 (Aarch64) system.
While inspecting the assembly generated by Flang, I noticed that at -O0 the SUM operation uses `_FortranASumReal4`.
In this configuration, the numerical result at -O0 differs from the result produced at -O1.
Are the result differences between -O0 and -O1 considered correct behavior (e.g., due to optimization or floating-point\
handling)?
Are there any recommended compiler flags in Flang to obtain invariant numerical results across optimization levels?
sample.f90
```fortran
program main
integer,parameter :: N=76
real(kind=4),parameter :: val=1._4
real(kind=4),dimension(1:N,1:N,1:N) :: a3
a3 = val
do i=1, N-1
do j=1, N
do k=1, N
a3(i+1,j,k) = a3(i,j,k) + val
enddo
enddo
enddo
write(1002) a3
rewind 1002
call sub
end program main
subroutine sub
integer,parameter :: N=76
real(kind=4),dimension(1:N,1:N,1:N) :: a
read(1002) a
print *,' SUM: ',sum(a)
end subroutine sub
```
flang
```
$ flang sample.f90 -O0; ./a.out
SUM: 1.6900576E+07
$ flang sample.f90 -O1; ./a.out
SUM: 1.689898E+07
$ flang sample.f90 -Ofast; ./a.out
flang-22: warning: argument '-Ofast' is deprecated; use '-O3 -ffast-math -fstack-arrays' for the same behavior, or '-O3 -fstack-arrays' to enable only conforming optimizations [-Wdeprecated-ofast]
SUM: 1.6900492E+07
$ flang sample.f90 -O3 -fstack-arrays; ./a.out
SUM: 1.689898E+07
```
gfortran
```
$ gfortran sample.f90 -O0; ./a.out
SUM: 16898980.0
$ gfortran sample.f90 -O1; ./a.out
SUM: 16898980.0
$ gfortran sample.f90 -Ofast; ./a.out
SUM: 16900576.0
$ gfortran sample.f90 -O3 -fstack-arrays; ./a.out
SUM: 16898980.0
```
ifx
```
$ ifx sample.f90 -O0; ./a.out
SUM: 1.6898980E+07
$ ifx sample.f90 -O1; ./a.out
SUM: 1.6898980E+07
$ ifx sample.f90 -Ofast; ./a.out
SUM: 1.6898980E+07
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs