History log of /external/llvm/lib/CodeGen/Passes.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
69d37fa6351d5fe2a97ea24a2d0d667a92f14a9c 05-Mar-2013 Bill Wendling <isanbard@gmail.com> Remove unused #includes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@176467 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
d7c7a686ac18f8f3c035d158d8b713077be83ea4 10-Feb-2013 Cameron Zwarich <zwarich@apple.com> Fix a typo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@174830 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
02c6325a4592fefebc837b677eaf87dc532ecb7c 17-Jan-2013 Jakob Stoklund Olesen <stoklund@2pi.dk> Provide a place for targets to insert ILP optimization passes.

Move the early if-conversion pass into this group.

ILP optimizations usually need to find the right balance between
register pressure and ILP using the MachineTraceMetrics analysis to
identify critical paths and estimate other costs. Such passes should run
together so they can share dominator tree and loop info analyses.

Besides if-conversion, future passes to run here here could include
expression height reduction and ARM's MLxExpansion pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172687 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
e4ba75f43e2ab1480d119d2d4eb878256274e0fb 07-Jan-2013 Chandler Carruth <chandlerc@gmail.com> Switch the SCEV expander and LoopStrengthReduce to use
TargetTransformInfo rather than TargetLowering, removing one of the
primary instances of the layering violation of Transforms depending
directly on Target.

This is a really big deal because LSR used to be a "special" pass that
could only be tested fully using llc and by looking at the full output
of it. It also couldn't run with any other loop passes because it had to
be created by the backend. No longer is this true. LSR is now just
a normal pass and we should probably lift the creation of LSR out of
lib/CodeGen/Passes.cpp and into the PassManagerBuilder. =] I've not done
this, or updated all of the tests to use opt and a triple, because
I suspect someone more familiar with LSR would do a better job. This
change should be essentially without functional impact for normal
compilations, and only change behvaior of targetless compilations.

The conversion required changing all of the LSR code to refer to the TTI
interfaces, which fortunately are very similar to TargetLowering's
interfaces. However, it also allowed us to *always* expect to have some
implementation around. I've pushed that simplification through the pass,
and leveraged it to simplify code somewhat. It required some test
updates for one of two things: either we used to skip some checks
altogether but now we get the default "no" answer for them, or we used
to have no information about the target and now we do have some.

I've also started the process of removing AddrMode, as the TTI interface
doesn't use it any longer. In some cases this simplifies code, and in
others it adds some complexity, but I think it's not a bad tradeoff even
there. Subsequent patches will try to clean this up even further and use
other (more appropriate) abstractions.

Yet again, almost all of the formatting changes brought to you by
clang-format. =]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@171735 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
ab37b2c4bb23ab80f92429b59d812ed491c14ea6 21-Dec-2012 Evan Cheng <evan.cheng@apple.com> Add targets to skip running the GC passes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170836 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.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/Passes.cpp
08510b14d4fe5d9b1a979fbee8a7aad11dbc6cea 30-Nov-2012 Bill Wendling <isanbard@gmail.com> Replace r168930 with a more reasonable patch.

The original patch removed a bunch of code that the SjLjEHPrepare pass placed
into the entry block if all of the landing pads were removed during the
CodeGenPrepare class. The more natural way of doing things is to run the CGP
*before* we run the SjLjEHPrepare pass.

Make it so!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169044 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
8f54a53f0ed2091e05d5ca87d239487da292cbbc 19-Nov-2012 Craig Topper <craig.topper@gmail.com> Move else onto line with preceding closing brace.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@168294 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
ad1cc1d1bfc0accd3f1af5c02ac367ff46a4bfdf 13-Nov-2012 Andrew Trick <atrick@apple.com> misched: Allow subtargets to enable misched and dependent options.

This allows me to begin enabling (or backing out) misched by default
for one subtarget at a time. To run misched we typically want to:
- Disable SelectionDAG scheduling (use the source order scheduler)
- Enable more aggressive coalescing (until we decide to always run the coalescer this way)
- Enable MachineScheduler pass itself.

