> 2018-06-27 10:09 GMT+02:00 Janne Blomqvist <blomqvist.ja...@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