|  | Commit message (Collapse) | Author | Age | Files | Lines | 
|---|
| ... |  | 
| | 
| 
| 
| 
| 
| | And add comments, since this is obviously confusing.
llvm-svn: 152445 | 
| | 
| 
| 
| | llvm-svn: 152393 | 
| | 
| 
| 
| 
| 
| | not private.
llvm-svn: 152382 | 
| | 
| 
| 
| | llvm-svn: 152374 | 
| | 
| 
| 
| | llvm-svn: 152373 | 
| | 
| 
| 
| | llvm-svn: 152360 | 
| | 
| 
| 
| | llvm-svn: 152356 | 
| | 
| 
| 
| | llvm-svn: 152301 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20120130/136146.html
Implemented CaseIterator and it solves almost all described issues: we don't need to mix operand/case/successor indexing anymore. Base iterator class is implemented as a template since it may be initialized either from "const SwitchInst*" or from "SwitchInst*".
ConstCaseIt is just a read-only iterator.
CaseIt is read-write iterator; it allows to change case successor and case value.
Usage of iterator allows totally remove resolveXXXX methods. All indexing convertions done automatically inside the iterator's getters.
Main way of iterator usage looks like this:
SwitchInst *SI = ... // intialize it somehow
for (SwitchInst::CaseIt i = SI->caseBegin(), e = SI->caseEnd(); i != e; ++i) {
  BasicBlock *BB = i.getCaseSuccessor();
  ConstantInt *V = i.getCaseValue();
  // Do something.
}
If you want to convert case number to TerminatorInst successor index, just use getSuccessorIndex iterator's method.
If you want initialize iterator from TerminatorInst successor index, use CaseIt::fromSuccessorIndex(...) method.
There are also related changes in llvm-clients: klee and clang.
llvm-svn: 152297 | 
| | 
| 
| 
| 
| 
| 
| 
| | Allow targets to provide their own schedulers (subclass of
ScheduleDAGInstrs) to the misched pass. Select schedulers using
-misched=...
llvm-svn: 152278 | 
| | 
| 
| 
| | llvm-svn: 152262 | 
| | 
| 
| 
| 
| 
| | implement their own MachineScheduler.
llvm-svn: 152261 | 
| | 
| 
| 
| | llvm-svn: 152260 | 
| | 
| 
| 
| | llvm-svn: 152259 | 
| | 
| 
| 
| 
| 
| 
| 
| | ScheduleDAGInstrs will be the main interface for MI-level
schedulers. Make sure it's readable: one page of protected fields, one
page of public methids.
llvm-svn: 152258 | 
| | 
| 
| 
| | llvm-svn: 152257 | 
| | 
| 
| 
| 
| 
| | ScheduleDAGInstrs knows nothing about how instructions will be moved or inserted.
llvm-svn: 152256 | 
| | 
| 
| 
| 
| 
| 
| | We had half the API with one convention, half with another. Now was a
good time to clean it up.
llvm-svn: 152255 | 
| | 
| 
| 
| | llvm-svn: 152221 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | This one is particularly annoying because the hashing algorithm is
highly specialized, with a strange "equivalence" definition that subsets
the fields involved.
Still, this looks at the exact same set of data as the old code, but
without bitwise or-ing over parts of it and other mixing badness. No
functionality changed here. I've left a substantial fixme about the fact
that there is a cleaner and more principled way to do this, but it
requires making the equality definition actual stable for particular
types...
llvm-svn: 152218 | 
| | 
| 
| 
| 
| 
| 
| 
| | the DebugLoc information can be maintained throughout by grabbing the DebugLoc
before the RemoveBranch and then passing the result to the InsertBranch.
Patch by Andrew Stanford-Jason!
llvm-svn: 152212 | 
| | 
| 
| 
| | llvm-svn: 152210 | 
| | 
| 
| 
| | llvm-svn: 152209 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| | ScheduleDAG is responsible for the DAG: SUnits and SDeps. It provides target hooks for latency computation.
ScheduleDAGInstrs extends ScheduleDAG and defines the current scheduling region in terms of MachineInstr iterators. It has access to the target's scheduling itinerary data. ScheduleDAGInstrs provides the logic for building the ScheduleDAG for the sequence of MachineInstrs in the current region. Target's can implement highly custom schedulers by extending this class.
ScheduleDAGPostRATDList provides the driver and diagnostics for current postRA scheduling. It maintains a current Sequence of scheduled machine instructions and logic for splicing them into the block. During scheduling, it uses the ScheduleHazardRecognizer provided by the target.
Specific changes:
- Removed driver code from ScheduleDAG. clearDAG is the only interface needed.
- Added enterRegion/exitRegion hooks to ScheduleDAGInstrs to delimit the scope of each scheduling region and associated DAG. They should be used to setup and cleanup any region-specific state in addition to the DAG itself. This is necessary because we reuse the same ScheduleDAG object for the entire function. The target may extend these hooks to do things at regions boundaries, like bundle terminators. The hooks are called even if we decide not to schedule the region. So all instructions in a block are "covered" by these calls.
- Added ScheduleDAGInstrs::begin()/end() public API.
- Moved Sequence into the driver layer, which is specific to the scheduling algorithm.
llvm-svn: 152208 | 
| | 
| 
| 
| | llvm-svn: 152207 | 
| | 
| 
| 
| 
| 
| | ScheduleDAG has nothing to do with how the instructions are scheduled.
llvm-svn: 152206 | 
| | 
| 
| 
| 
| 
| | ScheduleDAG will not refer to the scheduled instruction sequence.
llvm-svn: 152205 | 
| | 
| 
| 
| 
| 
| | ScheduleDAG will not refer to the scheduled instruction sequence.
llvm-svn: 152204 | 
| | 
| 
| 
| | llvm-svn: 152203 | 
| | 
| 
| 
| | llvm-svn: 152178 | 
| | 
| 
| 
| 
| 
| | Soon, ScheduleDAG will not refer to the BB.
llvm-svn: 152177 | 
| | 
| 
| 
| 
| 
| | diagnostics.
llvm-svn: 152176 | 
| | 
| 
| 
| | llvm-svn: 152175 | 
| | 
| 
| 
| 
| 
| | the target interface.
llvm-svn: 152174 | 
| | 
| 
| 
| | llvm-svn: 152173 | 
| | 
| 
| 
| | llvm-svn: 152172 | 
| | 
| 
| 
| 
| 
| 
| 
| | as well as completely defined classes.
This fixes rdar://10956070
llvm-svn: 152171 | 
| | 
| 
| 
| 
| 
| | performance regression (due to increased register pressure from overly aggressive pre-inc formation).
llvm-svn: 152162 | 
| | 
| 
| 
| | llvm-svn: 152153 | 
| | 
| 
| 
| | llvm-svn: 152089 | 
| | 
| 
| 
| 
| 
| | providing a default expansion (FADD+FNEG), and teaching DAGCombine not to form FSUBs post-legalize if they are not legal.
llvm-svn: 152079 | 
| | 
| 
| 
| 
| 
| 
| | Used to allow context sensitive printing of super-register or sub-register
references.
llvm-svn: 152043 | 
| | 
| 
| 
| 
| 
| | Patch by Sean Silva!
llvm-svn: 152042 | 
| | 
| 
| 
| 
| 
| | static data size.
llvm-svn: 152016 | 
| | 
| 
| 
| 
| 
| 
| 
| | The first def of a virtual register cannot also read the register.
Assert on such bad machine code instead of trying to fix it.
TwoAddressInstructionPass should never create code like that.
llvm-svn: 152010 | 
| | 
| 
| 
| 
| 
| 
| | We are already setting <undef> flags, and that is good enough. The
<imp-def> operands don't mean anything any more.
llvm-svn: 152009 | 
| | 
| 
| 
| | llvm-svn: 152001 | 
| | 
| 
| 
| 
| 
| | static data size.
llvm-svn: 151998 | 
| | 
| 
| 
| 
| 
| | size of static data.
llvm-svn: 151996 | 
| | 
| 
| 
| | llvm-svn: 151875 |