Disabling PostRA sched may follow for some subtargets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@167826 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
a04a4a79ea365d1ba96ed4b5861e879b267162e2 19-Oct-2012 Nadav Rotem <nrotem@apple.com> revert r166264 because the LTO build is still failing

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166340 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
725f1d12801109a3b1d081a6e1c9e44426b2cf34 19-Oct-2012 Nadav Rotem <nrotem@apple.com> recommit the patch that makes LSR and LowerInvoke use the TargetTransform interface.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166264 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
3b9a911efcf280950f878a050728450423875639 18-Oct-2012 Bob Wilson <bob.wilson@apple.com> Temporarily revert the TargetTransform changes.

The TargetTransform changes are breaking LTO bootstraps of clang. I am
working with Nadav to figure out the problem, but I am reverting it for now
to get our buildbots working.

This reverts svn commits: 165665 165669 165670 165786 165787 165997
and I have also reverted clang svn 165741

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@166168 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
e3d0e86919730784faaddcb5d9b0257c39b0804b 11-Oct-2012 Nadav Rotem <nrotem@apple.com> Add a new interface to allow IR-level passes to access codegen-specific information.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165665 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
0d141f867d49dadc2f7580b149464f1e8e095f03 03-Oct-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> The early if conversion pass is ready to be used as an opt-in.

Enable the pass by default for targets that request it, and change the
-enable-early-ifcvt to the opposite -disable-early-ifcvt.

There are still some x86 regressions when enabling early if-conversion
because of the missing machine models. Disable the pass for x86 until
machine models are added.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165075 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
c05d30601ced172b55be81bb529df6be91d6ae15 06-Sep-2012 Nadav Rotem <nrotem@apple.com> Add a new optimization pass: Stack Coloring, that merges disjoint static allocations (allocas). Allocas are known to be
disjoint if they are marked by disjoint lifetime markers (@llvm.lifetime.XXX intrinsics).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163299 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
59324297650c12a8dccf1a7ad650a9e895fdc17e 06-Sep-2012 Roman Divacky <rdivacky@freebsd.org> Stop casting away const qualifier needlessly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
228e3f5fac0ceef9f6fe22d1621ac32bae5d3177 20-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add a verification pass after ExpandISelPseudos.

This pass often has weird CFG hacks and hand-written MI building code
that can go wrong in many ways.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162224 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
dcc4436cddc9b5d155040ed3ed38e9070ec4e3b8 04-Aug-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add an experimental -early-live-intervals option.

This option runs LiveIntervals before TwoAddressInstructionPass which
will eventually learn to exploit and update the analysis.

Eventually, LiveIntervals will run before PHIElimination, and we can get
rid of LiveVariables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161270 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
f86c00f1f89082c800dbb78870fc5537eb3702f6 04-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Make sure -print-machineinstrs applies to the first pass as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159720 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
33242fd3ed5586091e73254b58dd1825e9d53c60 04-Jul-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Add an experimental early if-conversion pass, off by default.

This pass performs if-conversion on SSA form machine code by
speculatively executing both sides of the branch and using a cmov
instruction to select the result. This can help lower the number of
branch mispredictions on architectures like x86 that don't have
predicable instructions.

The current implementation is very aggressive, and causes regressions on
mosts tests. It needs good heuristics that have yet to be implemented.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159694 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
6068c48498e9af1076b1b5f2499e176e7e9c0f34 03-Jul-2012 Chandler Carruth <chandlerc@gmail.com> All glory to address sanitizer. ;]

It appears to have caught a use-after-free introduced as by r159567
and/or friends which call 'addPass' from many more places. The bug in
'addPass' doesn't appear to be new, and was spotted by inspection when
ASan shown a bright light of a stacktrace at these functions.

Hopefully this will fix the ASan failure -- I have no test case other
than running an ASan-built clang over the test suite.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159614 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
30a507a1f5d6a5646dd3481eba6958424415c886 02-Jul-2012 Bob Wilson <bob.wilson@apple.com> Extend TargetPassConfig to allow running only a subset of the normal passes.

This is still a work in progress but I believe it is currently good enough
to fix PR13122 "Need unit test driver for codegen IR passes". For example,
you can run llc with -stop-after=loop-reduce to have it dump out the IR after
running LSR. Serializing machine-level IR is not yet supported but we have
some patches in progress for that.

