Hi, I applied the following diff to llvm-3.2p1, built firefox-19.0.2 and firefox-20.0beta6 by this llvm, and both work fine on i386.
http://svnweb.freebsd.org/base?view=revision&revision=246858 For details: http://marc.info/?t=136147545000001&r=1&w=2 Just trivial diffs again: diff -rupN devel/llvm/patches/patch-lib_Target_X86_X86SelectionDAGInfo_cpp mystuff/devel/llvm/patches/patch-lib_Target_X86_X86SelectionDAGInfo_cpp --- devel/llvm/patches/patch-lib_Target_X86_X86SelectionDAGInfo_cpp Thu Jan 1 09:00:00 1970 +++ mystuff/devel/llvm/patches/patch-lib_Target_X86_X86SelectionDAGInfo_cpp Tue Mar 26 13:00:50 2013 @@ -0,0 +1,17 @@ +--- lib/Target/X86/X86SelectionDAGInfo.cpp.orig Thu Nov 1 17:07:29 2012 ++++ lib/Target/X86/X86SelectionDAGInfo.cpp Tue Mar 26 12:55:52 2013 +@@ -202,6 +202,14 @@ X86SelectionDAGInfo::EmitTargetCodeForMemcpy(Selection + SrcPtrInfo.getAddrSpace() >= 256) + return SDValue(); + ++ // ESI might be used as a base pointer, in that case we can't simply overwrite ++ // the register. Fall back to generic code. ++ const X86RegisterInfo *TRI = ++ static_cast<const X86RegisterInfo *>(DAG.getTarget().getRegisterInfo()); ++ if (TRI->hasBasePointer(DAG.getMachineFunction()) && ++ TRI->getBaseRegister() == X86::ESI) ++ return SDValue(); ++ + MVT AVT; + if (Align & 1) + AVT = MVT::i8; diff -rupN www/mozilla-firefox/Makefile mystuff/www/mozilla-firefox/Makefile --- www/mozilla-firefox/Makefile Tue Mar 12 04:56:24 2013 +++ mystuff/www/mozilla-firefox/Makefile Tue Mar 26 13:12:44 2013 @@ -30,9 +30,9 @@ MODPY_RUNDEP = No # necessary glue to build with the correct compiler after fx 17 MODULES += gcc4 lang/clang -MODGCC4_ARCHS = i386 powerpc +MODGCC4_ARCHS = powerpc MODGCC4_LANGS = c c++ -MODCLANG_ARCHS = amd64 +MODCLANG_ARCHS = i386 amd64 MODCLANG_LANGS = c c++ USE_GROFF = Yes