- May 01, 2010
-
-
Dan Gohman authored
changes before doing phi lowering for switches. llvm-svn: 102809
-
- Apr 17, 2010
-
-
Dan Gohman authored
llvm-svn: 101655
-
- Mar 22, 2010
-
-
Evan Cheng authored
llvm-svn: 99214
-
Evan Cheng authored
llvm-svn: 99195
-
- Mar 10, 2010
-
-
Dale Johannesen authored
No functional effect yet. This is still evolving and should not be viewed as final. llvm-svn: 98195
-
- Feb 16, 2010
-
-
Duncan Sands authored
and T->isPointerTy(). Convert most instances of the first form to the second form. Requested by Chris. llvm-svn: 96344
-
- Nov 09, 2009
-
-
David Goodwin authored
Fix dependencies added to model memory aliasing for post-RA scheduling. The dependencies were overly conservative for memory access that are known not to alias. llvm-svn: 86580
-
- Nov 05, 2009
-
-
David Goodwin authored
llvm-svn: 86080
-
- Nov 03, 2009
-
-
rdar://problem/7352605David Goodwin authored
<rdar://problem/7352605>. When building schedule graph use mayAlias information to avoid chaining loads/stores of spill slots with non-aliased memory ops. llvm-svn: 85934
-
- Nov 02, 2009
-
-
David Goodwin authored
Chain dependencies used to enforce memory order should have latency of 0 (except for true dependency of Store followed by aliased Load... we estimate that case with a single cycle of latency assuming the hardware will bypass) llvm-svn: 85807
-
- Oct 26, 2009
-
-
Dan Gohman authored
machineinstr whether the aliased register is dead, rather than the original register is dead. This allows it to get the correct answer when examining an instruction like this: CALLpcrel32 <ga:foo>, %AL<imp-def>, %EAX<imp-def,dead> where EAX is dead but a subregister of it is still live. This fixes PR5294. llvm-svn: 85135
-
- Oct 18, 2009
-
-
Evan Cheng authored
llvm-svn: 84432
-
Evan Cheng authored
stack slots and giving them different PseudoSourceValue's did not fix the problem of post-alloc scheduling miscompiling llvm itself. - Apply Dan's conservative workaround by assuming any non fixed stack slots can alias other memory locations. This means a load from spill slot #1 cannot move above a store of spill slot #2. - Enable post-alloc scheduling for x86 at optimization leverl Default and above. llvm-svn: 84424
-
- Oct 10, 2009
-
-
Dan Gohman authored
is trivially rematerializable and integrate it into TargetInstrInfo::isTriviallyReMaterializable. This way, all places that need to know whether an instruction is rematerializable will get the same answer. This enables the useful parts of the aggressive-remat option by default -- using AliasAnalysis to determine whether a memory location is invariant, and removes the questionable parts -- rematting operations with virtual register inputs that may not be live everywhere. llvm-svn: 83687
-
- Oct 07, 2009
-
-
Dan Gohman authored
implementations with a new MachineInstr::isInvariantLoad, which uses MachineMemOperands and is target-independent. This brings MachineLICM and other functionality to targets which previously lacked an isInvariantLoad implementation. llvm-svn: 83475
-
- Sep 25, 2009
-
-
Dan Gohman authored
- Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions. This eliminates MachineInstr's std::list member and allows the data to be created by isel and live for the remainder of codegen, avoiding a lot of copying and unnecessary translation. This also shrinks MemSDNode. - Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated fields for MachineMemOperands. - Change MemSDNode to have a MachineMemOperand member instead of its own fields with the same information. This introduces some redundancy, but it's more consistent with what MachineInstr will eventually want. - Ignore alignment when searching for redundant loads for CSE, but remember the greatest alignment. Target-specific code which previously used MemOperandSDNodes with generic SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range so that the SelectionDAG framework knows that MachineMemOperand information is available. llvm-svn: 82794
-
- Sep 18, 2009
-
-
Evan Cheng authored
Enhance EmitInstrWithCustomInserter() so target can specify CFG changes that sdisel will use to properly complete phi nodes. Not functionality change yet. llvm-svn: 82273
-
- Aug 19, 2009
-
-
David Goodwin authored
Use the schedule itinerary operand use/def cycle information to adjust dependence edge latency for post-RA scheduling. llvm-svn: 79425
-
- Aug 13, 2009
-
-
David Goodwin authored
llvm-svn: 78910
-
- Aug 10, 2009
-
-
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
-
- Aug 07, 2009
-
-
Dan Gohman authored
llvm-svn: 78362
-
- Jul 17, 2009
-
-
Dan Gohman authored
llvm-svn: 76236
-
- Jul 14, 2009
-
-
Dan Gohman authored
and related functions out of LoopBase and into Loop, since they are specific to BasicBlock-based loops. This also allows the code to be moved out-of-line. llvm-svn: 75523
-
- Feb 11, 2009
-
-
Dan Gohman authored
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
-
Dan Gohman authored
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
-
- Feb 06, 2009
-
-
Dan Gohman authored
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
-
- Jan 30, 2009
-
-
Dan Gohman authored
If a MachineInstr doesn't have a memoperand but has an opcode that is known to load or store, assume its memory reference may alias *anything*, including stack slots which the compiler completely controls. To partially compensate for this, teach the ScheduleDAG building code to do basic getUnderlyingValue analysis. This greatly reduces the number of instructions that require restrictive dependencies. This code will need to be revisited when we start doing real alias analysis, but it should suffice for now. llvm-svn: 63370
-
- Jan 16, 2009
-
-
Dan Gohman authored
and every other instruction in their blocks to keep the terminator instructions at the end, teach the post-RA scheduler how to operate on ranges of instructions, and exclude terminators from the range of instructions that get scheduled. Also, exclude mid-block labels, such as EH_LABEL instructions, and schedule code before them separately from code after them. This fixes problems with the post-RA scheduler moving code past EH_LABELs. llvm-svn: 62366
-
- Jan 15, 2009
-
-
Dan Gohman authored
and into the ScheduleDAGInstrs class, so that they don't get destructed and re-constructed for each block. This fixes a compile-time hot spot in the post-pass scheduler. To help facilitate this, tidy and do some minor reorganization in the scheduler constructor functions. llvm-svn: 62275
-
- Dec 23, 2008
-
-
Dan Gohman authored
This removes all the _8, _16, _32, and _64 opcodes and replaces each group with an unsuffixed opcode. The MemoryVT field of the AtomicSDNode is now used to carry the size information. In tablegen, the size-specific opcodes are replaced by size-independent opcodes that utilize the ability to compose them with predicates. This shrinks the per-opcode tables and makes the code that handles atomics much more concise. llvm-svn: 61389
-
Dan Gohman authored
code in ScheduleDAGSDNodes' BuildSchedGraph into separate functions. llvm-svn: 61376
-
Dan Gohman authored
several places. isTerminator() returns true for a superset of cases, and includes things like FP_REG_KILL, which are nither return or branch but aren't safe to move/remat/etc. llvm-svn: 61373
-
- Dec 16, 2008
-
-
Dan Gohman authored
especially in the case of addresses computed from loop induction variables. llvm-svn: 61075
-
Dan Gohman authored
computation code. Also, avoid adding output-depenency edges when both defs are dead, which frequently happens with EFLAGS defs. Compute Depth and Height lazily, and always in terms of edge latency values. For the schedulers that don't care about latency, edge latencies are set to 1. Eliminate Cycle and CycleBound, and LatencyPriorityQueue's Latencies array. These are all subsumed by the Depth and Height fields. llvm-svn: 61073
-
Dan Gohman authored
instruction itinerary data to back-schedule loads. llvm-svn: 61070
-
- Dec 09, 2008
-
-
Dan Gohman authored
The Cost field is removed. It was only being used in a very limited way, to indicate when the scheduler should attempt to protect a live register, and it isn't really needed to do that. If we ever want the scheduler to start inserting copies in non-prohibitive situations, we'll have to rethink some things anyway. A Latency field is added. Instead of giving each node a single fixed latency, each edge can have its own latency. This will eventually be used to model various micro-architecture properties more accurately. The PointerIntPair class and an internal union are now used, which reduce the overall size. llvm-svn: 60806
-
- Dec 08, 2008
-
-
Dan Gohman authored
llvm-svn: 60707
-
- Dec 04, 2008
-
-
Dan Gohman authored
the main thing this covers is spills to distinct spill slots. llvm-svn: 60517
-
- Nov 24, 2008
-
-
Dan Gohman authored
llvm-svn: 59968
-
- Nov 21, 2008
-
-
Dan Gohman authored
llvm-svn: 59837
-