History log of /external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
dce4a407a24b04eebc6a376f8e62b41aaa7b071f 29-May-2014 Stephen Hines <srhines@google.com> Update LLVM for 3.5 rebase (r209712).

Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
36b56886974eae4f9c5ebc96befd3e7bfe5de338 24-Apr-2014 Stephen Hines <srhines@google.com> Update to LLVM 3.5a.

Change-Id: Ifadecab779f128e62e430c2b4f6ddd84953ed617
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
51dee24ca6ba63cf021d56ca9cbae62c739d5041 15-Oct-2013 Andrew Trick <atrick@apple.com> Improve on r192635, ExeDepsFix for avx, and add a test case.

rdar:15221834 False AVX register dependencies cause 5x slowdown on
flops-5/6 and significant slowdown on several others.

This was blocking the switch to MI-Sched.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192669 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
a6a9ac5aa1092067e6e1546226d8bdd6a4bfcf99 15-Oct-2013 Andrew Trick <atrick@apple.com> Fix the ExecutionDepsFix pass to handle AVX instructions.

This pass is needed to break false dependencies. Without it, unlucky
register assignment can result in wild (5x) swings in
performance. This pass was trying to handle AVX but not getting it
right. AVX doesn't have partial register defs, it has unused register
reads in which the high bits of a source operand are copied into the
unused bits of the dest.

Fixing this requires conservative liveness analysis. This is awkard
because the pass already has its own pseudo-liveness. However, proper
liveness is expensive, and we would like to use a generic utility to
compute it. The fix only invokes liveness on-demand. It is rare to
detect a case that needs undef-read dependence breaking, but when it
happens, it can be needed many times within a very large block.

I think the existing heuristic which uses a register window of 16 is
too conservative for loop-carried false dependencies. If the loop is a
reduction. The out-of-order engine may be able to execute several loop
iterations in parallel. However, I'll leave this tuning exercise for
next time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192635 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
f22fd3f7b557a967b1edc1fa9ae770006a39e97c 03-Jul-2013 Craig Topper <craig.topper@gmail.com> Use SmallVectorImpl instead of SmallVector for iterators and references to avoid specifying the vector size unnecessarily.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185512 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
c6af2432c802d241c8fffbe0371c023e6c58844e 25-May-2013 Michael J. Spencer <bigcheesegs@gmail.com> Replace Count{Leading,Trailing}Zeros_{32,64} with count{Leading,Trailing}Zeros.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@182680 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
d04a8d4b33ff316ca4cf961e06c9e312eff8e64f 03-Dec-2012 Chandler Carruth <chandlerc@gmail.com> Use the new script to sort the includes of every file under lib.

Sooooo many of these had incorrect or strange main module includes.
I have manually inspected all of these, and fixed the main module
include to be the nearest plausible thing I could find. If you own or
care about any of these source files, I encourage you to take some time
and check that these edits were sensible. I can't have broken anything
(I strictly added headers, and reordered them, never removed), but they
may not be the headers you'd really like to identify as containing the
API being implemented.

Many forward declarations and missing includes were added to a header
files to allow them to parse cleanly when included first. The main
module rule does in fact have its merits. =]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
9aa6e0a134358c681cc5918ec65b1ec9726b778e 17-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Merge MRI::isPhysRegOrOverlapUsed() into isPhysRegUsed().

All callers of these functions really want the isPhysRegOrOverlapUsed()
functionality which also checks aliases. For historical reasons, targets
without register aliases were calling isPhysRegUsed() instead.

Change isPhysRegUsed() to also check aliases, and switch all
isPhysRegOrOverlapUsed() callers to isPhysRegUsed().

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166117 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
541a858f1a4e65a714fe54293d43d0861cd12b8f 03-Oct-2012 Silviu Baranga <silviu.baranga@arm.com> Fixed a bug in the ExecutionDependencyFix pass that caused dependencies to not propagate through implicit defs.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165102 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
d9b0b025612992a0b724eeca8bdf10b1d7a5c355 02-Jun-2012 Benjamin Kramer <benny.kra@googlemail.com> Fix typos found by http://github.com/lyda/misspell-check

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157885 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
396618b43a85e12d290a90b181c6af5d7c0c5f11 02-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Switch all register list clients to the new MC*Iterator interface.

No functional change intended.

Sorry for the churn. The iterator classes are supposed to help avoid
giant commits like this one in the future. The TableGen-produced
register lists are getting quite large, and it may be necessary to
change the table representation.

This makes it possible to do so without changing all clients (again).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157854 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
e4fd907e72a599eddfa7a81eac4366b5b82523e3 04-Mar-2012 Craig Topper <craig.topper@gmail.com> Use uint16_t to store register overlaps to reduce static data.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
a2a98fd0ddd2ae277be7cdd62aae92f6c5155e07 21-Dec-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Move common code into an MRI function.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147071 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
5a96b3dad2f634c9081c8b2b6c2575441dc5a2bd 07-Dec-2011 Evan Cheng <evan.cheng@apple.com> Add bundle aware API for querying instruction properties and switch the code
generator to it. For non-bundle instructions, these behave exactly the same
as the MC layer API.

