| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
class.
llvm-svn: 203378
|
|
|
|
|
|
|
|
|
|
|
|
| |
Ideally, the machinel model is added at the time the instructions are
defined. But many instructions in X86InstrSSE.td still need a model.
Without this workaround the scheduler asserts because x86 already has
itinerary classes for these instructions, indicating they should be
modeled by the scheduler. Since we use the new machine model for other
instructions, it expects a new machine model for these too.
llvm-svn: 191391
|
|
|
|
|
|
| |
And add Sandybridge/Haswell resource buffers.
llvm-svn: 184034
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Replace the ill-defined MinLatency and ILPWindow properties with
with straightforward buffer sizes:
MCSchedMode::MicroOpBufferSize
MCProcResourceDesc::BufferSize
These can be used to more precisely model instruction execution if desired.
Disabled some misched tests temporarily. They'll be reenabled in a few commits.
llvm-svn: 184032
|
|
|
|
|
|
|
|
|
| |
Don't output data if we are supposed to ignore the record.
Reapply of 183255, I don't think this was causing the tablegen segfault on linux
testers.
llvm-svn: 183311
|
|
|
|
| |
llvm-svn: 183273
|
|
|
|
|
|
| |
Don't output data if we are supposed to ignore the record.
llvm-svn: 183255
|
|
|
|
|
|
|
|
|
| |
Super-resources and resource groups are two ways of expressing
overlapping sets of processor resources. Now we generate table entries
the same way for both so the scheduler never needs to explicitly check
for super-resources.
llvm-svn: 180162
|
|
|
|
| |
llvm-svn: 180160
|
|
|
|
|
|
| |
Allow variants to be defined only for some processors on a target.
llvm-svn: 178074
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
We always supported a mixture of the old itinerary model and new
per-operand model, but it required a level of indirection to map
itinerary classes to SchedRW lists. This was done for ARM A9.
Now we want to define x86 SchedRW lists, with the goal of removing its
itinerary classes, but still support the itineraries in the mean
time. When I original developed the model, Atom did not have
itineraries, so there was no reason to expect this requirement.
llvm-svn: 177226
|
|
|
|
|
|
| |
This is the other half of r177122 that I meant to commit at the same time.
llvm-svn: 177123
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This allows abitrary groups of processor resources. Using something in
a subset automatically counts againts the superset. Currently, this
only works if the superset is also a ProcResGroup as opposed to a
SuperUnit.
This allows SandyBridge to be expressed naturally, which will be
checked in shortly.
def SBPort01 : ProcResGroup<[SBPort0, SBPort1]>;
def SBPort15 : ProcResGroup<[SBPort1, SBPort5]>;
def SBPort23 : ProcResGroup<[SBPort2, SBPort3]>;
def SBPort015 : ProcResGroup<[SBPort0, SBPort1, SBPort5]>;
llvm-svn: 177112
|
|
|
|
|
|
|
|
| |
Fix the way resources are counted. I'm taking some time to cleanup the
way MachineScheduler handles in-order machine resources. Eventually
we'll need more PPC/Atom test cases in tree.
llvm-svn: 176390
|
|
|
|
|
|
|
|
|
|
| |
This was an experimental option, but needs to be defined
per-target. e.g. PPC A2 needs to aggressively hide latency.
I converted some in-order scheduling tests to A2. Hal is working on
more test cases.
llvm-svn: 171946
|
|
|
|
|
|
|
| |
I've tried to find main moudle headers where possible, but the TableGen
stuff may warrant someone else looking at it.
llvm-svn: 169251
|
|
|
|
|
|
|
|
|
| |
"../llvm-git/utils/TableGen/CodeGenSchedule.cpp", line 1594.12: 1540-0218 (S) The call does not match any parameter list for "operator+".
"../llvm-git/include/llvm/ADT/STLExtras.h", line 130.1: 1540-1283 (I) "template <class _Iterator, class Func> llvm::operator+(mapped_iterator<_Iterator,Func>::difference_type, const mapped_iterator<_Iterator,Func> &)" is not a viable candidate.
Patch by Kai.
llvm-svn: 167311
|
|
|
|
|
|
|
|
|
|
|
| |
Most places can use PrintFatalError as the unwinding mechanism was not
used for anything other than printing the error. The single exception
was CodeGenDAGPatterns.cpp, where intermediate errors during type
resolution were ignored to simplify incremental platform development.
This use is replaced by an error flag in TreePattern and bailout earlier
in various places if it is set.
llvm-svn: 166712
|
|
|
|
| |
llvm-svn: 165602
|
|
|
|
|
|
|
|
|
| |
A processor can now arbitrarily alias one SchedWrite onto
another. Only the SchedAlias definition need be within the processor
model. The aliased SchedWrite may be a SchedVariant, WriteSequence, or
transitively refer to another alias.
llvm-svn: 165179
|
|
|
|
| |
llvm-svn: 165178
|
|
|
|
|
|
|
| |
Allow subtargets to tie SchedReadWrite types to processor specific
sequences or variants.
llvm-svn: 164451
|
|
|
|
| |
llvm-svn: 164199
|
|
|
|
|
|
|
|
| |
Now where we used to call ReInitMCSubtargetInfo, we actually recompute
the same information as InitMCSubtargetInfo instead of only setting
the feature bits.
llvm-svn: 164105
|
|
|
|
|
|
| |
resolving instruction variants.
llvm-svn: 164095
|
|
|
|
| |
llvm-svn: 164094
|
|
|
|
|
|
| |
model.
llvm-svn: 164092
|
|
|
|
| |
llvm-svn: 164078
|
|
|
|
| |
llvm-svn: 164075
|
|
|
|
|
|
|
| |
I have to work out the Target/CodeGen header dependencies
before putting this back.
llvm-svn: 164072
|
|
|
|
| |
llvm-svn: 164066
|
|
|
|
|
|
| |
resolving instruction variants.
llvm-svn: 164062
|
|
|
|
|
|
| |
model.
llvm-svn: 164061
|
|
|
|
|
|
| |
model.
llvm-svn: 164060
|
|
|
|
|
|
|
|
|
|
|
|
| |
Map the CodeGenSchedule object model onto data tables. The structure
of the data tables is defined in MC, so for convenience we include
MCSchedule.h. The alternative is maintaining a redundant copy of the
table structure definitions. Mapping the object model onto data tables
is sufficiently complicated that it should not be interleaved with
emitting source code. This avoids major problem with the backend for
itinerary generation.
llvm-svn: 164059
|
|
|
|
| |
llvm-svn: 164058
|
|
|
|
|
|
| |
Collect SchedClasses and SchedRW types from the subtarget defs.
llvm-svn: 163951
|
|
|
|
|
|
| |
the SubtargetInfoKV tables. Found by gcc48 -Wcast-qual.
llvm-svn: 163251
|
|
|
|
|
|
|
| |
This replaces an existing subtarget hook on ARM and allows standard
CodeGen passes to potentially use the property.
llvm-svn: 161471
|
|
|
|
| |
llvm-svn: 160621
|
|
|
|
| |
llvm-svn: 159959
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
subtarget CPU descriptions and support new features of
MachineScheduler.
MachineModel has three categories of data:
1) Basic properties for coarse grained instruction cost model.
2) Scheduler Read/Write resources for simple per-opcode and operand cost model (TBD).
3) Instruction itineraties for detailed per-cycle reservation tables.
These will all live side-by-side. Any subtarget can use any
combination of them. Instruction itineraries will not change in the
near term. In the long run, I expect them to only be relevant for
in-order VLIW machines that have complex contraints and require a
precise scheduling/bundling model. Once itineraries are only actively
used by VLIW-ish targets, they could be replaced by something more
appropriate for those targets.
This tablegen backend rewrite sets things up for introducing
MachineModel type #2: per opcode/operand cost model.
llvm-svn: 159891
|
|
|
|
| |
llvm-svn: 159889
|
|
|
|
| |
llvm-svn: 159543
|
|
|
|
|
|
| |
Reapplies r159406 with minor cleanup. The regressions appear to have been spurious.
llvm-svn: 159541
|
|
|
|
|
|
| |
This reverts commit r159406. I noticed a performance regression so I'll back out for now.
llvm-svn: 159411
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The TargetInstrInfo::getNumMicroOps API does not change, but soon it
will be used by MachineScheduler. Now each subtarget can specify the
number of micro-ops per itinerary class. For ARM, this is currently
always dynamic (-1), because it is used for load/store multiple which
depends on the number of register operands.
Zero is now a valid number of micro-ops. This can be used for
nop pseudo-instructions or instructions that the hardware can squash
during dispatch.
llvm-svn: 159406
|
|
|
|
|
|
|
|
|
|
| |
Original commit message:
Allow up to 64 functional units per processor itinerary.
This patch changes the type used to hold the FU bitset from unsigned to uint64_t.
This will be needed for some upcoming PowerPC itineraries.
llvm-svn: 159027
|
|
|
|
|
|
|
|
| |
This makes it explicit when ScoreboardHazardRecognizer will be used.
"GenericItineraries" would only make sense if it contained real
itinerary values and still required ScoreboardHazardRecognizer.
llvm-svn: 158963
|
|
|
|
|
|
|
| |
This patch changes the type used to hold the FU bitset from unsigned to uint64_t.
This will be needed for some upcoming PowerPC itineraries.
llvm-svn: 158679
|