| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The Mach-O linker has been able to support the weak-def bit on any symbol for
quite a while now. The compiler however continued to place these symbols into a
"coal" section, which required the linker to map them back to the base section
name.
Replace the sections like this:
__TEXT/__textcoal_nt instead use __TEXT/__text
__TEXT/__const_coal instead use __TEXT/__const
__DATA/__datacoal_nt instead use __DATA/__data
<rdar://problem/14265330>
llvm-svn: 185872
|
|
|
|
|
|
| |
variable later in the class.
llvm-svn: 185866
|
|
|
|
|
|
|
| |
No functionality change. It should suffice to check the type of a debug info
metadata, instead of calling Verify.
llvm-svn: 185847
|
|
|
|
| |
llvm-svn: 185844
|
|
|
|
|
|
|
|
|
|
| |
Since the pool indexes are necessarily sequential and contiguous, just
insert things in the right place rather than having to sort the sequence
after the fact.
No functionality change.
llvm-svn: 185842
|
|
|
|
|
|
|
| |
In response to Duncan's review, I believe that the original comment was not as
clear as it could be. Hopefully, this is better.
llvm-svn: 185824
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes a bug (found by llvm-stress) in
DAGTypeLegalizer::PromoteIntRes_BUILD_VECTOR where it assumed that the result
type would always be larger than the original operands. This is not always
true, however, with boolean vectors. For example, promoting a node of type v8i1
(where the operands will be of type i32, the type to which i1 is promoted) will
yield a node with a result vector element type of i16 (and operands of type
i32). As a result, we cannot blindly assume that we can ANY_EXTEND the operands
to the result type.
llvm-svn: 185794
|
|
|
|
| |
llvm-svn: 185788
|
|
|
|
|
|
|
|
| |
This fixes an oversight that Intrinsic::nearbyint was not being mapped to
ISD::FNEARBYINT (thus fixing the over-optimistic cost we were assigning to
nearbyint calls for some targets).
llvm-svn: 185783
|
|
|
|
| |
llvm-svn: 185780
|
|
|
|
|
|
| |
brace)
llvm-svn: 185768
|
|
|
|
|
|
|
|
|
|
|
| |
Obviously the personality function should be emitted as language handler
instead of the hard coded _GCC_specific_handler. The language specific
data must be placed after the unwind information therefore it must not
be emitted into a separate section.
Reviewed by Charles Davis and Nico Rieck.
llvm-svn: 185761
|
|
|
|
|
|
|
|
|
|
|
|
| |
ReduceLoadWidth unconditionally drops extensions from loads. Limit it to the
case when all of the bits the extension would otherwise produce are dropped by
the shrink. It would be possible to shrink the load in more cases by merging
the extensions, but this isn't trivial and a very rare case. I left a TODO for
that case.
Fixes PR16551.
llvm-svn: 185755
|
|
|
|
|
|
|
|
| |
This prevents the emission of DAG-generated vreg definitions after a
tail call be dropping them entirely (on the grounds that nothing could
use them anyway, and they interfere with O0 CodeGen).
llvm-svn: 185754
|
|
|
|
| |
llvm-svn: 185753
|
|
|
|
|
|
| |
No functional change intended.
llvm-svn: 185733
|
|
|
|
| |
llvm-svn: 185731
|
|
|
|
|
|
|
|
|
|
|
| |
The stack coloring pass has code to delete stores and loads that become
trivially dead after coloring. Extend it to cope with single instructions
that copy from one frame index to another.
The testcase happens to show an example of this kicking in at the moment.
It did occur in Real Code too though.
llvm-svn: 185705
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The stack coloring pass renumbered frame indexes with a loop of the form:
for each frame index FI
for each instruction I that uses FI
for each use of FI in I
rename FI to FI'
This caused problems if an instruction used two frame indexes F0 and F1
and if F0 was renamed to F1 and F1 to F2. The first time we visited the
instruction we changed F0 to F1, then we changed both F1s to F2.
In other words, the problem was that SSRefs recorded which instructions
used an FI, but not which MachineOperands and MachineMemOperands within
that instruction used it.
This is easily fixed for MachineOperands by walking the instructions
once and processing each operand in turn. There's already a loop to
do that for dead store elimination, so it seemed more efficient to
fuse the two at the block level.
MachineMemOperands are more tricky because they can be shared between
instructions. The patch handles them by making SSRefs an array of
MachineMemOperands rather than an array of MachineInstrs. We might end
up processing the same MachineMemOperand twice, but that's OK because
we always know from the SSRefs index what the original frame index was.
llvm-svn: 185703
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
SystemZ wants normal register scavenging slots, as close to the stack or
frame pointer as possible. The only reason it was using custom code was
because PrologEpilogInserter assumed an x86-like layout, where the frame
pointer is at the opposite end of the frame from the stack pointer.
This meant that when frame pointer elimination was disabled,
the slots ended up being as close as possible to the incoming
stack pointer, which is the opposite of what we want on SystemZ.
This patch adds a new knob to say which layout is used and converts
SystemZ to use target-independent scavenging slots. It's one of the pieces
needed to support frame-to-frame MVCs, where two slots might be required.
The ABI requires us to allocate 160 bytes for calls, so one approach
would be to use that area as temporary spill space instead. It would need
some surgery to make sure that the slot isn't live across a call though.
I stuck to the "isFPCloseToIncomingSP - ..." style comment on the
"do what the surrounding code does" principle. The FP case is already
covered by several Systemz/frame-* tests, which fail without the
PrologueEpilogueInserter change, so no new ones are needed.
No behavioural change intended.
llvm-svn: 185696
|
|
|
|
| |
llvm-svn: 185689
|
|
|
|
|
|
|
|
|
| |
r179494 switched to using the object file info to retrieve the default text
section for some MC streamers. It is possible that initializing an MC
streamer can request sections before the object file info is initialized
when the AutoInitSections flag is set on the streamer.
llvm-svn: 185670
|
|
|
|
|
|
| |
These exception-related opcodes are not used any longer.
llvm-svn: 185625
|
|
|
|
| |
llvm-svn: 185618
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Stop using the ISD::EXCEPTIONADDR and ISD::EHSELECTION when lowering
landing pad arguments. These nodes were previously legalized into
CopyFromReg nodes, but that never worked properly because the
CopyFromReg node weren't guaranteed to be scheduled at the top of the
basic block.
This meant the exception pointer and selector registers could be
clobbered before being copied to a virtual register.
This patch copies the two physical registers to virtual registers at
the beginning of the basic block, and lowers the landingpad instruction
directly to two CopyFromReg nodes reading the *virtual* registers. This
is safe because virtual registers don't get clobbered.
A future patch will remove the ISD::EXCEPTIONADDR and ISD::EHSELECTION
nodes.
llvm-svn: 185617
|
|
|
|
|
|
|
|
|
|
| |
Compute the insertion point from the end of the basic block instead of
skipping labels from the front.
This caused failures in landing pads when live-in copies where inserted
before instruction selection.
llvm-svn: 185616
|
|
|
|
|
|
| |
This will soon be tested by exception handling working at all.
llvm-svn: 185615
|
|
|
|
|
|
|
| |
Revert "Simplify landing pad lowering."
Revert "Remove the EXCEPTIONADDR, EHSELECTION, and LSDAADDR ISD opcodes."
llvm-svn: 185600
|
|
|
|
|
|
| |
These exception-related opcodes are not used any longer.
llvm-svn: 185596
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Stop using the ISD::EXCEPTIONADDR and ISD::EHSELECTION when lowering
landing pad arguments. These nodes were previously legalized into
CopyFromReg nodes, but that never worked properly because the
CopyFromReg node weren't guaranteed to be scheduled at the top of the
basic block.
This meant the exception pointer and selector registers could be
clobbered before being copied to a virtual register.
This patch copies the two physical registers to virtual registers at
the beginning of the basic block, and lowers the landingpad instruction
directly to two CopyFromReg nodes reading the *virtual* registers. This
is safe because virtual registers don't get clobbered.
A future patch will remove the ISD::EXCEPTIONADDR and ISD::EHSELECTION
nodes.
llvm-svn: 185595
|
|
|
|
|
|
|
| |
This function adds a live-in physical register to an MBB and ensures
that it is copied to a virtual register immediately.
llvm-svn: 185594
|
|
|
|
| |
llvm-svn: 185589
|
|
|
|
|
|
| |
for them and update all uses.
llvm-svn: 185588
|
|
|
|
| |
llvm-svn: 185586
|
|
|
|
|
|
| |
(and for consistency).
llvm-svn: 185585
|
|
|
|
| |
llvm-svn: 185573
|
|
|
|
| |
llvm-svn: 185523
|
|
|
|
| |
llvm-svn: 185520
|
|
|
|
|
|
| |
specifying the vector size.
llvm-svn: 185514
|
|
|
|
|
|
| |
specifying vector size.
llvm-svn: 185513
|
|
|
|
|
|
| |
avoid specifying the vector size unnecessarily.
llvm-svn: 185512
|
|
|
|
|
|
| |
specifying the vector size.
llvm-svn: 185509
|
|
|
|
|
|
| |
size doesn't have to repeated when creating iterators for the DenseMap.
llvm-svn: 185508
|
|
|
|
|
|
| |
having to specify the vector size in multiple places.
llvm-svn: 185507
|
|
|
|
|
|
| |
respecifying the small vector size.
llvm-svn: 185505
|
|
|
|
|
|
| |
specifying the vector size.
llvm-svn: 185504
|
|
|
|
|
|
|
| |
avoid adding information for the debug_inlined section when it isn't
going to be emitted anyhow.
llvm-svn: 185500
|
|
|
|
| |
llvm-svn: 185498
|
|
|
|
| |
llvm-svn: 185497
|
|
|
|
|
|
| |
grep.
llvm-svn: 185496
|