This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch, fortran] Handling of .and. and .or. expressions
> 2018-06-27 10:09 GMT+02:00 Janne Blomqvist <blomqvist.janne@gmail.com>:
> >
> > How about committing a patch changing to use TRUTH_{AND|OR}_EXPR, and then
> > check benchmark results (polyhedron, spec etc.)? If performance worsens, we
> > revert, if it improves, great, lets keep it?
>
> I would definitely support that. I cannot imagine that it will have a
> large impact on benchmarks, but it's certainly a good idea to check.
> (After all: ifort, which is usually perceived as being slightly ahead
> of GCC in terms of performance, does not do this kind of
> short-circuiting either.)
Polyhedron benchmark
Compiler options:
-static -ffpe-summary=none -O3 -pipe -mtune=native
-march=native -ffast-math -ftree-vectorize
Benchmark Unpatched Patched
Name (secs) (sec)
--------- -------- --------
ac 8.06 8.08 0.3%
aermod 20.17 20.88 3.5%
air 3.57 3.58 0.3%
capacita 42.00 42.66 1.6%
channel 1.84 1.88 2.2%
doduc 20.53 20.65 0.6%
fatigue 4.32 4.38 1.4%
gas_dyn 2.20 2.15 (2.3%)
induct 6.19 6.20 0.2%
linpk 7.23 7.79 7.8%
mdbx 7.18 7.26 1.1%
nf 8.12 8.15 0.4%
protein 26.72 26.98 1.0%
rnflow 35.69 35.51 (0.5%)
test_fpu 5.93 6.01 1.4%
tfft 1.82 1.90 4.4%
14 of 16 tests experience a slow down. As this is unscientific,
anything within 1% to 2% may not be significant. However, linpk
is 7.8% slower, tfft is 4.4% slower, and aermod is 3.5% slower.
More importantly, with TRUTH_ANDIF_EXPR and TRUTH_ORIF_EXPR
(the status quo) on x86_64-*-freebsd, I see
=== gfortran Summary ===
# of expected passes 47564
# of expected failures 104
# of unsupported tests 85
/safe/sgk/gcc/obj/gcc/gfortran version 9.0.0 20180626 (experimental) (GCC)
while with TRUTH_AND_EXPR and TRUTH_OR_EXPR, I get
=== gfortran Summary ===
# of expected passes 47558
# of unexpected failures 6
# of expected failures 104
# of unsupported tests 85
FAIL: gfortran.dg/actual_pointer_function_1.f90 -O0 execution test
FAIL: gfortran.dg/actual_pointer_function_1.f90 -O1 execution test
FAIL: gfortran.dg/actual_pointer_function_1.f90 -O2 execution test
FAIL: gfortran.dg/actual_pointer_function_1.f90 -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions execution test
FAIL: gfortran.dg/actual_pointer_function_1.f90 -O3 -g execution test
FAIL: gfortran.dg/actual_pointer_function_1.f90 -Os execution test
Execution timeout is: 300
spawn [open ...]
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7ffffffff1a2 in ???
#1 0x400c09 in ???
#2 0x400b91 in ???
#3 0x400c51 in ???
#4 0x400854 in _start
at /usr/src/lib/csu/amd64/crt1.c:74
#5 0x200627fff in ???
--
Steve
- References:
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions
- Re: [patch, fortran] Handling of .and. and .or. expressions