For properties like mayLoad / mayStore, look into the bundle and if any of the
bundled instructions has the property it would return true.
For properties like isPredicable, only return true if *all* of the bundled
instructions have the property.
For properties like canFoldAsLoad, isCompare, conservatively return false for
bundles.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
7f5e43f61d3b28a03537c29156b0bad7dd3476e4 23-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix PR11422.

This was a bug in keeping track of the available domains when merging
domain values.

The wrong domain mask caused ExecutionDepsFix to try to move VANDPSYrr
to the integer domain which is only available in AVX2.

Also add an assertion to catch future attempts at emitting AVX2
instructions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145096 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
d1bfc301986c5e3203ec57cba4122342f7dca108 15-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Check all overlaps when looking for used registers.

A function using any RC alias is enough to enable the ExeDepsFix pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144636 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
c2ecf3efbf375fc82bb1cea6afd7448498f9ae75 15-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Break false dependencies before partial register updates.

Two new TargetInstrInfo hooks lets the target tell ExecutionDepsFix
about instructions with partial register updates causing false unwanted
dependencies.

The ExecutionDepsFix pass will break the false dependencies if the
updated register was written in the previoius N instructions.

The small loop added to sse-domains.ll runs twice as fast with
dependency-breaking instructions inserted.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144602 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
2947f730a96fc602ea008bba1929ae4f0638850a 15-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Track register ages more accurately.

Keep track of the last instruction to define each register individually
instead of per DomainValue. This lets us track more accurately when a
register was last written.

Also track register ages across basic blocks. When entering a new
basic block, use the least stale predecessor def as a worst case
estimate for register age.

The register age is used to arbitrate between conflicting domains. The
most recently defined register wins.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144601 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
f4c4768fb2277cb940a90cb2f0e9a747ebc671c3 09-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Collapse DomainValues across loop back-edges.

During the initial RPO traversal of the basic blocks, remember the ones
that are incomplete because of back-edges from predecessors that haven't
been visited yet.

After the initial RPO, revisit all those loop headers so the incoming
DomainValues on the back-edges can be properly collapsed.

This will properly fix execution domains on software pipelined code,
like the included test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144151 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
dbc372f47e3a77343e6ef1ab4a88bc46f532f774 09-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Link to the live DomainValue after merging.

When merging two uncollapsed DomainValues, place a link to the active
DomainValue from the passive DomainValue. This allows old stale
references to the passive DomainValue to be updated to point to the
active DomainValue.

The new resolve() function finds the active DomainValue and updates the
pointer.

This change makes old live-out lists more useful since they may contain
uncollapsed DomainValues that have since been merged into other
DomainValues.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144149 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
737e9a2db27b9c3b212ff64fda7af5537ecbfb45 09-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Track reference count independently from clear().

This allows clear() to be called on a DomainValue with references.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144147 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
0fdb05deb9ccbebe55c05f2fb4af6ea813c97a98 08-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Call release() directly when cleaning up the remaining DomainValues.

There is no need to involve the LiveRegs array and kill() any longer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144133 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
6bcb9a783b3220561ee3413322ad1037983d63cb 08-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Rename all methods to follow style guide.

No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144132 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
35e932483a86a2b417d874648b903f6290ec3157 08-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Handle reference counts in one function: release().

This new function will decrement the reference count, and collapse a
domain value when the last reference is gone.

This simplifies DomainValue reference counting, and decouples it from
the LiveRegs array.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
e1b3e11c15b705ad55c5ff2b04a0b790599013ea 08-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Clear old DomainValue after merging.

The old value may still be referenced by some live-out list, and we
don't wan't to collapse those instructions twice.

This fixes the "Can only swizzle VMOVD" assertion in some armv7 SPEC
builds.

<rdar://problem/10413292>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144117 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
b26c7727c9a45613d9bae69995cfd719c57c5614 08-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Kill and collapse outstanding DomainValues.

DomainValues that are only used by "don't care" instructions are now
collapsed to the first possible execution domain after all basic blocks
have been processed. This typically means the PS domain on x86.

For example, the vsel_i64 and vsel_double functions in sse2-blend.ll are
completely collapsed to the PS domain instead of containing a mix of
execution domains created by isel.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144037 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
a59ce0379134b249a3c949f7dcd6ec3566c4d7e3 07-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Use a reverse post order instead of a DFS order.

The enterBasicBlock() function is combining live-out values from
predecessor blocks. The RPO traversal means that more predecessors
have been visited when that happens, only back-edges are missing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144025 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
25265d0e7af83f30e64851458c29c5b0c01befeb 07-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Extract two methods. No functional change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144020 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
d8f9f342307b1351a05c081cd5c7fe92678d3c1f 07-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> MBB doesn't need to be a class member.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144015 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
cd7dcad82a30363132d2dbabb45d60f1d2164a92 07-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix pass name after the source was moved.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144014 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
56ab875e554d30feb953052c3133ac36f88a3782 28-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Rename class and clean up source.

No functional change intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140664 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp
d4d4fca9c368b6d075c45a7e5651f2d0545a6dc1 28-Sep-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Rename SSEDomainFix -> lib/CodeGen/ExecutionDepsFix.

I'll clean up the source in the next commit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140663 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/ExecutionDepsFix.cpp