| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
std::for_each. Turns out std::for_each doesn't update the variable passed in for the functor but instead copy constructs a new one.
llvm-svn: 155041
|
|
|
|
| |
llvm-svn: 153162
|
|
|
|
| |
llvm-svn: 153158
|
|
|
|
|
|
|
|
| |
The first def of a virtual register cannot also read the register.
Assert on such bad machine code instead of trying to fix it.
TwoAddressInstructionPass should never create code like that.
llvm-svn: 152010
|
|
|
|
|
|
|
|
|
| |
This allows the function to be inlined, and makes it suitable for use in
getInstructionIndex().
Also provide a const version. C++ is great for touch typing practice.
llvm-svn: 151782
|
|
|
|
|
|
|
|
|
|
|
|
| |
into
bundles. This method takes a bundle start and an MI being bundled, and makes
the intervals for the MI's operands appear to start/end on the bundle start.
Also fixes some minor cosmetic issues (whitespace, naming convention) in the
HMEditor code.
llvm-svn: 151099
|
|
|
|
| |
llvm-svn: 151006
|
|
|
|
| |
llvm-svn: 150921
|
|
|
|
| |
llvm-svn: 150915
|
|
|
|
| |
llvm-svn: 150914
|
|
|
|
| |
llvm-svn: 150912
|
|
|
|
| |
llvm-svn: 150910
|
|
|
|
|
|
| |
Hold (LiveInterval, LiveRange) pairs to update, rather than vregs.
llvm-svn: 150909
|
|
|
|
| |
llvm-svn: 150851
|
|
|
|
| |
llvm-svn: 150841
|
|
|
|
| |
llvm-svn: 150840
|
|
|
|
|
|
|
|
|
| |
any changes.
Internally this adds a private inner class HMEditor, to LiveIntervals. HMEditor provides
an API for updating live intervals when code is moved or bundled.
llvm-svn: 150826
|
|
|
|
|
|
| |
NDEBUG guards.
llvm-svn: 150771
|
|
|
|
|
|
| |
un-allocatable registers.
llvm-svn: 150768
|
|
|
|
| |
llvm-svn: 150630
|
|
|
|
| |
llvm-svn: 150627
|
|
|
|
| |
llvm-svn: 150608
|
|
|
|
| |
llvm-svn: 150553
|
|
|
|
| |
llvm-svn: 150552
|
|
|
|
|
|
|
|
|
|
|
|
| |
When a physreg is live in to a basic block, look for any instruction in
the block that clobbers the physreg.
The instruction doesn't have to properly redefine the register, any
overlapping clobber is OK.
This slightly changes live ranges when compiling with register masks.
llvm-svn: 150528
|
|
|
|
|
|
| |
The old DenseMap hashed order was very confusing.
llvm-svn: 150527
|
|
|
|
| |
llvm-svn: 150525
|
|
|
|
|
|
| |
only be live in to a block if it is the function entry point or a landing pad.
llvm-svn: 150494
|
|
|
|
| |
llvm-svn: 150457
|
|
|
|
| |
llvm-svn: 150411
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Creates a configurable regalloc pipeline.
Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa.
When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>.
CodeGen transformation passes are never "required" as an analysis
ProcessImplicitDefs does not require LiveVariables.
We have a plan to massively simplify some of the early passes within the regalloc superpass.
llvm-svn: 150226
|
|
|
|
| |
llvm-svn: 150224
|
|
|
|
|
|
|
| |
When checking a local live range for interference, restrict the binary
search to the single block.
llvm-svn: 150220
|
|
|
|
|
|
|
| |
Provide API to get a list of register mask slots and bits in a basic
block.
llvm-svn: 150219
|
|
|
|
|
|
|
|
| |
No looping and binary searches necessary.
Return a pointer to the containing block instead of just a bool.
llvm-svn: 150218
|
|
|
|
| |
llvm-svn: 150150
|
|
|
|
| |
llvm-svn: 150149
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Build an ordered vector of register mask operands (i.e., calls) when
computing live intervals. Provide a checkRegMaskInterference() function
that computes a bit mask of usable registers for a live range.
This is a quick way of determining of a live range crosses any calls,
and restricting it to the callee saved registers if it does.
Previously, we had to discover call clobbers for each candidate register
independently.
llvm-svn: 150077
|
|
|
|
| |
llvm-svn: 150044
|
|
|
|
|
|
|
|
|
|
| |
A live range that has an early clobber tied redef now looks like a
normal tied redef, except the early clobber def uses the early clobber
slot.
This is enough to handle any strange interference problems.
llvm-svn: 149769
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I don't have a test that fails because of this, but a test case like
CodeGen/X86/2009-12-01-EarlyClobberBug.ll exposes the problem. EAX is
redefined by a tied early clobber operand on inline asm, and the live
range should look like this:
%EAX,inf = [48r,64e:0)[64e,80r:1) 0@48r 1@64e
Previously, the two values got merged:
%EAX,inf = [48r,80r:0) 0@48r
With this bug fixed, the REDEF_BY_EC VNInfo flag is no longer needed.
llvm-svn: 149768
|
|
|
|
|
|
|
|
|
|
| |
If a value is defined by a COPY, that instuction can easily and cheaply
be found by getInstructionFromIndex(VNI->def).
This reduces the size of VNInfo from 24 to 16 bytes, and improves
llc compile time by 3%.
llvm-svn: 149763
|
|
|
|
| |
llvm-svn: 149722
|
|
|
|
| |
llvm-svn: 149717
|
|
|
|
|
|
| |
*function*. Wrap the function in #ifndef NDEBUG.
llvm-svn: 149259
|
|
|
|
| |
llvm-svn: 149152
|
|
|
|
|
|
|
|
|
| |
around within a basic block while maintaining live-intervals.
Updated ScheduleTopDownLive in MachineScheduler.cpp to use the moveInstr API
when reordering MIs.
llvm-svn: 149147
|
|
|
|
|
|
|
|
| |
function. They don't appear to be used, and are inconsistent with handling of
other physreg intervals (i.e. intervals that are not live-in) where ranges are
not inserted for aliases.
llvm-svn: 148986
|
|
|
|
|
|
| |
Remove assertion which can no longer trigger.
llvm-svn: 148984
|
|
|
|
| |
llvm-svn: 148408
|