aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
AgeCommit message (Collapse)Author
2009-08-11Remove unnecessary casts.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78664 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-11Add const qualifiers.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78663 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-11Rebuild RegScavenger::DistanceMap each time it is needed.Jakob Stoklund Olesen
The register scavenger maintains a DistanceMap that maps MI pointers to their distance from the top of the current MBB. The DistanceMap is built incrementally in forward() and in bulk in findFirstUse(). It is used by scavengeRegister() to determine which candidate register has the longest unused interval. Unfortunately the DistanceMap contents can become outdated. The first time scavengeRegister() is called, the DistanceMap is filled to cover the MBB. If then instructions are inserted in the MBB (as they always are following scavengeRegister()), the recorded distances are too short. This causes bad behaviour in the included test case where a register use /after/ the current position is ignored because findFirstUse() thinks is is /before/ the current position. A "using an undefined register" assertion follows promptly. The fix is to build a fresh DistanceMap at the top of scavengeRegister(), and discard it after use. This means that DistanceMap is no longer needed as a RegScavenger member variable, and forward() doesn't need to update it. The fix then discloses issue number two in the same test case: The candidate search in scavengeRegister() finds a CSR that has been saved in the prologue, but is currently unused. It would be both inefficient and wrong to spill such a register in the emergency spill slot. In the present case, the emergency slot restore is placed immediately before the normal epilogue restore, leading to a "Redefining a live register" assertion. Fix number two: When scavengerRegister() stumbles upon an unused register that is overwritten later in the MBB, return that register early. It is important to verify that the register is defined later in the MBB, otherwise it might be an unspilled CSR. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78650 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-11Fix a -Asserts warning.Daniel Dunbar
- Since the function is never called in NDEBUG mode, just dropped the DEBUG() uses here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78649 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-11Replace DOUT.David Goodwin
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78634 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-11SjLj based exception handling unwinding support. This patch is nasty, brutishJim Grosbach
and short. Well, it's kinda short. Definitely nasty and brutish. The front-end generates the register/unregister calls into the SjLj runtime, call-site indices and landing pad dispatch. The back end fills in the LSDA with the call-site information provided by the front end. Catch blocks are not yet implemented. Built on Darwin and verified no llvm-core "make check" regressions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78625 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Modified VNInfo. The "copy" member is now a union which holds the copy for a ↵Lang Hames
register interval, or the defining register for a stack interval. Access is via getCopy/setCopy and getReg/setReg. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78620 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Fix a bug in the DAGCombiner's handling of multiple linkedDan Gohman
MERGE_VALUES nodes. Replacing the result values with the operands in one MERGE_VALUES node may cause another MERGE_VALUES node be CSE'd with the first one, and bring its uses along, so that the first one isn't dead, as this code expects. Fix this by iterating until the node is really dead. This fixes PR4699. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78619 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Fix a bug where DAGCombine was producing an illegal ConstantFPDan Gohman
node after legalize, and remove the workaround code from the ARM backend. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78615 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Rename MVT to EVT, in preparation for splitting SimpleValueType out into its ↵Owen Anderson
own struct type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78610 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Remove a bunch of debugging code that was slowing PBQP down by 25% or so.Owen Anderson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78601 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Start moving TargetLowering away from using full MVTs and towards ↵Owen Anderson
SimpleValueType, which will simplify the privatization of IntegerType in the future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78584 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Make this comment more closely reflect the code.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78569 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Add support for printing loop structure information in asm comments.David Greene
This definitely slows down asm output so put it under an -asm-exuberant flag. This information is useful when doing static analysis of performance issues. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78567 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Post RA scheduler changes. Introduce a hazard recognizer that uses the ↵David Goodwin
target schedule information to accurately model the pipeline. Update the scheduler to correctly handle multi-issue targets. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78563 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-10Move ConstantExpr handling to ResolveConstantExpr method and alsoBruno Cardoso Lopes
add support for PtrToInt, Add, Mul. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78552 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08sink the 'name' and 'isdirective' state out of MCSection into its derived ↵Chris Lattner
classes. This totally optimizes PIC16 sections by not having an 'isdirective' bit anymore!! ;-) git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78517 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-081. Make MCSection an abstract class.Chris Lattner
2. Move section switch printing to MCSection virtual method which takes a TAI. This eliminates textual formatting stuff from TLOF. 3. Eliminate SwitchToSectionDirective, getSectionFlagsAsString, and TLOFELF::AtIsCommentChar. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78510 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08eliminate TargetLoweringObjectFileSparc in favor of a TAI hook.Chris Lattner
A TAI hook is appropriate in this case because this is just an asm syntax issue, not a semantic difference. TLOF should model the semantics of the section. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78498 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08Don't build illegal ops in DAGCombiner::SimplifyBinOpWithSameOpcodeHands().Jakob Stoklund Olesen
Blackfin supports and/or/xor on i32 but not on i16. Teach DAGCombiner::SimplifyBinOpWithSameOpcodeHands to not produce illegal nodes after legalize ops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78497 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08ELF improvements:Bruno Cardoso Lopes
Handle large integers, x86_fp80, ConstantAggregateZero, and two more ConstantExpr: GetElementPtr and IntToPtr Set SHF_MERGE bit for mergeable strings Avoid zero initialized strings to be classified as a bss symbol Don't allow common symbols to be classified as STB_WEAK Add a constant to be used as a global value offset in data relocations git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78476 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08Clean out per-function data after the machine code verifier is done with it.Jakob Stoklund Olesen
Also don't dereference old pointers after they have been deleted causing random crashes when enabling the machine code verifier. Ahem... I have not included a test case for the crash. It hapened when enabling the verifier on CodeGen/X86/2009-08-06-branchfolder-crash.ll. The crash depends on an MBB being allocated at the same address as a previously deleted MBB. I don't think that can be reproduced reliably. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78472 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08Update the machine code verifier to keep up with the scavenger.Jakob Stoklund Olesen
* Cleaner handling of <undef>. * <def> takes precedence over <def,dead>. * Implement the OK-to-redefine-a-register-that-was- live-in-but-has-not-been-used-before rule. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78467 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08Remove RegisterScavenger::isSuperRegUsed(). This completely reverses the ↵Jakob Stoklund Olesen
mistaken commit r77904. Now there is no special treatment of instructions that redefine part of a super-register. Instead, the super-register is marked with <imp-use,kill> and <imp-def>. For instance, from LowerSubregs on ARM: subreg: CONVERTING: %Q1<def> = INSERT_SUBREG %Q1<undef>, %D1<kill>, 5 subreg: %D2<def> = FCPYD %D1<kill>, 14, %reg0, %Q1<imp-def> subreg: CONVERTING: %Q1<def> = INSERT_SUBREG %Q1, %D0<kill>, 6 subreg: %D3<def> = FCPYD %D0<kill>, 14, %reg0, %Q1<imp-use,kill>, %Q1<imp-def> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78466 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08Simplify RegScavenger::forward a bit more.Jakob Stoklund Olesen
Verify that early clobber registers and their aliases are not used. All changes to RegsAvailable are now done as a transaction so the order of operands makes no difference. The included test case is from PR4686. It has behaviour that was dependent on the order of operands. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78465 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-08Fix some -Asserts unused variable warnings.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78447 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07code cleanupChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78432 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07remove a bunch of now-dead crud from the asmprinter and TAI interfaces.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78428 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Back out some of recent register scavenger change by John Mosby. It broke a ↵Evan Cheng
number of ARM tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78421 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07tidy upChris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78416 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Rewrite previous patch to follow Chris' stylisticDale Johannesen
preference; no functional change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78391 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Another coalescer bug. When a dead copy is eliminated, transfer the kill to ↵Evan Cheng
a def of the exact register rather than a super-register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78376 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Update CMake.Daniel Dunbar
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78367 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Fix a bunch of namespace pollution.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78363 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Fix a typo in a comment.Dan Gohman
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78362 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Code clean up.Evan Cheng
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78360 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-07Added legal stuff, fixed some formatting issues. Removed the graph generator ↵Lang Hames
stuff as it was only meant for debugging the solver. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78359 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06New C++ PBQP solver. Currently about as fast (read _slow_) as the old C ↵Lang Hames
based solver, but I'll be working to improve that. The PBQP allocator has been updated to use the new solver. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78354 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Fix PR 4626, a crash in branch folding after OptimizeBlockDale Johannesen
produced a CFG it wasn't prepared for. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78351 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Use stripPointerCasts instead of partially rewriting it.Dale Johannesen
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78350 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Get rid of RegScavenger::backwards() before the bitrot spreads.Jakob Stoklund Olesen
If we need it one day, there is nothing wrong with putting it back in. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78337 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Reg Scavenging generalization (Thumb support):John Mosby
- start support for new PEI w/reg alloc, allow running RS from emit{Pro,Epi}logue() target hooks. - fix minor issue with recursion detection. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78318 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Add assertion checks after the calls to LowerFormalArguments, LowerCall,Dan Gohman
and LowerReturn, to verify that the targets' hooks have respected some of their postconditions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78312 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Remove an over-aggressive assert. Functions with empty struct returnDan Gohman
types don't have any return values, from CodeGen's perspective. This fixes PR4688. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78311 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-06Fix a few places in DAGCombiner that were creating all-ones-bitsDan Gohman
and high-bits values in ways that weren't correct for integer types wider than 64 bits. This fixes a miscompile in PPMacroExpansion.cpp in clang on x86-64. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78295 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Privatize the StructType table, which unfortunately involves routing ↵Owen Anderson
contexts through a number of APIs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78258 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Fix some column padding bugs, reorganize things as suggested by ChrisDavid Greene
and eliminate complexity. Yay! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78243 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05remove the 'DataSectionStartSuffix' and 'TextSectionStartSuffix' knobs.Chris Lattner
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78242 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Rename a variable to make MSVC happy.Benjamin Kramer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78202 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-05Disable stack coloring with register for now. It's not able to set kill markers.Evan Cheng
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78179 91177308-0d34-0410-b5e6-96231b3b80d8