- Aug 11, 2009
-
-
Dan Gohman authored
llvm-svn: 78663
-
Jakob Stoklund Olesen authored
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. llvm-svn: 78650
-
Daniel Dunbar authored
- Since the function is never called in NDEBUG mode, just dropped the DEBUG() uses here. llvm-svn: 78649
-
David Goodwin authored
llvm-svn: 78634
-
Jim Grosbach authored
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. llvm-svn: 78625
-
Lang Hames authored
Modified VNInfo. The "copy" member is now a union which holds the copy for a register interval, or the defining register for a stack interval. Access is via getCopy/setCopy and getReg/setReg. llvm-svn: 78620
-
Dan Gohman authored
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. llvm-svn: 78619
-
Dan Gohman authored
node after legalize, and remove the workaround code from the ARM backend. llvm-svn: 78615
-
Owen Anderson authored
llvm-svn: 78610
-
- Aug 10, 2009
-
-
Owen Anderson authored
llvm-svn: 78601
-
Owen Anderson authored
Start moving TargetLowering away from using full MVTs and towards SimpleValueType, which will simplify the privatization of IntegerType in the future. llvm-svn: 78584
-
Dan Gohman authored
llvm-svn: 78569
-
David Greene authored
Add support for printing loop structure information in asm comments. 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. llvm-svn: 78567
-
David Goodwin authored
Post RA scheduler changes. Introduce a hazard recognizer that uses the target schedule information to accurately model the pipeline. Update the scheduler to correctly handle multi-issue targets. llvm-svn: 78563
-
Bruno Cardoso Lopes authored
add support for PtrToInt, Add, Mul. llvm-svn: 78552
-
- Aug 09, 2009
-
-
Chris Lattner authored
This totally optimizes PIC16 sections by not having an 'isdirective' bit anymore!! ;-) llvm-svn: 78517
-
Chris Lattner authored
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. llvm-svn: 78510
-
- Aug 08, 2009
-
-
Chris Lattner authored
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. llvm-svn: 78498
-
Jakob Stoklund Olesen authored
Blackfin supports and/or/xor on i32 but not on i16. Teach DAGCombiner::SimplifyBinOpWithSameOpcodeHands to not produce illegal nodes after legalize ops. llvm-svn: 78497
-
Bruno Cardoso Lopes authored
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 llvm-svn: 78476
-
Jakob Stoklund Olesen authored
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. llvm-svn: 78472
-
Jakob Stoklund Olesen authored
* 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. llvm-svn: 78467
-
Jakob Stoklund Olesen authored
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> llvm-svn: 78466
-
Jakob Stoklund Olesen authored
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. llvm-svn: 78465
-
Daniel Dunbar authored
llvm-svn: 78447
-
Chris Lattner authored
llvm-svn: 78432
-
Chris Lattner authored
llvm-svn: 78428
-
Evan Cheng authored
llvm-svn: 78421
-
Chris Lattner authored
llvm-svn: 78416
-
- Aug 07, 2009
-
-
Dale Johannesen authored
preference; no functional change. llvm-svn: 78391
-
Evan Cheng authored
Another coalescer bug. When a dead copy is eliminated, transfer the kill to a def of the exact register rather than a super-register. llvm-svn: 78376
-
Daniel Dunbar authored
llvm-svn: 78367
-
Dan Gohman authored
llvm-svn: 78363
-
Dan Gohman authored
llvm-svn: 78362
-
Evan Cheng authored
llvm-svn: 78360
-
Lang Hames authored
Added legal stuff, fixed some formatting issues. Removed the graph generator stuff as it was only meant for debugging the solver. llvm-svn: 78359
-
Lang Hames authored
New C++ PBQP solver. Currently about as fast (read _slow_) as the old C based solver, but I'll be working to improve that. The PBQP allocator has been updated to use the new solver. llvm-svn: 78354
-
Dale Johannesen authored
produced a CFG it wasn't prepared for. llvm-svn: 78351
-
Dale Johannesen authored
llvm-svn: 78350
-
- Aug 06, 2009
-
-
Jakob Stoklund Olesen authored
If we need it one day, there is nothing wrong with putting it back in. llvm-svn: 78337
-