129 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| dnl @synopsis AX_CC_MAXOPT
 | |
| dnl @summary turn on optimization flags for the C compiler
 | |
| dnl @category C
 | |
| dnl
 | |
| dnl Try to turn on "good" C optimization flags for various compilers
 | |
| dnl and architectures, for some definition of "good".  (In our case,
 | |
| dnl good for FFTW and hopefully for other scientific codes.  Modify 
 | |
| dnl as needed.)
 | |
| dnl
 | |
| dnl The user can override the flags by setting the CFLAGS environment
 | |
| dnl variable.  
 | |
| dnl
 | |
| dnl Note also that the flags assume that ANSI C aliasing rules are
 | |
| dnl followed by the code (e.g. for gcc's -fstrict-aliasing), and that
 | |
| dnl floating-point computations can be re-ordered as needed.
 | |
| dnl
 | |
| dnl Requires macros: AX_CHECK_COMPILER_FLAGS, AX_COMPILER_VENDOR,
 | |
| dnl
 | |
| dnl @version 2011-06-22
 | |
| dnl @license GPLWithACException
 | |
| dnl @author Steven G. Johnson <stevenj@alum.mit.edu> and Matteo Frigo.
 | |
| AC_DEFUN([AX_CC_MAXOPT],
 | |
| [
 | |
| AC_REQUIRE([AC_PROG_CC])
 | |
| AC_REQUIRE([AX_COMPILER_VENDOR])
 | |
| AC_REQUIRE([AC_CANONICAL_HOST])
 | |
| 
 | |
| # Try to determine "good" native compiler flags if none specified via CFLAGS
 | |
| if test "$ac_test_CFLAGS" != "set"; then
 | |
|   CFLAGS=""
 | |
|   case $ax_cv_c_compiler_vendor in
 | |
|     dec) CFLAGS="-newc -w0 -O5 -ansi_alias -ansi_args -fp_reorder -tune host"
 | |
|     	 ;;
 | |
| 
 | |
|     sun) CFLAGS="-native -fast -xO5 -dalign"
 | |
|     	 ;;
 | |
| 
 | |
|     hp)  CFLAGS="+Oall +Optrs_ansi +DSnative"
 | |
|     	 ;;
 | |
| 
 | |
|     ibm) xlc_opt="-qarch=auto -qtune=auto"
 | |
|          AX_CHECK_COMPILER_FLAGS($xlc_opt,
 | |
|          	CFLAGS="-O3 -qalias=ansi -w $xlc_opt",
 | |
|                [CFLAGS="-O3 -qalias=ansi -w"])
 | |
|          ;;
 | |
| 
 | |
|     intel) CFLAGS="-O3"
 | |
|         # Intel seems to have changed the spelling of this flag recently
 | |
|         icc_ansi_alias="unknown"
 | |
| 	for flag in -ansi-alias -ansi_alias; do
 | |
| 	  AX_CHECK_COMPILER_FLAGS($flag, [icc_ansi_alias=$flag; break])
 | |
| 	done
 | |
|  	if test "x$icc_ansi_alias" != xunknown; then
 | |
|             CFLAGS="$CFLAGS $icc_ansi_alias"
 | |
|         fi
 | |
| 	AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
 | |
| 	# We used to check for architecture flags here, e.g. -xHost etc.,
 | |
| 	# but these flags are problematic.  On icc-12.0.0, "-mavx -xHost"
 | |
| 	# overrides -mavx with -xHost, generating SSE2 code instead of AVX
 | |
| 	# code.  ICC does not seem to support -mtune=host or equivalent
 | |
| 	# non-ABI changing flag.
 | |
| 	;;
 | |
|     
 | |
|     clang)
 | |
|         CFLAGS="-O3 -fomit-frame-pointer"
 | |
|         AX_CHECK_COMPILER_FLAGS(-mtune=native, CFLAGS="$CFLAGS -mtune=native")
 | |
|         AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,CFLAGS="$CFLAGS -fstrict-aliasing")
 | |
|         ;;
 | |
| 
 | |
|     gnu) 
 | |
|      # Default optimization flags for gcc on all systems.
 | |
|      # Somehow -O3 does not imply -fomit-frame-pointer on ia32
 | |
|      CFLAGS="-O3 -fomit-frame-pointer"
 | |
| 
 | |
|      # tune for the host by default
 | |
|      AX_CHECK_COMPILER_FLAGS(-mtune=native, CFLAGS="$CFLAGS -mtune=native")
 | |
| 
 | |
|      # -malign-double for x86 systems
 | |
|      AX_CHECK_COMPILER_FLAGS(-malign-double, CFLAGS="$CFLAGS -malign-double")
 | |
| 
 | |
|      #  -fstrict-aliasing for gcc-2.95+
 | |
|      AX_CHECK_COMPILER_FLAGS(-fstrict-aliasing,
 | |
| 	CFLAGS="$CFLAGS -fstrict-aliasing")
 | |
| 
 | |
|      # -fno-schedule-insns is pretty much required on all risc
 | |
|      # processors.
 | |
|      # 
 | |
|      # gcc performs one pass of instruction scheduling, then a pass of
 | |
|      # register allocation, then another pass of instruction
 | |
|      # scheduling.  The first pass reorders instructions in a way that
 | |
|      # is pretty much the worst possible for the purposes of register
 | |
|      # allocation.  We disable the first pass.
 | |
|      AX_CHECK_COMPILER_FLAGS(-fno-schedule-insns, CFLAGS="$CFLAGS -fno-schedule-insns")
 | |
| 
 | |
|      # flags to enable power ISA 2.07 instructions with gcc (always true with vsx)
 | |
|      if test "$have_vsx" = "yes"; then
 | |
|          AX_CHECK_COMPILER_FLAGS(-mcpu=power8, CFLAGS="$CFLAGS -mcpu=power8")
 | |
|          AX_CHECK_COMPILER_FLAGS(-mpower8-fusion, CFLAGS="$CFLAGS -mpower8-fusion")
 | |
|          AX_CHECK_COMPILER_FLAGS(-mpower8-vector, CFLAGS="$CFLAGS -mpower8-vector")
 | |
|          AX_CHECK_COMPILER_FLAGS(-mdirect-move, CFLAGS="$CFLAGS -mdirect-move")
 | |
|      fi
 | |
|      ;;
 | |
|   esac
 | |
| 
 | |
|   if test -z "$CFLAGS"; then
 | |
| 	echo ""
 | |
| 	echo "********************************************************"
 | |
|         echo "* WARNING: Don't know the best CFLAGS for this system  *"
 | |
|         echo "* Use ./configure CFLAGS=... to specify your own flags *"
 | |
| 	echo "* (otherwise, a default of CFLAGS=-O3 will be used)    *"
 | |
| 	echo "********************************************************"
 | |
| 	echo ""
 | |
|         CFLAGS="-O3"
 | |
|   fi
 | |
| 
 | |
|   AX_CHECK_COMPILER_FLAGS($CFLAGS, [], [
 | |
| 	echo ""
 | |
|         echo "********************************************************"
 | |
|         echo "* WARNING: The guessed CFLAGS don't seem to work with  *"
 | |
|         echo "* your compiler.                                       *"
 | |
|         echo "* Use ./configure CFLAGS=... to specify your own flags *"
 | |
|         echo "********************************************************"
 | |
|         echo ""
 | |
|         CFLAGS=""
 | |
|   ])
 | |
| 
 | |
| fi
 | |
| ])
 | 
