diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
index d90de34..12bd750 100644
--- a/m4/ax_pthread.m4
+++ b/m4/ax_pthread.m4
@@ -283,11 +283,25 @@ if test "x$ax_pthread_ok" = xyes; then
         LIBS="$save_LIBS"
         CFLAGS="$save_CFLAGS"
 
-        # More AIX lossage: must compile with xlc_r or cc_r
-        if test x"$GCC" != xyes; then
-          AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
-        else
-          PTHREAD_CC=$CC
+        # More AIX lossage: compile with *_r variant
+        if test "x$GCC" != xyes; then
+            case $host_os in
+                aix*)
+                AS_CASE(["x/$CC"],
+                  [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+                  [#handle absolute path differently from PATH based program lookup
+                   AS_CASE(["x$CC"],
+                     [x/*],
+                     [AS_IF([AS_EXECUTABLE_P([${CC}_r])],
+                        [PTHREAD_CC="${CC}_r"],[PTHREAD_CC="$CC"])],
+                     [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])],
+                  [PTHREAD_CC="$CC"])
+                ;;
+    
+                *)
+                PTHREAD_CC="$CC"
+                ;;
+            esac
         fi
 else
         PTHREAD_CC="$CC"
