History log of /llvm-project/llvm/lib/CodeGen/LiveRangeEdit.cpp (Results 101 – 125 of 156)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 6b9c49a2 21-Jun-2013 Andrew Trick <atrick@apple.com>

Handle more cases in LiveRangeEdit::eliminateDeadDefs.

Live intervals for dead physregs may be created during coalescing. We
need to update these in the event that their instruction goes away.

cras

Handle more cases in LiveRangeEdit::eliminateDeadDefs.

Live intervals for dead physregs may be created during coalescing. We
need to update these in the event that their instruction goes away.

crash.ll is the unit test that catches it when MI sched is enabled on
X86.

llvm-svn: 184572

show more ...


# 530fc1f4 21-Jun-2013 Andrew Trick <atrick@apple.com>

Refactor LiveRangeEdit::eliminateDeadDefs.

I want to add logic to handle more cases.

llvm-svn: 184571


# 7df3f017 21-Jun-2013 Andrew Trick <atrick@apple.com>

whitespace

llvm-svn: 184570


# e2a1d89e 17-Jun-2013 Benjamin Kramer <benny.kra@googlemail.com>

Switch spill weights from a basic loop depth estimation to BlockFrequencyInfo.

The main advantages here are way better heuristics, taking into account not
just loop depth but also __builtin_expect a

Switch spill weights from a basic loop depth estimation to BlockFrequencyInfo.

The main advantages here are way better heuristics, taking into account not
just loop depth but also __builtin_expect and other static heuristics and will
eventually learn how to use profile info. Most of the work in this patch is
pushing the MachineBlockFrequencyInfo analysis into the right places.

This is good for a 5% speedup on zlib's deflate (x86_64), there were some very
unfortunate spilling decisions in its hottest loop in longest_match(). Other
benchmarks I tried were mostly neutral.

This changes register allocation in subtle ways, update the tests for it.
2012-02-20-MachineCPBug.ll was deleted as it's very fragile and the instruction
it looked for was gone already (but the FileCheck pattern picked up unrelated
stuff).

llvm-svn: 184105

show more ...


Revision tags: llvmorg-3.3.0, llvmorg-3.3.0-rc3, llvmorg-3.3.0-rc2, llvmorg-3.3.0-rc1
# 26ac8a7b 18-Mar-2013 Jakub Staszak <kubastaszak@gmail.com>

Add some constantness.

llvm-svn: 177356


Revision tags: llvmorg-3.2.0, llvmorg-3.2.0-rc3
# ed0881b2 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

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. =]

llvm-svn: 169131

show more ...


Revision tags: llvmorg-3.2.0-rc2
# 26c9d70d 28-Nov-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Make the LiveRegMatrix analysis available to targets.

No functional change, just moved header files.

Targets can inject custom passes between register allocation and
rewriting. This makes it possib

Make the LiveRegMatrix analysis available to targets.

No functional change, just moved header files.

Targets can inject custom passes between register allocation and
rewriting. This makes it possible to tweak the register allocation
before rewriting, using the full global interference checking available
from LiveRegMatrix.

llvm-svn: 168806

show more ...


Revision tags: llvmorg-3.2.0-rc1
# 4df59a9f 16-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Avoid rematerializing a redef immediately after the old def.

PR14098 contains an example where we would rematerialize a MOV8ri
immediately after the original instruction:

%vreg7:sub_8bit<def> = M

Avoid rematerializing a redef immediately after the old def.

PR14098 contains an example where we would rematerialize a MOV8ri
immediately after the original instruction:

%vreg7:sub_8bit<def> = MOV8ri 9; GR32_ABCD:%vreg7
%vreg22:sub_8bit<def> = MOV8ri 9; GR32_ABCD:%vreg7

Besides being pointless, it is also wrong since the original instruction
only redefines part of the register, and the value read by the new
instruction is wrong.

The problem was the LiveRangeEdit::allUsesAvailableAt() didn't
special-case OrigIdx == UseIdx and found the wrong SSA value.

llvm-svn: 166068

show more ...


# cea596ac 15-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Remove LIS::isAllocatable() and isReserved() helpers.

All callers can simply use the corresponding MRI functions.

llvm-svn: 165985


# 1d19582a 27-Sep-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Avoid dereferencing a NULL pointer.

Fixes PR13943.

llvm-svn: 164778


# 374071dd 02-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Avoid creating dangling physreg live ranges during DCE.

LiveRangeEdit::eliminateDeadDefs() can delete a dead instruction that
reads unreserved physregs. This would leave the corresponding regunit
li

Avoid creating dangling physreg live ranges during DCE.

LiveRangeEdit::eliminateDeadDefs() can delete a dead instruction that
reads unreserved physregs. This would leave the corresponding regunit
live interval dangling because we don't have shrinkToUses() for physical
registers.

Fix this problem by turning the instruction into a KILL instead of
deleting it. This happens in a landing pad in
test/CodeGen/X86/2012-05-19-CoalescerCrash.ll:

%vreg27<def,dead> = COPY %EDX<kill>; GR32:%vreg27

