| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
with an MCSymbol instead of an immediate.
llvm-svn: 98481
|
| |
|
|
| |
llvm-svn: 98474
|
| |
|
|
|
|
|
|
| |
an MCSymbol. Make the EH_LABEL MachineInstr hold its label
with an MCSymbol instead of ID. Fix a bug in MMI.cpp which
would return labels named "Label4" instead of "label4".
llvm-svn: 98463
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
instead of label ID's. This cleans up and regularizes a bunch
of code and makes way for future progress.
Unfortunately, this pointed out to me that JITDwarfEmitter.cpp
is largely copy and paste from DwarfException/MachineModuleInfo
and other places. This is very sad and disturbing. :(
One major change here is that TidyLandingPads moved from being
called in DwarfException::BeginFunction to being called in
DwarfException::EndFunction. There should not be any
functionality change from doing this, but I'm not an EH expert.
llvm-svn: 98459
|
| |
|
|
|
|
|
| |
We still have the templated X86 JIT emitter, *and* the
almost-copy in X86InstrInfo for getting instruction sizes.
llvm-svn: 96059
|
| |
|
|
|
|
| |
encoder and decoder by using new MRM_ forms.
llvm-svn: 96048
|
| |
|
|
| |
llvm-svn: 96038
|
| |
|
|
|
|
|
| |
This will work better for the disassembler for modeling things
like lfence/monitor/vmcall etc.
llvm-svn: 95960
|
| |
|
|
|
|
| |
fixes the remaining x86-64 jit failures afaik.
llvm-svn: 95867
|
| |
|
|
|
|
|
|
|
| |
r12b, etc) also encodes to a R/M value of 4, which is just
as illegal as ESP/RSP for the non-sib version an address.
This fixes x86-64 jit miscompilations of a bunch of programs.
llvm-svn: 95866
|
| |
|
|
|
|
| |
MCInst it came from.
llvm-svn: 95767
|
| |
|
|
|
|
| |
MCCodeEmitter.
llvm-svn: 95709
|
| |
|
|
|
|
| |
MCCodeEmitter.
llvm-svn: 95708
|
| |
|
|
|
|
|
|
| |
in X86-32 mode. This is still required in x86-64 mode to avoid
forming [disp+rip] encoding. Rewrite the SIB byte decision logic
to be actually understandable.
llvm-svn: 95693
|
| |
|
|
|
|
| |
a confusing idiom to check for ESP or RSP.
llvm-svn: 95690
|
| |
|
|
| |
llvm-svn: 95689
|
| |
|
|
|
|
|
|
|
| |
into TargetOpcodes.h. #include the new TargetOpcodes.h
into MachineInstr. Add new inline accessors (like isPHI())
to MachineInstr, and start using them throughout the
codebase.
llvm-svn: 95687
|
| |
|
|
| |
llvm-svn: 95438
|
| |
|
|
| |
llvm-svn: 95410
|
| |
|
|
|
|
| |
TSFlags directly instead of a TargetInstrDesc.
llvm-svn: 95405
|
| |
|
|
|
|
|
|
|
|
| |
pushl %ebp
movl %esp, %ebp
movl $42, %eax
popl %ebp
ret
llvm-svn: 95344
|
| |
|
|
|
|
|
|
|
| |
Instruction selection for X86 now can choose an instruction
sequence that will fit any address of any symbol, no matter
the pointer width. X86-64 uses a mov+call-via-reg sequence
for this.
llvm-svn: 95323
|
| |
|
|
|
|
|
|
| |
instructions with no operands. It can now handle
define void @test2() nounwind { ret void }
llvm-svn: 95261
|
| |
|
|
|
|
| |
-enable-new-x86-encoder until its stable.
llvm-svn: 95256
|
| |
|
|
| |
llvm-svn: 95254
|
| |
|
|
| |
llvm-svn: 95144
|
| |
|
|
|
|
|
| |
MCMachineInstr. This also fixes handling of tied registers for MRMSrcMem
instructions.
llvm-svn: 95136
|
| |
|
|
|
|
|
|
| |
MachineFunctionAnalysis dole them out, instead of having
AsmPrinter do both. Have the AsmPrinter::SetupMachineFunction
method set the 'AsmPrinter::MF' variable.
llvm-svn: 94509
|
| |
|
|
| |
llvm-svn: 92644
|
| |
|
|
|
|
|
|
| |
Note that "hasDotLocAndDotFile"-style debug info was already broken;
people wanting this functionality should implement it in the
AsmPrinter/DwarfWriter code.
llvm-svn: 89711
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The large code model is documented at
http://www.x86-64.org/documentation/abi.pdf and says that calls should
assume their target doesn't live within the 32-bit pc-relative offset
that fits in the call instruction.
To do this, we turn off the global-address->target-global-address
conversion in X86TargetLowering::LowerCall(). The first attempt at
this broke the lazy JIT because it can separate the movabs(imm->reg)
from the actual call instruction. The lazy JIT receives the address of
the movabs as a relocation and needs to record the return address from
the call; and then when that call happens, it needs to patch the
movabs with the newly-compiled target. We could thread the call
instruction into the relocation and record the movabs<->call mapping
explicitly, but that seems to require at least as much new
complication in the code generator as this change.
To fix this, we make lazy functions _always_ go through a call
stub. You'd think we'd only have to force lazy calls through a stub on
difficult platforms, but that turns out to break indirect calls
through a function pointer. The right fix for that is to distinguish
between calls and address-of operations on uncompiled functions, but
that's complex enough to leave for someone else to do.
Another attempt at this defined a new CALL64i pseudo-instruction,
which expanded to a 2-instruction sequence in the assembly output and
was special-cased in the X86CodeEmitter's emitInstruction()
function. That broke indirect calls in the same way as above.
This patch also removes a hack forcing Darwin to the small code model.
Without far-call-stubs, the small code model requires things of the
JITMemoryManager that the DefaultJITMemoryManager can't provide.
Thanks to echristo for lots of testing!
llvm-svn: 88984
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
MachineRelocations, "stub" always refers to a far-call stub or a
load-a-faraway-global stub, so this patch adds "Far" to the term. (Other stubs
are used for lazy compilation and dlsym address replacement.) The variable was
also inconsistent between the positive and negative sense, and the positive
sense ("NeedStub") was more demanding than is accurate (since a nearby-enough
function can be called directly even if the platform often requires a stub).
Since the negative sense causes double-negatives, I switched to
"MayNeedFarStub" globally.
llvm-svn: 86363
|
| |
|
|
|
|
| |
getGlobalContext() :(
llvm-svn: 85252
|
| |
|
|
|
|
| |
VISIBILITY_HIDDEN removal.
llvm-svn: 85043
|
| |
|
|
|
|
|
| |
Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042
|
| |
|
|
| |
llvm-svn: 83822
|
| |
|
|
|
|
| |
and after printing an instruction.
llvm-svn: 83363
|
| |
|
|
|
|
|
|
|
|
| |
unused DECLARE instruction.
KILL is not yet used anywhere, it will replace TargetInstrInfo::IMPLICIT_DEF
in the places where IMPLICIT_DEF is just used to alter liveness of physical
registers.
llvm-svn: 83006
|
| |
|
|
| |
llvm-svn: 81206
|
| |
|
|
| |
llvm-svn: 80889
|
| |
|
|
| |
llvm-svn: 80729
|
| |
|
|
|
|
| |
- Bruno, please check!!
llvm-svn: 80728
|
| |
|
|
|
|
| |
consistency).
llvm-svn: 80727
|
| |
|
|
|
|
| |
Also, use MCInst::print instead of custom code in MCAsmPrinter.
llvm-svn: 80575
|
| |
|
|
| |
llvm-svn: 80485
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Note, this is a gigantic hack, with the sole purpose of unblocking further
work on the assembler (its also possible to test the mathcer more completely
now).
- Despite being a hack, its actually good enough to work over all of 403.gcc
(although some encodings are probably incorrect). This is a testament to the
beauty of X86's MachineInstr, no doubt! ;)
llvm-svn: 80234
|
| |
|
|
| |
llvm-svn: 79742
|
| |
|
|
| |
llvm-svn: 79167
|
| |
|
|
| |
llvm-svn: 79165
|
| |
|
|
|
|
|
|
|
| |
bytes for F2 0F 38 and propagate. Add a FIXME for a set
of possibilities which correspond to intrinsics already used.
New test.
llvm-svn: 78508
|