- Jul 06, 2013
-
-
Jakob Stoklund Olesen authored
llvm-svn: 185731
-
- Jul 05, 2013
-
-
Richard Sandiford authored
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
-
Richard Sandiford authored
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
-
Richard Sandiford authored
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
-
Benjamin Kramer authored
llvm-svn: 185689
-
- Jul 04, 2013
-
-
Nico Rieck authored
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
-
Jakob Stoklund Olesen authored
These exception-related opcodes are not used any longer. llvm-svn: 185625
-
Jakob Stoklund Olesen authored
llvm-svn: 185618
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
This will soon be tested by exception handling working at all. llvm-svn: 185615
-
Jakob Stoklund Olesen authored
Revert "Simplify landing pad lowering." Revert "Remove the EXCEPTIONADDR, EHSELECTION, and LSDAADDR ISD opcodes." llvm-svn: 185600
-
Jakob Stoklund Olesen authored
These exception-related opcodes are not used any longer. llvm-svn: 185596
-
Jakob Stoklund Olesen authored
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
-
Jakob Stoklund Olesen authored
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
-
Eric Christopher authored
llvm-svn: 185589
-
Eric Christopher authored
for them and update all uses. llvm-svn: 185588
-
- Jul 03, 2013
-
-
Eric Christopher authored
llvm-svn: 185586
-
Eric Christopher authored
(and for consistency). llvm-svn: 185585
-
Eric Christopher authored
llvm-svn: 185573
-
Eric Christopher authored
llvm-svn: 185523
-
Eric Christopher authored
llvm-svn: 185520
-
Craig Topper authored
llvm-svn: 185514
-
Craig Topper authored
llvm-svn: 185513
-
Craig Topper authored
Use SmallVectorImpl instead of SmallVector for iterators and references to avoid specifying the vector size unnecessarily. llvm-svn: 185512
-
Craig Topper authored
Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size. llvm-svn: 185509
-
Craig Topper authored
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
-
Craig Topper authored
Return SmallVectorImpl& instead of SmallVector& in a couple places to avoid having to specify the vector size in multiple places. llvm-svn: 185507
-
Craig Topper authored
Use SmallVectorImpl& instead of SmallVector& to avoid needlessly respecifying the small vector size. llvm-svn: 185505
-
Craig Topper authored
Use SmallVectorImpl::iterator/const_iterator instead of SmallVector to avoid specifying the vector size. llvm-svn: 185504
-
Eric Christopher authored
avoid adding information for the debug_inlined section when it isn't going to be emitted anyhow. llvm-svn: 185500
-
Eric Christopher authored
llvm-svn: 185498
-
Eric Christopher authored
llvm-svn: 185497
-
Eric Christopher authored
grep. llvm-svn: 185496
-
Eric Christopher authored
llvm-svn: 185495
-
Eric Christopher authored
llvm-svn: 185492
-
Eric Christopher authored
true, so remove the return value and propagate accordingly. llvm-svn: 185490
-
Manman Ren authored
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
-
- Jul 02, 2013
-
-
Eric Christopher authored
llvm-svn: 185480
-
Ulrich Weigand authored
[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
-