1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00
Commit Graph

15124 Commits

Author SHA1 Message Date
Jakob Stoklund Olesen
26add346da Simplify landing pad lowering.
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
2013-07-04 04:53:45 +00:00
Jakob Stoklund Olesen
d2ddad598d FastISel can only apend to basic blocks.
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
2013-07-04 04:32:39 +00:00
Jakob Stoklund Olesen
7857a6e921 Live-in copies go *after* EH_LABELs.
This will soon be tested by exception handling working at all.

llvm-svn: 185615
2013-07-04 04:32:35 +00:00
Jakob Stoklund Olesen
8099b21497 Revert r185595-185596 which broke buildbots.
Revert "Simplify landing pad lowering."
Revert "Remove the EXCEPTIONADDR, EHSELECTION, and LSDAADDR ISD opcodes."

llvm-svn: 185600
2013-07-04 00:26:30 +00:00
Jakob Stoklund Olesen
8bc33424b2 Remove the EXCEPTIONADDR, EHSELECTION, and LSDAADDR ISD opcodes.
These exception-related opcodes are not used any longer.

llvm-svn: 185596
2013-07-03 23:56:31 +00:00
Jakob Stoklund Olesen
62ea9eb287 Simplify landing pad lowering.
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
2013-07-03 23:56:24 +00:00
Jakob Stoklund Olesen
131f26f3e2 Add MachineBasicBlock::addLiveIn().
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
2013-07-03 23:56:20 +00:00
Eric Christopher
62eb870be4 Hoist all of the Entry.getLoc() calls int a single variable.
llvm-svn: 185589
2013-07-03 22:40:21 +00:00
Eric Christopher
ca3c4f4738 Make DotDebugLocEntry a class, reorder the members along with comments
for them and update all uses.

llvm-svn: 185588
2013-07-03 22:40:18 +00:00
Eric Christopher
57e6ad0eb6 Elaborate on comment.
llvm-svn: 185586
2013-07-03 21:37:03 +00:00
Eric Christopher
656b62afda Add names to the header file since they help in documenting the API
(and for consistency).

llvm-svn: 185585
2013-07-03 21:23:59 +00:00
Eric Christopher
18d59bdefb Move typedefs inside the class that they belong to.
llvm-svn: 185573
2013-07-03 20:36:36 +00:00
Eric Christopher
ca56a2549b Remove unused field.
llvm-svn: 185523
2013-07-03 08:26:07 +00:00
Eric Christopher
73d58b6c4d Constify a few functions.
llvm-svn: 185520
2013-07-03 08:13:55 +00:00
Craig Topper
4d79a8a255 Use SmallVectorImpl::const_iterator instead of SmallVector to avoid specifying the vector size.
llvm-svn: 185514
2013-07-03 05:18:47 +00:00
Craig Topper
e345216c48 Use SmallVectorImpl instead of SmallVector as method argument to avoid specifying vector size.
llvm-svn: 185513
2013-07-03 05:16:59 +00:00
Craig Topper
d9a1ef8f1e Use SmallVectorImpl instead of SmallVector for iterators and references to avoid specifying the vector size unnecessarily.
llvm-svn: 185512
2013-07-03 05:11:49 +00:00
Craig Topper
aaeefbaa42 Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size.
llvm-svn: 185509
2013-07-03 04:42:33 +00:00
Craig Topper
d118c8d864 Introduce some typedefs for DenseMaps containing SmallVectors so the vector size doesn't have to repeated when creating iterators for the DenseMap.
llvm-svn: 185508
2013-07-03 04:40:27 +00:00
Craig Topper
20f64aee06 Return SmallVectorImpl& instead of SmallVector& in a couple places to avoid having to specify the vector size in multiple places.
llvm-svn: 185507
2013-07-03 04:30:58 +00:00
Craig Topper
437d34279c Use SmallVectorImpl& instead of SmallVector& to avoid needlessly respecifying the small vector size.
llvm-svn: 185505
2013-07-03 04:24:43 +00:00
Craig Topper
8eceadfa64 Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size.
llvm-svn: 185504
2013-07-03 04:17:25 +00:00
Eric Christopher
9767394b06 Avoid doing a lot of computation when we have multiple ranges and
avoid adding information for the debug_inlined section when it isn't
going to be emitted anyhow.