The plan is to serialize the IR to a YAML file, containing separate sections
for the LLVM IR, machine-level IR, and whatever other info is needed. Chad
suggested that we stash the stop-after pass in the YAML file and use that
instead of the start-after option to figure out where to restart the
compilation. I think that's a great idea, but since it's not implemented yet
I put the -start-after option into this patch for testing purposes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159570 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
6b2bb15bf7c77918adc433646846f6847d421257 02-Jul-2012 Bob Wilson <bob.wilson@apple.com> Move assertion with TargetPassConfig's Initialized flag.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159569 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
3fb99a73686c39d9855b3f8881add977af3868cb 02-Jul-2012 Bob Wilson <bob.wilson@apple.com> Consistently use AnalysisID types in TargetPassConfig.

This makes it possible to just use a zero value to represent "no pass", so
the phony NoPassID global variable is no longer needed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
564fbf6aff8fb95646a1290078a37c2d4dbe629f 02-Jul-2012 Bob Wilson <bob.wilson@apple.com> Add all codegen passes to the PassManager via TargetPassConfig.

This is a preliminary step toward having TargetPassConfig be able to
start and stop the compilation at specified passes for unit testing
and debugging. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159567 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
34f5a2b596236a5452ddc664066138ca7a0c7af2 26-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Allow targets to inject passes before the virtual register rewriter.

Such passes can be used to tweak the register assignments in a
target-dependent way, for example to avoid write-after-write
dependencies.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159209 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
5984d2b31fe3c69e46d2b81439a8c3ef0bdf9a91 25-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Run ProcessImplicitDefs on SSA form where it can be much simpler.

Implicitly defined virtual registers can simply have the <undef> bit set
on all uses, and copies can be turned into implicit defs recursively.

Physical registers are a bit trickier. We handle the common case where a
physreg def is used by a nearby instruction in the same basic block. For
more complicated cases, just leave the IMPLICIT_DEF instruction in.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@159149 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
05ec712e7f75635abbdd84dced69f4a45fe0f541 09-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Reintroduce VirtRegRewriter.

OK, not really. We don't want to reintroduce the old rewriter hacks.

This patch extracts virtual register rewriting as a separate pass that
runs after the register allocator. This is possible now that
CodeGen/Passes.cpp can configure the full optimizing register allocator
pipeline.

The rewriter pass uses register assignments in VirtRegMap to rewrite
virtual registers to physical registers, and it inserts kill flags based
on live intervals.

These finalization steps are the same for the optimizing register
allocators: RABasic, RAGreedy, and PBQP.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@158244 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
6e1b8128505711276a87e96f6bffb818b435cbd5 30-May-2012 Bob Wilson <bob.wilson@apple.com> Add an insertPass API to TargetPassConfig. <rdar://problem/11498613>

Besides adding the new insertPass function, this patch uses it to
enhance the existing -print-machineinstrs so that the MachineInstrs
after a specific pass can be printed.

Patch by Bin Zeng!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157655 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
7c4ce30ea6a9d0410f306e805403dd224c3df65c 01-May-2012 Bill Wendling <isanbard@gmail.com> Change the PassManager from a reference to a pointer.

The TargetPassManager's default constructor wants to initialize the PassManager
to 'null'. But it's illegal to bind a null reference to a null l-value. Make the
ivar a pointer instead.
PR12468


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155902 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
9e67db4af13abb967cae5858502207a43d26bf84 16-Apr-2012 Chandler Carruth <chandlerc@gmail.com> Flip the new block-placement pass to be on by default.

This is mostly to test the waters. I'd like to get results from FNT
build bots and other bots running on non-x86 platforms.

This feature has been pretty heavily tested over the last few months by
me, and it fixes several of the execution time regressions caused by the
inlining work by preventing inlining decisions from radically impacting
block layout.

I've seen very large improvements in yacr2 and ackermann benchmarks,
along with the expected noise across all of the benchmark suite whenever
code layout changes. I've analyzed all of the regressions and fixed
them, or found them to be impossible to fix. See my email to llvmdev for
more details.

I'd like for this to be in 3.1 as it complements the inliner changes,
but if any failures are showing up or anyone has concerns, it is just
a flag flip and so can be easily turned off.

