- Jul 01, 2010
-
-
Dan Gohman authored
llvm-svn: 107393
-
Dan Gohman authored
doing the work manually. llvm-svn: 107384
-
Dan Gohman authored
from a Value to a Type, because it doesn't actually care about the Value. llvm-svn: 107383
-
Dan Gohman authored
llvm-svn: 107381
-
Dan Gohman authored
available in a register. This is pretty primitive, but it reduces the number of instructions in common testcases by 4%. llvm-svn: 107380
-
Dan Gohman authored
llvm-svn: 107377
-
Dan Gohman authored
SelectionDAGBuilder::getValue into a helper function, with fixes to use DenseMaps safely. llvm-svn: 107371
-
Dan Gohman authored
value if the search fails. llvm-svn: 107368
-
Mikhail Glushenkov authored
llvm-svn: 107360
-
Jakob Stoklund Olesen authored
llvm-svn: 107355
-
Jakob Stoklund Olesen authored
llvm-svn: 107351
-
Bill Wendling authored
correct catch-all value. This saves having to iterate through all of the selectors in the program again. llvm-svn: 107345
-
Jim Grosbach authored
structs. rdar://8145832 llvm-svn: 107332
-
- Jun 30, 2010
-
-
Jim Grosbach authored
llvm-svn: 107321
-
Jakob Stoklund Olesen authored
llvm-svn: 107307
-
Jakob Stoklund Olesen authored
LocalRewriter::runOnMachineFunction uses this information to mark dead spill slots. This means that InlineSpiller now also works for functions that spill. llvm-svn: 107302
-
Duncan Sands authored
this could break something (but doesn't seem to). llvm-svn: 107295
-
Gabor Greif authored
llvm-svn: 107282
-
Gabor Greif authored
llvm-svn: 107279
-
Gabor Greif authored
llvm-svn: 107276
-
John Mosby authored
llvm-svn: 107244
-
Devang Patel authored
llvm-svn: 107237
-
Jakob Stoklund Olesen authored
llvm-svn: 107234
-
Jakob Stoklund Olesen authored
llvm-svn: 107233
-
Devang Patel authored
Add variables into a scope before constructing scope DIE otherwise variables won't be included DIE tree. llvm-svn: 107228
-
Jakob Stoklund Olesen authored
InlineSpiller inserts loads and spills immediately instead of deferring to VirtRegMap. This is possible now because SlotIndexes allows instructions to be inserted and renumbered. This is work in progress, and is mostly a copy of TrivialSpiller so far. It works very well for functions that don't require spilling. llvm-svn: 107227
-
Bill Wendling authored
llvm-svn: 107215
-
Devang Patel authored
llvm-svn: 107214
-
- Jun 29, 2010
-
-
Devang Patel authored
llvm-svn: 107208
-
Bill Wendling authored
metadata types which should be marked as "weak", but which the linker will remove upon final linkage. For example, the "objc_msgSend_fixup_alloc" symbol is defined like this: .globl l_objc_msgSend_fixup_alloc .weak_definition l_objc_msgSend_fixup_alloc .section __DATA, __objc_msgrefs, coalesced .align 3 l_objc_msgSend_fixup_alloc: .quad _objc_msgSend_fixup .quad L_OBJC_METH_VAR_NAME_1 This is different from the "linker_private" linkage type, because it can't have the metadata defined with ".weak_definition". llvm-svn: 107205
-
Devang Patel authored
Inspired by Artur Pietrek. llvm-svn: 107202
-
Jakob Stoklund Olesen authored
A partial redefine needs to be treated like a tied operand, and the register must be reloaded while processing use operands. This fixes a bug where partially redefined registers were processed as normal defs with a reload added. The reload could clobber another use operand if it was a kill that allowed register reuse. llvm-svn: 107193
-
Bob Wilson authored
The LowerSubregs pass needs to preserve implicit def operands attached to EXTRACT_SUBREG instructions when it replaces those instructions with copies. llvm-svn: 107189
-
Duncan Sands authored
llvm-svn: 107141
-
Rafael Espindola authored
of getPhysicalRegisterRegClass with it. If we want to make a copy (or estimate its cost), it is better to use the smallest class as more efficient operations might be possible. llvm-svn: 107140
-
Duncan Sands authored
to unsigned only to extend back to a pointer sized value on the next line. llvm-svn: 107139
-
Gabor Greif authored
llvm-svn: 107132
-
Duncan Sands authored
llvm-svn: 107127
-
Jim Grosbach authored
back-edges), make sure not to include dbg_value instructions in the count. Closing in on the end of rdar://7797940 llvm-svn: 107119
-
Bob Wilson authored
There are 2 changes relative to the previous version of the patch: 1) For the "simple" if-conversion case, there's no need to worry about RemoveExtraEdges not handling an unanalyzable branch. Predicated terminators are ignored in this context, so RemoveExtraEdges does the right thing. This might break someday if we ever treat indirect branches (BRIND) as predicable, but for now, I just removed this part of the patch, because in the case where we do not add an unconditional branch, we rely on keeping the fall-through edge to CvtBBI (which is empty after this transformation). The change relative to the previous patch is: @@ -1036,10 +1036,6 @@ IterIfcvt = false; } - // RemoveExtraEdges won't work if the block has an unanalyzable branch, - // which is typically the case for IfConvertSimple, so explicitly remove - // CvtBBI as a successor. - BBI.BB->removeSuccessor(CvtBBI->BB); RemoveExtraEdges(BBI); // Update block info. BB can be iteratively if-converted. 2) My patch exposed a bug in the code for merging the tail of a "diamond", which had previously never been exercised. The code was simply checking that the tail had a single predecessor, but there was a case in MultiSource/Benchmarks/VersaBench/dbms where that single predecessor was neither edge of the diamond. I added the following change to check for that: @@ -1276,7 +1276,18 @@ // tail, add a unconditional branch to it. if (TailBB) { BBInfo TailBBI = BBAnalysis[TailBB->getNumber()]; - if (TailBB->pred_size() == 1 && !TailBBI.HasFallThrough) { + bool CanMergeTail = !TailBBI.HasFallThrough; + // There may still be a fall-through edge from BBI1 or BBI2 to TailBB; + // check if there are any other predecessors besides those. + unsigned NumPreds = TailBB->pred_size(); + if (NumPreds > 1) + CanMergeTail = false; + else if (NumPreds == 1 && CanMergeTail) { + MachineBasicBlock::pred_iterator PI = TailBB->pred_begin(); + if (*PI != BBI1->BB && *PI != BBI2->BB) + CanMergeTail = false; + } + if (CanMergeTail) { MergeBlocks(BBI, TailBBI); TailBBI.IsDone = true; } else { With these fixes, I was able to run all the SingleSource and MultiSource tests successfully. llvm-svn: 107110
-