llvm-svn: 185500
2013-07-03 02:23:53 +00:00
Eric Christopher
c73e78584c Move iterator to where it's used and update comments.
llvm-svn: 185498
2013-07-03 01:57:28 +00:00
Eric Christopher
04defbc3d4 Move instance variable before experimental section.
llvm-svn: 185497
2013-07-03 01:57:26 +00:00
Eric Christopher
0ca30ad6a6 Fix typo to make grep for DW_AT_comp_dir work without case-insensitive
grep.

llvm-svn: 185496
2013-07-03 01:57:23 +00:00
Eric Christopher
0b1ab8f51b Remove unnecessary forward declare.
llvm-svn: 185495
2013-07-03 01:57:20 +00:00
Eric Christopher
635b69f36c Add a helpful comment.
llvm-svn: 185492
2013-07-03 01:22:29 +00:00
Eric Christopher
b9e60aff48 addConstantValue, addConstantFPValue never returned anything but
true, so remove the return value and propagate accordingly.

llvm-svn: 185490
2013-07-03 01:08:30 +00:00
Manman Ren
4245062b12 Debug Info: use module flag to set up Dwarf version.
Correctly handles ref_addr depending on the Dwarf version. Emit Dwarf with
version from module flag.

TODO: turn on/off features depending on the Dwarf version.
llvm-svn: 185484
2013-07-02 23:40:10 +00:00
Eric Christopher
289f194b4b Fix comment.
llvm-svn: 185480
2013-07-02 21:36:07 +00:00
Ulrich Weigand
bfd7811afa [DebugInfo] Allow getDebugThreadLocalSymbol to return MCExpr
This allows getDebugThreadLocalSymbol to return a generic MCExpr
instead of just a MCSymbolRefExpr.

This is in preparation for supporting debug info for TLS variables
on PowerPC, where we need to describe the variable location using
a more complex expression than just MCSymbolRefExpr.

llvm-svn: 185460
2013-07-02 18:47:09 +00:00
Ulrich Weigand
d8bd69e85f [DebugInfo] Hold generic MCExpr in AddrPool
This changes the AddrPool infrastructure to enable it to hold
generic MCExpr expressions, not just MCSymbolRefExpr.

This is in preparation for supporting debug info for TLS variables
on PowerPC, where we need to describe the variable location using
a more complex expression than just MCSymbolRefExpr.

llvm-svn: 185459
2013-07-02 18:46:46 +00:00
Ulrich Weigand
c2c7d0c173 [DebugInfo] Introduce DIEExpr variant of DIEValue to hold MCExpr values
This partially reverts r185202 and restores DIELabel to hold plain
MCSymbol references.  Instead, we add a new subclass DIEExpr of
DIEValue that can hold generic MCExpr references.

This is in preparation for supporting debug info for TLS variables
on PowerPC, where we need to describe the variable location using
a more complex expression than just MCSymbolRefExpr.

llvm-svn: 185458
2013-07-02 18:46:26 +00:00
Jakob Stoklund Olesen
140dcb1e35 Revert (most of) r185393 and r185395.
"Remove floating point computations form SpillPlacement.cpp."

These commits caused test failures in lencod on clang-native-arm-lnt.

I suspect these changes are only exposing an existing issue, but
reverting anyway to keep the bots passing while we investigate.

llvm-svn: 185447
2013-07-02 17:31:58 +00:00
Rafael Espindola
304ef43e7d Remove address spaces from MC.
This is dead code since PIC16 was removed in 2010. The result was an odd mix,
where some parts would carefully pass it along and others would assert it was
zero (most of the object streamer for example).

llvm-svn: 185436
2013-07-02 15:49:13 +00:00
Tim Northover
d0b90ac5a7 DAGCombiner: fix use-counting issue when forming zextload
DAGCombiner was counting all uses of a load node  when considering whether it's
worth combining into a zextload. Really, it wants to ignore the chain and just
count real uses.

