diff --git a/ares/configure.ac b/ares/configure.ac
index 6aaf47896dc4b38dfbda8c3ff758178fb5ec4fad..d90d70b0c5f941d4f25a841d7ad002436462b5b9 100644
--- a/ares/configure.ac
+++ b/ares/configure.ac
@@ -160,11 +160,22 @@ case $host in
   #
 esac
 
-CURL_CHECK_DEF([__xlc__])
-if test "$curl_cv_have_def___xlc__" = "yes"; then
-  dnl Force xlc to stop after the compilation phase, and not
-  dnl generate object code file when compilation has errors.
+AC_MSG_CHECKING([whether we are using the IBM C compiler])
+CURL_CHECK_DEF([__IBMC__], [], [silent])
+if test "$curl_cv_have_def___IBMC__" = "yes"; then
+  AC_MSG_RESULT([yes])
+  dnl Ensure that compiler optimizations are always thread-safe.
+  CFLAGS="$CFLAGS -qthreaded"
+  dnl Disable type based strict aliasing optimizations, using worst
+  dnl case aliasing assumptions when compiling. Type based aliasing
+  dnl would restrict the lvalues that could be safely used to access
+  dnl a data object.
+  CFLAGS="$CFLAGS -qnoansialias"
+  dnl Force compiler to stop after the compilation phase, without
+  dnl generating an object code file when compilation has errors.
   CFLAGS="$CFLAGS -qhalt=e"
+else
+  AC_MSG_RESULT([no])
 fi
 
 CURL_CHECK_COMPILER_HALT_ON_ERROR
@@ -429,23 +440,6 @@ if test "x$RECENTAIX" = "xyes"; then
 
   AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
 
-  dnl check if this is the IBM xlc compiler
-  dnl Details thanks to => http://predef.sourceforge.net/
-  AC_MSG_CHECKING([if this is the xlc compiler])
-  AC_EGREP_CPP([^__xlC__], [__xlC__],
-         dnl action if the text is found, this it has not been replaced by the
-         dnl cpp
-         XLC="no"
-         AC_MSG_RESULT([no]),
-         dnl the text was not found, it was replaced by the cpp
-         XLC="yes"
-         AC_MSG_RESULT([yes])
-         CFLAGS="$CFLAGS -qthreaded"
-         dnl AIX xlc has to have strict aliasing turned off. If not,
-         dnl the optimizer assumes that pointers can only point to
-         dnl an object of the same type.
-         CFLAGS="$CFLAGS -qnoansialias"
-       )
 fi
 
 
diff --git a/configure.ac b/configure.ac
index ab20f827cafc62f559cd3ff56831d735128eefb0..ad25bde6e10c467772335c9ffdb4f03a258ce749 100644
--- a/configure.ac
+++ b/configure.ac
@@ -249,11 +249,22 @@ case $host in
   #
 esac
 
-CURL_CHECK_DEF([__xlc__])
-if test "$curl_cv_have_def___xlc__" = "yes"; then
-  dnl Force xlc to stop after the compilation phase, and not
-  dnl generate object code file when compilation has errors.
+AC_MSG_CHECKING([whether we are using the IBM C compiler])
+CURL_CHECK_DEF([__IBMC__], [], [silent])
+if test "$curl_cv_have_def___IBMC__" = "yes"; then
+  AC_MSG_RESULT([yes])
+  dnl Ensure that compiler optimizations are always thread-safe.
+  CFLAGS="$CFLAGS -qthreaded"
+  dnl Disable type based strict aliasing optimizations, using worst
+  dnl case aliasing assumptions when compiling. Type based aliasing
+  dnl would restrict the lvalues that could be safely used to access
+  dnl a data object.
+  CFLAGS="$CFLAGS -qnoansialias"
+  dnl Force compiler to stop after the compilation phase, without
+  dnl generating an object code file when compilation has errors.
   CFLAGS="$CFLAGS -qhalt=e"
+else
+  AC_MSG_RESULT([no])
 fi
 
 CURL_CHECK_COMPILER_HALT_ON_ERROR
@@ -1819,25 +1830,6 @@ if test "x$RECENTAIX" = "xyes"; then
 
   AC_DEFINE(_THREAD_SAFE, 1, [define this if you need it to compile thread-safe code])
 
-  dnl check if this is the IMB xlc compiler
-  dnl Details thanks to => http://predef.sourceforge.net/
-  AC_MSG_CHECKING([if this is the xlc compiler])
-  AC_EGREP_CPP([^__xlC__], [__xlC__],
-         dnl action if the text is found, this it has not been replaced by the
-         dnl cpp
-         XLC="no"
-         AC_MSG_RESULT([no]),
-         dnl the text was not found, it was replaced by the cpp
-         XLC="yes"
-         AC_MSG_RESULT([yes])
-         CFLAGS="$CFLAGS -qthreaded"
-         dnl AIX xlc has to have strict aliasing turned off. If not,
-         dnl the optimizer assumes that pointers can only point to
-         dnl an object of the same type.
-         CFLAGS="$CFLAGS -qnoansialias"
-       )
-
-
   dnl is there a localtime_r()
   CURL_CHECK_LOCALTIME_R()