On Mon, 8 Oct 2007, Evan Cheng wrote:>> [x86_64-mod-dbg]: /tmp/ccxekXCc.s: Assembler messages: >> [x86_64-mod-dbg]: /tmp/ccxekXCc.s:36: Error: `(%esi,%edi)' is not a >> valid 64 >> bit base/index expression > > Looks like llvm is generating invalid x86-64 assembly. Can you add a - > emit-llvm to the xgcc line and generate a reproducible test case? > Please file a bugzilla report.Evan, are you "3 addrifying" 32-bit adds into a 32-bit LEA on x86-64? Could this be the problem? (iirc, it wants you to use eax = LEA rsi, rdi) -Chris>> I also see warnings like this: >> >> [x86_64-mod-dbg]: ./xgcc -B./ >> -B/install.modified.debug/x86_64-unknown-linux-gnu/x86_64-unknown- >> linux-gnu/bin/ >> -isystem /install.modified.debug/x86_64-unknown-linux-gnu/x86_64- >> unknown-linux-gnu/include >> -isystem /install.modified.debug/x86_64-unknown-linux-gnu/x86_64- >> unknown-linux-gnu/sys-include >> -L/tmp/ptmp/dag/build.llvm-gcc-4.0.modified.debug/x86_64-unknown- >> linux-gnu/gcc/../ld >> -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes >> -Wmissing-prototypes -Wold-style-definition -isystem ./include - >> fPIC -g >> -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. >> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc >> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/. >> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/../include >> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/../libcpp/include >> -I/llvm-project.modified/llvm/trunk/include >> -I/ptmp/dag/build.llvm.modified.debug/x86_64-unknown-linux-gnu/include >> -DL_absvdi2 -c /llvm-project.modified/llvm-gcc-4.0/trunk/gcc/ >> libgcc2.c -o >> libgcc/./_absvdi2.o >> [x86_64-mod-dbg]: WARNING: 128-bit integers not supported! >> >> This is from the latest trunk. Is anyone else seeing this problem? >> >> -Dave >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-Chris -- http://nondot.org/sabre/ http://llvm.org/
On Oct 8, 2007, at 4:26 PM, Chris Lattner wrote:> On Mon, 8 Oct 2007, Evan Cheng wrote: >>> [x86_64-mod-dbg]: /tmp/ccxekXCc.s: Assembler messages: >>> [x86_64-mod-dbg]: /tmp/ccxekXCc.s:36: Error: `(%esi,%edi)' is not a >>> valid 64 >>> bit base/index expression >> >> Looks like llvm is generating invalid x86-64 assembly. Can you add >> a - >> emit-llvm to the xgcc line and generate a reproducible test case? >> Please file a bugzilla report. > > Evan, are you "3 addrifying" 32-bit adds into a 32-bit LEA on x86-64? > Could this be the problem? (iirc, it wants you to use eax = LEA > rsi, rdi)I am turning 32-bit add into 32-bit LEA on x86-64 but that's perfectly legal. Both leal (%esi,%edi), %eax leal (%rsi,%rdi), %eax are legal assembly. It's just the former requires a 67H prefix due to the 32-bit address size. This does point to a performance problem in the 3 address conversion code (which I will fix), but it should not cause the assembler to complain. Evan> > -Chris > >>> I also see warnings like this: >>> >>> [x86_64-mod-dbg]: ./xgcc -B./ >>> -B/install.modified.debug/x86_64-unknown-linux-gnu/x86_64-unknown- >>> linux-gnu/bin/ >>> -isystem /install.modified.debug/x86_64-unknown-linux-gnu/x86_64- >>> unknown-linux-gnu/include >>> -isystem /install.modified.debug/x86_64-unknown-linux-gnu/x86_64- >>> unknown-linux-gnu/sys-include >>> -L/tmp/ptmp/dag/build.llvm-gcc-4.0.modified.debug/x86_64-unknown- >>> linux-gnu/gcc/../ld >>> -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes >>> -Wmissing-prototypes -Wold-style-definition -isystem ./include - >>> fPIC -g >>> -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. >>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc >>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/. >>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/../include >>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/../libcpp/include >>> -I/llvm-project.modified/llvm/trunk/include >>> -I/ptmp/dag/build.llvm.modified.debug/x86_64-unknown-linux-gnu/ >>> include >>> -DL_absvdi2 -c /llvm-project.modified/llvm-gcc-4.0/trunk/gcc/ >>> libgcc2.c -o >>> libgcc/./_absvdi2.o >>> [x86_64-mod-dbg]: WARNING: 128-bit integers not supported! >>> >>> This is from the latest trunk. Is anyone else seeing this problem? >>> >>> -Dave >>> _______________________________________________ >>> LLVM Developers mailing list >>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> > > -Chris > > -- > http://nondot.org/sabre/ > http://llvm.org/ > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
On Mon, 8 Oct 2007, Evan Cheng wrote:> I am turning 32-bit add into 32-bit LEA on x86-64 but that's > perfectly legal. Both > leal (%esi,%edi), %eax > leal (%rsi,%rdi), %eax > are legal assembly. It's just the former requires a 67H prefix due to > the 32-bit address size. > > This does point to a performance problem in the 3 address conversion > code (which I will fix), but it should not cause the assembler to > complain.Thanks for fixing this. IIRC, some versions of GAS don't support the less efficient encoding at all. In any case, this should be fixed. Dave, can you verify bootstrap works now? -Chris>>>> I also see warnings like this: >>>> >>>> [x86_64-mod-dbg]: ./xgcc -B./ >>>> -B/install.modified.debug/x86_64-unknown-linux-gnu/x86_64-unknown- >>>> linux-gnu/bin/ >>>> -isystem /install.modified.debug/x86_64-unknown-linux-gnu/x86_64- >>>> unknown-linux-gnu/include >>>> -isystem /install.modified.debug/x86_64-unknown-linux-gnu/x86_64- >>>> unknown-linux-gnu/sys-include >>>> -L/tmp/ptmp/dag/build.llvm-gcc-4.0.modified.debug/x86_64-unknown- >>>> linux-gnu/gcc/../ld >>>> -O2 -DIN_GCC -W -Wall -Wwrite-strings -Wstrict-prototypes >>>> -Wmissing-prototypes -Wold-style-definition -isystem ./include - >>>> fPIC -g >>>> -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED -I. -I. >>>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc >>>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/. >>>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/../include >>>> -I/llvm-project.modified/llvm-gcc-4.0/trunk/gcc/../libcpp/include >>>> -I/llvm-project.modified/llvm/trunk/include >>>> -I/ptmp/dag/build.llvm.modified.debug/x86_64-unknown-linux-gnu/ >>>> include >>>> -DL_absvdi2 -c /llvm-project.modified/llvm-gcc-4.0/trunk/gcc/ >>>> libgcc2.c -o >>>> libgcc/./_absvdi2.o >>>> [x86_64-mod-dbg]: WARNING: 128-bit integers not supported! >>>> >>>> This is from the latest trunk. Is anyone else seeing this problem? >>>> >>>> -Dave >>>> _______________________________________________ >>>> LLVM Developers mailing list >>>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>> >>> _______________________________________________ >>> LLVM Developers mailing list >>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >>> >> >> -Chris >> >> -- >> http://nondot.org/sabre/ >> http://llvm.org/ >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-Chris -- http://nondot.org/sabre/ http://llvm.org/