diff --git a/configure.ac b/configure.ac
index 288f2a6aed9571078ff94aefd71977dd2cb9c602..44d21dc30d408260a11a7b7b100df455b98295d5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,6 @@
 # This file is part of SWIFT.
 # Copyright (C) 2012 pedro.gonnet@durham.ac.uk.
+#               2016 p.w.draper@durham.ac.uk.
 #
 # This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -37,13 +38,43 @@ AM_PROG_CC_C_O
 # Enable POSIX and platform extension preprocessor macros.
 AC_USE_SYSTEM_EXTENSIONS
 
-# Add libtool support.
-LT_INIT
-
 # Check for compiler version and vendor.
 AX_COMPILER_VENDOR
 AX_COMPILER_VERSION
 
+# Interprocedural optimization support. Needs special handling for linking and
+# archiving as well as compilation with Intels, needs to be done before
+# libtool is configured (to use correct LD).
+AC_ARG_ENABLE([ipo],
+   [AS_HELP_STRING([--enable-ipo],
+     [Enable interprocedural optimization @<:@no/yes@:>@]
+   )],
+   [enable_ipo="$enableval"],
+   [enable_ipo="no"]
+)
+
+if test "$enable_ipo" = "yes"; then
+   if test "$ax_cv_c_compiler_vendor" = "intel"; then
+      CFLAGS="$CFLAGS -ip -ipo"
+      LDFLAGS="$LDFLAGS -ipo"
+      : ${AR="xiar"}
+      : ${LD="xild"}
+      AC_MSG_RESULT([added Intel interprocedural optimization support])
+   elif test "$ax_cv_c_compiler_vendor" = "gnu"; then
+      CFLAGS="$CFLAGS -flto"
+      LDFLAGS="$LDFLAGS -flto"
+      AC_MSG_RESULT([added GCC interprocedural optimization support])
+   elif test "$ax_cv_c_compiler_vendor" = "clang"; then
+      CFLAGS="$CFLAGS -emit-llvm"
+      AC_MSG_RESULT([added LLVM interprocedural optimization support])
+   else
+      AC_MSG_WARN([Compiler does not support interprocedural optimization])
+   fi
+fi
+
+# Add libtool support.
+LT_INIT
+
 # Check for MPI. Need to do this before characterising the compiler (C99 mode),
 # as this changes the compiler.
 # We should consider using AX_PROG_CC_MPI to replace AC_PROG_CC when compiling
@@ -179,6 +210,7 @@ if test "$enable_san" = "yes"; then
    fi
    if test "$enable_san" = "yes"; then
       CFLAGS="$CFLAGS -fsanitize=address -fno-omit-frame-pointer"
+      AC_MSG_RESULT([added address sanitizer support])
    else
       AC_MSG_WARN([Compiler does not support address sanitizer option])
    fi
@@ -320,12 +352,12 @@ AC_ARG_ENABLE([compiler-warnings],
 if test "$enable_warn" != "no"; then
     AX_CFLAGS_WARN_ALL
     if test "$enable_warn" = "error"; then
-       case "$ax_cv_c_compiler_vendor" in 
-          intel | gnu ) 
+       case "$ax_cv_c_compiler_vendor" in
+          intel | gnu )
              CFLAGS="$CFLAGS -Werror"
           ;;
        esac
-    fi     
+    fi
 fi
 
 # Check for git, needed for revision stamps.