I'm switching it on tonight to try and get at least one run through
various folks' performance suites in case SPEC or something else has
serious issues with it. I'll watch bots and revert if anything shows up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154816 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
8b4c502098d8a8aee52f2251db5614d9d26c83e2 29-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Enable machine code verification in the entire code generator.

Some targets still mess up the liveness information, but that isn't
verified after MRI->invalidateLiveness().

The verifier can still check other useful things like register classes
and CFG, so it should be enabled after all passes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153615 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
78811669d5872b28c447ea9f7cfc3963c7f72841 29-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Enable machine code verification after PreSched2 passes.

The late scheduler depends on accurate liveness information if it is
breaking anti-dependencies, so we should be able to verify it.

Relax the terminator checking in the machine code verifier so it can
handle the basic blocks created by if conversion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153614 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
2ef5bf6b34cb0041648e7cb857d2c6e673d0550b 28-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Also verify after ExpandPostRAPseudos.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153599 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
663ee20cc4b13b6d37ad1578050d8c3cc31eeff5 28-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Enable machine code verification after the late machine optimization passes.

Branch folding invalidates liveness and disables liveness verification
on some targets.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153597 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
17d35e57a585e869dc3084666abd17f173723735 14-Mar-2012 Andrew Trick <atrick@apple.com> misched: implemented a framework for top-down or bottom-up scheduling.

New flags: -misched-topdown, -misched-bottomup. They can be used with
the default scheduler or with -misched=shuffle. Without either
topdown/bottomup flag -misched=shuffle now alternates scheduling
direction.

LiveIntervals update is unimplemented with bottom-up scheduling, so
only -misched-topdown currently works.

Capped the ScheduleDAG hierarchy with a concrete ScheduleDAGMI class.
ScheduleDAGMI is aware of the top and bottom of the unscheduled zone
within the current region. Scheduling policy can be plugged into
the ScheduleDAGMI driver by implementing MachineSchedStrategy.
ConvergingScheduler is now the default scheduling algorithm.
It exercises the new driver but still does no reordering.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152700 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
01b623c8c2d1bd015a8bb20eafee3322575eff8f 21-Feb-2012 Evan Cheng <evan.cheng@apple.com> Fix machine-cp by having it to check sub-register indicies. e.g.
ecx = mov eax
al = mov ch
The second copy is not a nop because the sub-indices of ecx,ch is not the
same of that of eax/al.

Re-enabled machine-cp.
PR11940


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151002 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
1a7ea9dd0431287a7346cd107680deb444d39f51 16-Feb-2012 Benjamin Kramer <benny.kra@googlemail.com> Disable machine copy propagation for now. It's known to be buggy (PR11940) and introduces subtle miscompiles in many places.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150703 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
900d7b78e6cacca6c6062abf803d7ab1a4e39b38 15-Feb-2012 Andrew Trick <atrick@apple.com> Revert r150565 again. Appears to be a stage2 failure with dragonegg.

I'll put MachineLICM back before PEI. All my arm/x86 benchmarks look good, but buildbots don't like it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
788066a1f46872d076d4c7ae561b76237a625b69 15-Feb-2012 Andrew Trick <atrick@apple.com> Reapply r150565 with the typo fix properly merged.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150567 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
40bb92a5cc199d5973b7306345e3329c3477ac86 15-Feb-2012 Andrew Trick <atrick@apple.com> reverting r150565. Premature push.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150566 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
352aa4f67f968ca1a45f7cef0fd480b9c94f5bbe 15-Feb-2012 Andrew Trick <atrick@apple.com> Move PostRAMachineLICM into MachineLateOptimization. It now runs after PEI!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150565 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
79bf288584215f3f3c49050ac1691a6b29c56fec 15-Feb-2012 Andrew Trick <atrick@apple.com> Allow CodeGen (llc) command line options to work as expected.

The llc command line options for enabling/disabling passes are local to CodeGen/Passes.cpp. This patch associates those options with standard pass IDs so they work regardless of how the target configures the passes.

A target has two ways of overriding standard passes:
1) Redefine the pass pipeline (override TargetPassConfig::add%Stage)
2) Replace or suppress individiual passes with TargetPassConfig::substitutePass.

In both cases, the command line options associated with the pass override the target default.

For example, say a target wants to disable machine instruction scheduling by default:

- The target calls disablePass(MachineSchedulerID) but otherwise does not override any TargetPassConfig methods.

- Without any llc options, no scheduler is run.

- With -enable-misched, the standard machine scheduler is run and honors the -misched=... flag to select the scheduler variant, which may be used for performance evaluation or testing.

Sorry overridePass is ugly. I haven't thought of a better way without replacing the cl::opt framework. I hope to do that one day...

I haven't figured out why CodeGen uses char& for pass IDs. AnalysisID is much easier to use and less bug prone. I'm using it wherever I can for internal implementation. Maybe later we can change the global pass ID definitions as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150563 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
5e108eeeef34dd2afa00d1da77bca47188de4244 15-Feb-2012 Andrew Trick <atrick@apple.com> Added TargetPassConfig::disablePass/substitutePass as a general mechanism to override specific passes.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150562 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
746f24b732830f434032de5d2d321e6ad1f8e782 11-Feb-2012 Andrew Trick <atrick@apple.com> Add TargetPassConfig hooks for scheduling/bundling.

In case the MachineScheduling pass I'm working on doesn't work well
for another target, they can completely override it. This also adds a
hook immediately after the RegAlloc pass to cleanup immediately after
vregs go away. We may want to fold it into the postRA hook later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150298 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
06efdd238ed7d14eaabc3b074c3b0b292c1c3127 10-Feb-2012 Andrew Trick <atrick@apple.com> comment grammar

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150233 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
8dd26253f54247e77e5accfdd70e7b4bf27b39c2 10-Feb-2012 Andrew Trick <atrick@apple.com> RegAlloc superpass: includes phi elimination, coalescing, and scheduling.

Creates a configurable regalloc pipeline.

Ensure specific llc options do what they say and nothing more: -reglloc=... has no effect other than selecting the allocator pass itself. This patch introduces a new umbrella flag, "-optimize-regalloc", to enable/disable the optimizing regalloc "superpass". This allows for example testing coalscing and scheduling under -O0 or vice-versa.

When a CodeGen pass requires the MachineFunction to have a particular property, we need to explicitly define that property so it can be directly queried rather than naming a specific Pass. For example, to check for SSA, use MRI->isSSA, not addRequired<PHIElimination>.

CodeGen transformation passes are never "required" as an analysis

ProcessImplicitDefs does not require LiveVariables.

We have a plan to massively simplify some of the early passes within the regalloc superpass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
f7b96311d20dc19647833ec23fc6d7870b2ffb10 09-Feb-2012 Andrew Trick <atrick@apple.com> Improve TargetPassConfig. No intended functionality.

Split CodeGen into stages.
Distinguish between optimization and correctness.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150122 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
1dd8c8560d45d36a8e507cd014352f1d313f9f9e 08-Feb-2012 Andrew Trick <atrick@apple.com> Codegen pass definition cleanup. No functionality.

Moving toward a uniform style of pass definition to allow easier target configuration.
Globally declare Pass ID.
Globally declare pass initializer.
Use INITIALIZE_PASS consistently.
Add a call to the initializer from CodeGen.cpp.
Remove redundant "createPass" functions and "getPassName" methods.

While cleaning up declarations, cleaned up comments (sorry for large diff).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150100 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
9d41bd5c78b99750d820e01bcd4a4e479b713d4c 08-Feb-2012 Andrew Trick <atrick@apple.com> Move pass configuration out of pass constructors: MachineLICM.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150099 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
32986572bfe5a30c500d03b8d55174720f08f0bf 08-Feb-2012 Andrew Trick <atrick@apple.com> Move pass configuration out of pass constructors: StackSlotColoring.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150097 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
c7d081b5946b9ff9f7400d5b41f36cad3fc317aa 08-Feb-2012 Andrew Trick <atrick@apple.com> Move pass configuration out of pass constructors: PostRAScheduler.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150096 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
61f1e3db43e556f495b6b9360d2f550291f78471 08-Feb-2012 Andrew Trick <atrick@apple.com> Move pass configuration out of pass constructors: BranchFolderPass

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150095 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
ffea03f2165c5a4fda672495bf853aa2d8c7d1b5 08-Feb-2012 Andrew Trick <atrick@apple.com> Added TargetPassConfig::setOpt

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150093 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
ebe18ef5c286bb7c33f6c43f1963a7d22cd73f40 08-Feb-2012 Andrew Trick <atrick@apple.com> Added Pass::createPass(ID) to handle pass configuration by ID

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150092 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
d2a7bedbc9d3db35ff424a6a2d257c72341af224 08-Feb-2012 Andrew Trick <atrick@apple.com> Move pass configuration out of pass constructors: TailDuplicate::PreRegAlloc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150091 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
061efcfb3e79899493d857f49e50d09f29037e0a 04-Feb-2012 Andrew Trick <atrick@apple.com> TargetPassConfig: confine the MC configuration to TargetMachine.