rdar://problem/13896307

llvm-svn: 185419
2013-07-02 09:58:53 +00:00
David Blaikie
742cfe7ffb PR14728: DebugInfo: TLS variables with -gsplit-dwarf
llvm-svn: 185398
2013-07-01 23:55:52 +00:00
Jakob Stoklund Olesen
7abfdbda73 Tweak some comments that referred to the old bias computations.
llvm-svn: 185395
2013-07-01 23:36:37 +00:00
Jakob Stoklund Olesen
43f394b1c6 Remove floating point computations form SpillPlacement.cpp.
Patch by Benjamin Kramer!

Use the BlockFrequency class instead of floats in the Hopfield network
computations. This rescales the node Bias field from a [-2;2] float
range to two block frequencies BiasN and BiasP pulling in opposite
directions. This construct has a more predictable behavior when block
frequencies saturate.

The per-node scaling factors are no longer necessary, assuming the block
frequencies around a bundle are consistent.

This patch can cause the register allocator to make different spilling
decisions. The differences should be small.

llvm-svn: 185393
2013-07-01 23:19:39 +00:00
David Blaikie
b019759ec4 PR16493: DebugInfo with TLS on PPC crashing due to invalid relocation
Restrict the current TLS support to X86 ELF for now. Test that we don't
produce it on PPC & we can flesh that test case out with the right thing
once someone implements it.

llvm-svn: 185389
2013-07-01 21:45:25 +00:00
Lang Hames
fa00d243cb Make PBQP require/preserve MachineLoopInfo - the spiller requires it.
llvm-svn: 185378
2013-07-01 20:47:47 +00:00
Cameron Zwarich
6fa864e601 Fix the build after r185363. Use llvm::next instead of raw next.
llvm-svn: 185367
2013-07-01 19:49:48 +00:00
Cameron Zwarich
7af5158621 Fix PR16508.
When phis get lowered, destination copies are inserted using an iterator that is
determined once for all phis in the block, which BuildMI interprets as a request
to insert an instruction directly before the iterator. In the case of a cyclic
phi, source copies may also be inserted directly before this iterator, which can
cause source copies to be inserted before destination copies. The fix is to keep
an iterator to the last phi and then advance it while lowering each phi in order
to insert destination copies directly after the phis.

llvm-svn: 185363
2013-07-01 19:42:46 +00:00
Michael Gottesman
61e2254d15 Added c++ mode selector to head of SelectionDAGBuilder.h so editors open it in c++ mode instead of c mode.
llvm-svn: 185348
2013-07-01 16:53:41 +00:00
Benjamin Kramer
0ec8f6587e misched: Compress pairs returned by getUnderlyingObjectsForInstr.
llvm-svn: 185266
2013-06-29 18:41:17 +00:00
David Blaikie
5109456c75 DebugInfo: PR14728: TLS support
Based on GCC's output for TLS variables (OP_constNu, x@dtpoff,
OP_lo_user), this implements debug info support for TLS in ELF. Verified
that this output is correct/sufficient on Linux (using gold - if you're
using binutils-ld, you'll need something with the fix for
http://sourceware.org/bugzilla/show_bug.cgi?id=15685 in it).

Support on non-ELF is sort of "arbitrary" at the moment - if Apple folks
want to discuss (or just go ahead & implement) how this should work in
MachO, etc, I'm open.

llvm-svn: 185203
2013-06-28 20:05:11 +00:00
David Blaikie
3648e54a41 DebugInfo: Pass MCSymbolRefExprs for labels instead of MCSymbols
This is a precursor to adding debug info support for TLS which requires
non-default relocations applied to TLS symbols.

llvm-svn: 185202
2013-06-28 20:05:04 +00:00
David Blaikie
fb8ac867f3 DebugInfo: Revise r185189 to avoid subtle 'unsigned += bool'
llvm-svn: 185190
2013-06-28 18:55:13 +00:00
David Blaikie
11bb2e64f2 DebugInfo: Simplify the AddressPool representation
llvm-svn: 185189
2013-06-28 18:47:19 +00:00