summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen
Commit message (Collapse)AuthorAgeFilesLines
...
* make fast isel fall back to selectiondags for VLA llvm.declare intrinsics.Chris Lattner2009-02-121-2/+2
| | | | llvm-svn: 64379
* It's (currently) not safe to keep certain physical registers live across ↵Evan Cheng2009-02-121-2/+12
| | | | | | basic blocks, e.g. x86 fp stack registers. llvm-svn: 64374
* Oops. Last second clean up messed things up.Evan Cheng2009-02-121-2/+3
| | | | llvm-svn: 64373
* If availability info is kept when fallthrough into a bb, add the available ↵Evan Cheng2009-02-121-3/+21
| | | | | | registers to live-in set. llvm-svn: 64372
* Replace one of burr scheduling heuristic with something more sensible. Now ↵Evan Cheng2009-02-121-18/+4
| | | | | | calcMaxScratches simply compute the number of true data dependencies. This actually improve a couple of tests in dejagnu suite as many tests in llvm nightly test suite. llvm-svn: 64369
* Apparently some MachineBasicBlock's don't have corresponding llvm basic blocks.Evan Cheng2009-02-111-3/+7
| | | | llvm-svn: 64340
* Remove a bogus assertion. It's possible a live-in available value is used by ↵Evan Cheng2009-02-111-2/+0
| | | | | | a previous instruction. llvm-svn: 64339
* Fix a comment.Dan Gohman2009-02-111-2/+2
| | | | llvm-svn: 64328
* Don't use special heuristics for nodes with no data predecessorsDan Gohman2009-02-111-8/+9
| | | | | | | unless they actually have data successors, and likewise for nodes with no data successors unless they actually have data precessors. llvm-svn: 64327
* Delete the heuristic for non-livein CopyFromReg nodes. Non-liveinnessDan Gohman2009-02-111-11/+0
| | | | | | | | | is determined by whether the node has a Flag operand. However, if the node does have a Flag operand, it will be glued to its register's def, so the heuristic would end up spuriously applying to whatever node is the def. llvm-svn: 64319
* Make a transformation added in 63266 a bit less aggressive.Dale Johannesen2009-02-111-5/+9
| | | | | | | | | | | It was transforming (x&y)==y to (x&y)!=0 in the case where y is variable and known to have at most one bit set (e.g. z&1). This is not correct; the expressions are not equivalent when y==0. I believe this patch salvages what can be salvaged, including all the cases in bt.ll. Dan, please review. Fixes gcc.c-torture/execute/20040709-[12].c llvm-svn: 64314
* Implement PR3495: local spiller optimization. The local spiller can now keep ↵Evan Cheng2009-02-111-91/+208
| | | | | | availability information over BB boundaries. It visits BB's in depth first order. After visiting a BB if it find a successor which has a single predecessor it visits the successor next without clearing the availability information. This allows the successor to omit reloads or change them into copies. llvm-svn: 64298
* When scheduling a block in parts, keep track of the overallDan Gohman2009-02-1112-47/+104
| | | | | | | | | | | instruction index across each part. Instruction indices are used to make live range queries, and live ranges can extend beyond scheduling region boundaries. Refactor the ScheduleDAGSDNodes class some more so that it doesn't have to worry about this additional information. llvm-svn: 64288
* Use iterators to iterate through the Preds array instead ofDan Gohman2009-02-111-2/+3
| | | | | | | an index. This code is on the hot-path because the current way SDep edges are uniqued has quadratic complexity. llvm-svn: 64262
* Consider any instruction that modifies the stack pointer to beDan Gohman2009-02-101-0/+10
| | | | | | | | | a scheduling region boundary. This isn't necessary for correctness; it helps with compile time, as it avoids the need for data- and anti-dependencies from all spills and reloads on the stack-pointer modification. llvm-svn: 64255
* Factor out more code for computing register live-range informationforDan Gohman2009-02-107-357/+509
| | | | | | | | | | | scheduling, and generalize is so that preserves state across scheduling regions. This fixes incorrect live-range information around terminators and labels, which are effective region boundaries. In place of looking for terminators to anchor inter-block dependencies, introduce special entry and exit scheduling units for this purpose. llvm-svn: 64254
* Fix PR3457: Ignore control successors when looking for closest scheduled ↵Evan Cheng2009-02-101-1/+1
| | | | | | successor. A control successor doesn't read result(s) produced by the scheduling unit being evaluated. llvm-svn: 64210
* Validate file id.Devang Patel2009-02-101-0/+3
| | | | llvm-svn: 64204
* If the target cannot issue a copy for the given source and dest registers, ↵Evan Cheng2009-02-091-5/+10
| | | | | | abort instead of silently continue. llvm-svn: 64184
* Simplify code.Evan Cheng2009-02-091-5/+6
| | | | llvm-svn: 64164
* Make sure constant subscript is truncated to ptr size if it may not fit.Evan Cheng2009-02-091-1/+8
| | | | llvm-svn: 64163
* Re-enable machine sinking pass now that the coalescer bugs and the ↵Evan Cheng2009-02-091-8/+2
| | | | | | AnalyzeBrnach bug are fixed. llvm-svn: 64126
* Fix another case ShortenDeadCopySrcLiveRange is shortening too much. No test ↵Evan Cheng2009-02-091-6/+13
| | | | | | case possible since I don't know what to grep for. :-( llvm-svn: 64125
* Turns out AnalyzeBranch can modify the mbb being analyzed. This is a nastyEvan Cheng2009-02-091-6/+6
| | | | | | | | suprise to some callers, e.g. register coalescer. For now, add an parameter that tells AnalyzeBranch whether it's safe to modify the mbb. A better solution is out there, but I don't have time to deal with it right now. llvm-svn: 64124
* Fix PR3486. Fix a bug in code that manually patch physical register live ↵Evan Cheng2009-02-082-16/+34
| | | | | | interval after its sub-register is coalesced with a virtual register. llvm-svn: 64082
* Strengthen the previous check.Evan Cheng2009-02-081-4/+5
| | | | llvm-svn: 64076
* r64073 commit message is lost. Here it is:Evan Cheng2009-02-081-3/+4
| | | | | | | | | Right now if the coalesced copy def is dead and its src is a kill, and that there are now other uses within the live range, the coalescer would mark the def of the source register as dead. But it should also check if there are other kills which means the value has other uses not in the live range. llvm-svn: 64075
* (no commit message)Evan Cheng2009-02-081-3/+10
| | | | llvm-svn: 64073
* Revert r63999. It was breaking self-hosting builds.Bill Wendling2009-02-081-2/+8
| | | | llvm-svn: 64062
* Add missing break statements, fixing PR3503.Chris Lattner2009-02-071-8/+11
| | | | llvm-svn: 64040
* Use getDebugLoc forwarder instead of getNode()->getDebugLoc.Dale Johannesen2009-02-076-15/+15
| | | | | | No functional change. llvm-svn: 64026
* Constify TargetInstrInfo::EmitInstrWithCustomInserter, allowingDan Gohman2009-02-071-1/+1
| | | | | | ScheduleDAG's TLI member to use const. llvm-svn: 64018
* Make SDNode constructors take a DebugLoc always.Dale Johannesen2009-02-071-36/+4
| | | | | | | | | Adjust derived classes to pass UnknownLoc where a DebugLoc does not make sense. Pick one of DebugLoc and non-DebugLoc variants to survive for all such classes. llvm-svn: 64000
* Enable machine sinking pass in non-fast mode.Evan Cheng2009-02-071-8/+2
| | | | llvm-svn: 63999
* Remove now-unused constructors.Dale Johannesen2009-02-071-21/+0
| | | | llvm-svn: 63995
* Don't sink the instruction if TargetRegisterInfo::isSafeToMoveRegClassDefs ↵Evan Cheng2009-02-071-0/+4
| | | | | | doesn't think it's safe. This works around PR1911. llvm-svn: 63994
* Get rid of the last non-DebugLoc versions of getNode!Dale Johannesen2009-02-075-23/+13
| | | | | | | | | | | | Many targets build placeholder nodes for special operands, e.g. GlobalBaseReg on X86 and PPC for the PIC base. There's no sensible way to associate debug info with these. I've left them built with getNode calls with explicit DebugLoc::getUnknownLoc operands. I'm not too happy about this but don't see a good improvement; I considered adding a getPseudoOperand or something, but it seems to me that'll just make it harder to read. llvm-svn: 63992
* Remove more non-DebugLoc getNode variants. UseDale Johannesen2009-02-068-121/+93
| | | | | | | | getCALLSEQ_{END,START} to permit passing no DebugLoc there. UNDEF doesn't logically have DebugLoc; add getUNDEF to encapsulate this. llvm-svn: 63978
* And one more file.Dale Johannesen2009-02-061-3/+4
| | | | llvm-svn: 63971
* Remove more non-DebugLoc versions of getNode.Dale Johannesen2009-02-065-29/+9
| | | | llvm-svn: 63969
* Clear out the CurDebugLoc info when doing a 'clear' on the SDL object.Bill Wendling2009-02-061-0/+1
| | | | llvm-svn: 63967
* Eliminate remaining non-DebugLoc version of getTargetNode.Dale Johannesen2009-02-061-39/+0
| | | | llvm-svn: 63951
* Rename SelectionDAGISel::Schedule toDan Gohman2009-02-061-11/+8
| | | | | | | | | SelectionDAGISel::CreateScheduler, and make it just create the scheduler. Leave running the scheduler to the higher-level code. This makes the higher-level code a little more explicit and easier to follow, and will help enable some future refactoring. llvm-svn: 63944
* Delete an unused member function.Dan Gohman2009-02-061-2/+0
| | | | llvm-svn: 63941
* Move getPointerRegClass from TargetInstrInfo to TargetRegisterInfo.Evan Cheng2009-02-062-13/+10
| | | | llvm-svn: 63938
* Move ScheduleDAGSDNodes.h to be a private header. Front-endsDan Gohman2009-02-068-8/+169
| | | | | | | that previously included this header should include SchedulerRegistry.h instead. llvm-svn: 63937
* Add TargetInstrInfo::isSafeToMoveRegisterClassDefs. It returns true if it's ↵Evan Cheng2009-02-061-1/+4
| | | | | | safe to move an instruction which defines a value in the register class. Replace pre-splitting specific IgnoreRegisterClassBarriers with this new hook. llvm-svn: 63936
* Move ScheduleDAGInstrs.h to be a private header. Front-endsDan Gohman2009-02-063-2/+84
| | | | | | | | that used this header to select a scheduling policy should use SchedulerRegistry.h instead (llvm-gcc and clang were updated a while ago). llvm-svn: 63934
* get rid of some non-DebugLoc getTargetNode variants.Dale Johannesen2009-02-061-41/+0
| | | | llvm-svn: 63909
* Get rid of one more non-DebugLoc getNode andDale Johannesen2009-02-061-11/+5
| | | | | | | its corresponding getTargetNode. Lots of caller changes. llvm-svn: 63904
OpenPOWER on IntegriCloud