Passes prior to instructon selection are now split into separate configurable stages.
Header dependencies are simplified.
The bulk of this diff is simply removal of the silly DisableVerify flags.

Sorry for the target header churn. Attempting to stabilize them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149754 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
d5422654016b3ac7494db1d2ba16bd8febadb0a8 04-Feb-2012 Andrew Trick <atrick@apple.com> Move TargetPassConfig implementation into Passes.cpp

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149753 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
7461334084aa77286b6f9af596fb0f6ba0465685 04-Feb-2012 Andrew Trick <atrick@apple.com> Make TargetPassConfig an ImmutablePass so CodeGenPasses can query options

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149752 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
799c1ede712854f56ed85b74702e611b88b49436 12-Nov-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Delete the linear scan register allocator.

RegAllocGreedy has been the default for six months now.

Deleting RegAllocLinearScan makes it possible to also delete
VirtRegRewriter and clean up the spiller code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144475 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
141f529bafb5f464ee5db7031d29c9b0b33085bc 30-Apr-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Update comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130582 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
5aa3211e2d9c618f1f2ae590792067dbcb572741 30-Apr-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Use a greedy algorithm for allocating registers.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@130568 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
430721cff8bc3b5baceab7700bcb9b6a51d70327 19-Apr-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Force the greedy register allocator to be linked alongside linear scan.

This means that the new register allocator can be used with 'clang -mllvm -regalloc=greedy'.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129764 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
8b89c64b5ca469366b8cde5a242ac41c040bb1aa 03-Jun-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Use the fast register allocator by default for -O0 builds.

This affects both llvm-gcc and clang.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105372 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
700bfada6375546f82000bdd1b4cdbe87beebea5 28-May-2010 Jakob Stoklund Olesen <stoklund@2pi.dk> Add a -regalloc=default option that chooses a register allocator based on the -O
optimization level.

This only really affects llc for now because both the llvm-gcc and clang front
ends override the default register allocator. I intend to remove that code later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104904 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
18619b2aeba5468512d6684c4fd96d0ad280e01d 18-Feb-2010 Duncan Sands <baldrick@free.fr> Uniformize the way these options are printed. Requested by
Russell Wallace.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96580 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
844731a7f1909f55935e3514c9e713a62d67662e 13-May-2008 Dan Gohman <gohman@apple.com> Clean up the use of static and anonymous namespaces. This turned up
several things that were neither in an anonymous namespace nor static
but not intended to be global.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51017 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
4a3f6c88820a204f80ca0fa3f1f2fe09ca10b02f 06-May-2008 Dan Gohman <gohman@apple.com> Make several variable declarations static.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50696 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
4ee451de366474b9c228b4e5fa573795a715216d 29-Dec-2007 Chris Lattner <sabre@nondot.org> Remove attribution from file headers, per discussion on llvmdev.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45418 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
00e533043d37e4a5b6783da7e3e29e8e6b240ad5 16-Nov-2006 Bill Wendling <isanbard@gmail.com> *** empty log message ***


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31789 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
8653b37ab97ce69e8ff81e28f702ae94e20f6dec 03-Aug-2006 Chris Lattner <sabre@nondot.org> Work around a bug in gcc 3.3.5, reported by a user


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29489 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
eb577ba3b815a1fa4627b060dd2345d17abf672d 02-Aug-2006 Jim Laskey <jlaskey@mac.com> Final polish on machine pass registries.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29471 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
9ff542f2cce5bf7bf3cf9f692cf3ec0690ad2b3b 01-Aug-2006 Jim Laskey <jlaskey@mac.com> 1. Change use of "Cache" to "Default".
2. Added argument to instruction scheduler creators so the creators can do
special things.
3. Repaired target hazard code.
4. Misc.

