History log of /external/llvm/lib/CodeGen/MachineTraceMetrics.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
5413b68b1f59041a821287790dbc1ee2e272cf4e 11-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add more trace query functions.

Trace::getResourceLength() computes the number of cycles required to
execute the trace when ignoring data dependencies. The number can be
compared to the critical path to estimate the trace ILP.

Trace::getPHIDepth() computes the data dependency depth of a PHI in a
trace successor that isn't necessarily part of the trace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161711 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
7a8f311ece7108e44ded601237091c23ef7782eb 07-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix a couple of typos.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161437 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
84ef6ba44394f983d985b02e328cbb2dd779e4b0 07-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add trace accessor methods, implement primitive if-conversion heuristic.

Compare the critical paths of the two traces through an if-conversion
candidate. If the difference is larger than the branch brediction
penalty, reject the if-conversion. If would never pay.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161433 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
79a20ce6f0d6c1041a5031aca41b50a1e58b1d4b 02-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Compute the critical path length through a trace.

Whenever both instruction depths and instruction heights are known in a
block, it is possible to compute the length of the critical path as
max(depth+height) over the instructions in the block.

The stored live-in lists make it possible to accurately compute the
length of a critical path that bypasses the current (small) block.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161197 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
c7f44b8b8fca87cdd28ffe420c3b87141d88c099 02-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Compute instruction heights through a trace.

The height on an instruction is the minimum number of cycles from the
instruction is issued to the end of the trace. Heights are computed for
all instructions in and below the trace center block.

The method for computing heights is different from the depth
computation. As we visit instructions in the trace bottom-up, heights of
used instructions are pushed upwards. This way, we avoid scanning long
use lists, looking for uses in the current trace.

At each basic block boundary, a list of live-in registers and their
minimum heights is saved in the trace block info. These live-in lists
are used when restarting depth computations on a trace that
converges with an already computed trace. They will also be used to
accurately compute the critical path length.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161138 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
5f8e8bd656bb174b3e22c0e56ce3d1eb958ac2e2 31-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Compute instruction depths through the current trace.

Assuming infinite issue width, compute the earliest each instruction in
the trace can issue, when considering the latency of data dependencies.
The issue cycle is record as a 'depth' from the beginning of the trace.

This is half the computation required to find the length of the critical
path through the trace. Heights are next.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161074 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
64e2973bf78970aedecbb5fda44e19f93f56dd9b 31-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Rename CT -> MTM. MachineTraceMetrics is abbreviated MTM.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161072 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
20f13c50d88560d75129f4a691fe6b477d04dc70 30-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Clarify invalidation strategy in comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160997 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
ef6c76c984f821ea866902a7f9e695b16e971468 30-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Hook into PassManager's analysis verification.

By overriding Pass::verifyAnalysis(), the pass contents will be verified
by the pass manager.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160994 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
a1b2bf79796d8c44b1321a69a7236b85c33ef7ca 30-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add MachineTraceMetrics::verify().

This function verifies the consistency of cached data in the
MachineTraceMetrics analysis.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160976 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
08f6ef6a7807250d84446661b7a6ec4afa762099 28-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add more debug output to MachineTraceMetrics.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160905 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
0271a5fa29f73150fad891ca4c43a0a89a64b3bf 28-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Keep track of the head and tail of the trace through each block.

This makes it possible to quickly detect blocks that are outside the
trace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160904 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h
9f63e104271eb91e545fa8cdb16fb9e10a8a9578 26-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Start scaffolding for a MachineTraceMetrics analysis pass.

This is still a work in progress.

Out-of-order CPUs usually execute instructions from multiple basic
blocks simultaneously, so it is necessary to look at longer traces when
estimating the performance effects of code transformations.

The MachineTraceMetrics analysis will pick a typical trace through a
given basic block and provide performance metrics for the trace. Metrics
will include:

- Instruction count through the trace.
- Issue count per functional unit.
- Critical path length, and per-instruction 'slack'.

These metrics can be used to determine the performance limiting factor
when executing the trace, and how it will be affected by a code
transformation.

Initially, this will be used by the early if-conversion pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@160796 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineTraceMetrics.h