becomes:

KILL %EDX<kill>

An upcoming fix to the machine verifier will catch problems like this by
verifying regunit live intervals.

This fixes PR13498. I am not including the test case from the PR since
we already have one exposing the problem once the verifier is fixed.

llvm-svn: 161182

show more ...


# e2cfd0d4 20-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Avoid folding loads that are unsafe to move.

LiveRangeEdit::foldAsLoad() can eliminate a register by folding a load
into its only use. Only do that when the load is safe to move, and it
won't extend

Avoid folding loads that are unsafe to move.

LiveRangeEdit::foldAsLoad() can eliminate a register by folding a load
into its only use. Only do that when the load is safe to move, and it
won't extend any live ranges.

This fixes PR13414.

llvm-svn: 160575

show more ...


# 7809578c 22-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Use MRI::isConstantPhysReg() to check remat feasibility.

Don't depend on LiveIntervals::hasInterval() to determine if a physreg
is reserved and constant.

llvm-svn: 159013


# 924279ca 22-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Only erase virtregs with no uses left.

Also make sure registers aren't erased twice if the dead def mentions
the register twice.

This fixes PR12911.

llvm-svn: 157254


# a34a69ce 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Fix 12892.

Dead code elimination during coalescing could cause a virtual register
to be split into connected components. The following rewriting would be
confused about the already joined copies pre

Fix 12892.

Dead code elimination during coalescing could cause a virtual register
to be split into connected components. The following rewriting would be
confused about the already joined copies present in the code, but
without a corresponding value number in the live range.

Erase all joined copies instantly when joining intervals such that the
MI and LiveInterval representations are always in sync.

llvm-svn: 157135

show more ...


# e5bbe379 19-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Allow LiveRangeEdit to be created with a NULL parent.

The dead code elimination with callbacks is still useful.

llvm-svn: 157100


# 3834dae6 18-May-2012 Jakob Stoklund Olesen <stoklund@2pi.dk>

Modernize naming convention for class members.

No functional change.

llvm-svn: 157079


Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1
# b98934cf 03-Apr-2012 Pete Cooper <peter_cooper@apple.com>

Removed one last bad continue statement meant to be removed in r153914.

llvm-svn: 153975


# 4f0dbb27 03-Apr-2012 Pete Cooper <peter_cooper@apple.com>

Fixes to r153903. Added missing explanation of behaviour when the VirtRegMap is NULL. Also changed it in this case to just avoid updating the map, but live ranges or intervals will still get update

Fixes to r153903. Added missing explanation of behaviour when the VirtRegMap is NULL. Also changed it in this case to just avoid updating the map, but live ranges or intervals will still get updated and created

llvm-svn: 153914

show more ...


# 3ca96f99 02-Apr-2012 Pete Cooper <peter_cooper@apple.com>

Moved LiveRangeEdit.h so that it can be called from other parts of the backend, not just libCodeGen

llvm-svn: 153906


# 2bde2f42 02-Apr-2012 Pete Cooper <peter_cooper@apple.com>

Refactored the LiveRangeEdit interface so that MachineFunction, TargetInstrInfo, MachineRegisterInfo, LiveIntervals, and VirtRegMap are all passed into the constructor and stored as members instead o

Refactored the LiveRangeEdit interface so that MachineFunction, TargetInstrInfo, MachineRegisterInfo, LiveIntervals, and VirtRegMap are all passed into the constructor and stored as members instead of passed in to each method.

llvm-svn: 153903

show more ...


# 2fbad222 28-Feb-2012 Lang Hames <lhames@gmail.com>

Kill off LiveRangeEdit::getNewVRegs and LiveRangeEdit::getUselessVRegs. These
methods are no longer needed now that LinearScan has gone away.

(Contains tweaks trivialSpillEverywhere to enable the re

Kill off LiveRangeEdit::getNewVRegs and LiveRangeEdit::getUselessVRegs. These
methods are no longer needed now that LinearScan has gone away.

(Contains tweaks trivialSpillEverywhere to enable the removal of getNewVRegs).

llvm-svn: 151658

show more ...


# 905c952e 17-Feb-2012 Jim Grosbach <grosbach@apple.com>

Tidy up.

llvm-svn: 150820


# a379b181 20-Dec-2011 David Blaikie <dblaikie@gmail.com>

Unweaken vtables as per http://llvm.org/docs/CodingStandards.html#ll_virtual_anch

llvm-svn: 146960


# 76e4bc4e 12-Dec-2011 Pete Cooper <peter_cooper@apple.com>

Fixed register allocator splitting a live range on a spilling variable.

If we create new intervals for a variable that is being spilled, then those new intervals are not guaranteed to also spill. T

Fixed register allocator splitting a live range on a spilling variable.

If we create new intervals for a variable that is being spilled, then those new intervals are not guaranteed to also spill. This means that anything reading from the original spilling value might not get the correct value if spills were missed.

Fixes <rdar://problem/10546864>

llvm-svn: 146428

show more ...


1234567