[llvm-commits] [PATCH] x86 code emitter improvements for object files
Bruno Cardoso Lopes
bruno.cardoso at gmail.com
Mon Aug 3 15:25:32 PDT 2009
On Mon, Aug 3, 2009 at 4:00 PM, Chris Lattner<clattner at apple.com> wrote:
>
> On Jul 31, 2009, at 4:03 PM, Bruno Cardoso Lopes wrote:
>
>> Hi all,
>>
>> The X86CodeEmitter has the following behaviour:
>>
>> 1) When emiting displacements:
>> - Only use pc_relative relocations for x86_64 (globals, cstpools and
>> jmptables)
>> - For x86, only uses pc_rel ou pic_re
>> This two items above do not always work for ELF.
>
> Hi Bruno,
>
> I don't have an opinion about this patch specifically, but would it be
> possible to make the code emitter be driven off the asm operand flags
> instead of making equivalent decisions that have to mirror what isel does?
>
> Specifically, MO.getTargetFlags() should tell the code emitter how to handle
> the CPI/JT/GA/ExtSym operands, X86ATTAsmPrinter.cpp has stuff like this:
>
> switch (MO.getTargetFlags()) {
> default:
> llvm_unreachable("Unknown target flag on GV operand");
> case X86II::MO_NO_FLAG: // No flag.
> break;
> case X86II::MO_DARWIN_NONLAZY:
> case X86II::MO_DARWIN_HIDDEN_NONLAZY:
> case X86II::MO_DLLIMPORT:
> case X86II::MO_DARWIN_STUB:
> // These affect the name of the symbol, not any suffix.
> break;
> case X86II::MO_GOT_ABSOLUTE_ADDRESS:
> O << " + [.-";
> PrintPICBaseSymbol();
> O << ']';
> break;
> case X86II::MO_PIC_BASE_OFFSET:
> case X86II::MO_DARWIN_NONLAZY_PIC_BASE:
> case X86II::MO_DARWIN_HIDDEN_NONLAZY_PIC_BASE:
> O << '-';
> PrintPICBaseSymbol();
> break;
> case X86II::MO_TLSGD: O << "@TLSGD"; break;
> case X86II::MO_GOTTPOFF: O << "@GOTTPOFF"; break;
> case X86II::MO_INDNTPOFF: O << "@INDNTPOFF"; break;
> case X86II::MO_TPOFF: O << "@TPOFF"; break;
> case X86II::MO_NTPOFF: O << "@NTPOFF"; break;
> case X86II::MO_GOTPCREL: O << "@GOTPCREL"; break;
> case X86II::MO_GOT: O << "@GOT"; break;
> case X86II::MO_GOTOFF: O << "@GOTOFF"; break;
> case X86II::MO_PLT: O << "@PLT"; break;
> }
>
> For example. It would be better to base the encoding on this flag than
> checking things like Is64BitMode, IsPIC etc.
Yes, that's the right way to go. I thought about that when I started hacking the
x86 code emitter, but the problem here is that I'm afraid of breaking JIT stuff
and lose the focus on the elf object code emission. I would be happy to
work on this clean up as a next step after elf is working, but I would
prefer to
apply this patch for now if that's ok for you. But it's your call then.
Thanks,
>> This patch try to solve the 3 problems above to properly emit elf
>> binaries for x86/x86_64. With
>> this changes applied (together with elf improvements I've not commited
>> yet) I was able
>> to run 209/243 (83%) of SinglesSources using ELF object files emited by
>> LLC :)
>> and with no regressions for JIT.
>
> Wow, nice!!
>
> -Chris
>
>
--
Bruno Cardoso Lopes
http://www.brunocardoso.cc
More information about the llvm-commits
mailing list