[llvm-commits] [Patch] Unbreak compiler-rt on FreeBSD/sparc64 and FreeBSD/mips64
Ed Schouten
ed at 80386.nl
Sat Dec 31 04:55:19 PST 2011
Hello all,
On FreeBSD/sparc64 and FreeBSD/mips64, compiler-rt runs into endless
recursion when using __clzdi2() or __ctzdi2(), as described in bug
#11663. This is due to the fact that __builtin_c?z() emit function calls
to __c?zdi2() instead of __c?zsi2(). The following (evil) workaround
fixes it for us.
I'd rather not have too many local changes to our version of
compiler-rt, so would it be possible to get this fix upstreamed?
Index: lib/int_lib.h
===================================================================
--- lib/int_lib.h (revision 229003)
+++ lib/int_lib.h (working copy)
@@ -153,4 +153,23 @@
long double f;
} long_double_bits;
+/*
+ * Workaround for LLVM bug 11663. Prevent endless recursion in
+ * __c?zdi2(), where calls to __builtin_c?z() are expanded to
+ * __c?zdi2() instead of __c?zsi2().
+ *
+ * Instead of placing this workaround in c?zdi2.c, put it in this
+ * global header to prevent other C files from making the detour
+ * through __c?zdi2() as well.
+ *
+ * This problem has only been observed on FreeBSD for sparc64 and
+ * mips64 with GCC 4.2.1.
+ */
+#if defined(__FreeBSD__) && (defined(__sparc64__) || defined(__mips_n64))
+si_int __clzsi2(si_int);
+si_int __ctzsi2(si_int);
+#define __builtin_clz __clzsi2
+#define __builtin_ctz __ctzsi2
+#endif
+
#endif /* INT_LIB_H */
Thanks,
--
Ed Schouten <ed at 80386.nl>
WWW: http://80386.nl/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 834 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20111231/75d81f8e/attachment.sig>
More information about the llvm-commits
mailing list