More to follow.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29450 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
13ec702c430b91ee49b9e6d9581cd95412f216c8 01-Aug-2006 Jim Laskey <jlaskey@mac.com> Introducing plugable register allocators and instruction schedulers.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29434 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
33a0a6ddf5427e05b1d9477075c6f6bf60aa7e62 27-Jul-2006 Jim Laskey <jlaskey@mac.com> Working toward registration of register allocators.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29360 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
ed41f1bb1981a98eea63f00c5988cf62bbdd7c59 20-Jul-2006 Andrew Lenharth <andrewl@lenharth.org> Reduce number of exported symbols


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29220 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
8a6cd98e964fa42f05773cd2389e8b663ffecc6c 24-Oct-2005 Chris Lattner <sabre@nondot.org> Alkis agrees that that iterative scan allocator isn't going to be worked on
in the future, remove it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23952 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
edf128a7fa90f2b0b7ee24741a04a7ae1ecd6f7e 22-Apr-2005 Misha Brukman <brukman+llvm@gmail.com> Remove trailing whitespace


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@21420 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
551ccae044b0ff658fe629dd67edd5ffe75d10e8 02-Sep-2004 Reid Spencer <rspencer@reidspencer.com> Changes For Bug 352
Move include/Config and include/Support into include/llvm/Config,
include/llvm/ADT and include/llvm/Support. From here on out, all LLVM
public header files must be under include/llvm/.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@16137 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
4951d48a16d46880e7dd57580d8dda7a27820778 22-Jul-2004 Chris Lattner <sabre@nondot.org> The default has not been 'simple' for AGES!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15114 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
0bafa9818baafc969359a668245cff7d95268931 22-Jul-2004 Chris Lattner <sabre@nondot.org> Make linear scan the default


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15111 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
77c4c4da24a7dc4906eed82a8f0944dee9e2367f 22-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Put variable name to a separate line.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15108 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
82c24fba8a096ade6875451894340a75fd3c27f4 22-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Fit to 80 columns.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15105 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
910d0d6066f55fba7c67f2b42dd7eb4f971ca49a 21-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Add Iterative scan register allocator.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15068 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
c8dec2c23e7b31e4f7a40d686d95513a442a0b6e 21-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Linearscan is no longer experimental.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15067 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
b8edf61fa9f558ccd68b4b5ac970e3d403d870ea 16-Jul-2004 Chris Lattner <sabre@nondot.org> Fix IA64 compatibility


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@14866 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
dd420e060accd1d773c731e77335cff65ca34013 02-Mar-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Add a spiller option to llc. A simple spiller will come soon. When we get CFG in the machine code represenation a global spiller will also be possible. Also document the linear scan register allocator but mark it as experimental for now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12062 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
aa4c91ff9669244b873cadd37e86fb7e19c5e82c 28-Dec-2003 Chris Lattner <sabre@nondot.org> finegrainify namespacification
minor cleanups


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10619 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
ff0cbe175df40e0d2b36e59c6fb72f211f1cba4c 20-Nov-2003 Alkis Evlogimenos <alkis@evlogimenos.com> Merging the linear scan register allocator in trunk. It currently passes most tests under test/Programs/SingleSource/Benchmarks/Shootout so development will continue on trunk. The allocator is not enabled by default. You will need to pass -regallo=linearscan to lli or llc to use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10103 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
d0fde30ce850b78371fd1386338350591f9ff494 11-Nov-2003 Brian Gaeke <gaeke@uiuc.edu> Put all LLVM code into the llvm namespace, as per bug 109.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9903 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
b576c94c15af9a440f69d9d03c2afead7971118c 20-Oct-2003 John Criswell <criswell@uiuc.edu> Added LLVM project notice to the top of every C++ source file.
Header files will be on the way.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9298 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/Passes.cpp
7237ecef134cd88aad13190f078ff23057bfcb71 02-Oct-2003 Alkis Evlogimenos <alkis@evlogimenos.com> Moved enum and command-line option in separate file. Also added function that returns the user selected register allocator to the caller.


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