Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The IR generated by calls was very bulky because two
instructions were used for marking the live range of
a clobber.
This patch attempts to store the information of what
registers are use/def/clobber in the call instruction
itself, this leads to more compact code (even more
when we'll have SSE registers). However, I find that
the amount of extra code needed is not really
easonable. Fortunately it is not too invasive, thus
if the complexity creeps in, it should be easy to
revert.
|
|
The parser now has some code to parse the description
of structured types.
I tried to be even less specific than LLVM "type" by
creating just enough abstraction so that I can deal
with both AARCH64 and x64. The base types used in the
definition of an aggregate are really just syntactic sugar
to give a structure a size and an alignment. Only the
location of float components matters for the compilation.
In particular this means that the front-ends have to know
how the ABI works to pass/return small integer types.
This also means that the font-end has to be aware of the
layout of structures.
Chris Lattner has a proposition [1] for LLVM that is still
pending and goes in the direction of giving more control
of the ABI the front-end.
[1]: http://www.nondot.org/sabre/LLVMNotes/ExtendedIntegerResults.txt
|
|
|
|
|
|
|
|
|
|
This might not be a good idea, the problem was that
many spurious registers would be added to the Bits
data-structures during compilation (and would
always remain 0). However, doing the above
modification de-uniformizes the handling of temps
and regs, this makes the code longer and not
really nicer. Also, additional Bits structures
are required to track the registers independently.
Overall this might be a bad idea to revert.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|