aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/CodeGen/MachineSink.cpp
AgeCommit message (Collapse)AuthorFilesLines
2010-10-19Get rid of static constructors for pass registration. Instead, every pass ↵Owen Anderson1-1/+3
exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies. Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments. I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly. llvm-svn: 116820
2010-10-12Begin adding static dependence information to passes, which will allow us toOwen Anderson1-1/+6
perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future. llvm-svn: 116334
2010-10-07Now with fewer extraneous semicolons!Owen Anderson1-1/+1
llvm-svn: 115996
2010-09-23Don't sink insert_subreg, subreg_to_reg, reg_sequence. They are meant to beEvan Cheng1-1/+10
close to their sources to facilitate coalescing. llvm-svn: 114631
2010-09-20Enable machine sinking critical edge splitting. e.g.Evan Cheng1-7/+2
define double @foo(double %x, double %y, i1 %c) nounwind { %a = fdiv double %x, 3.2 %z = select i1 %c, double %a, double %y ret double %z } Was: _foo: divsd LCPI0_0(%rip), %xmm0 testb $1, %dil jne LBB0_2 movaps %xmm1, %xmm0 LBB0_2: ret Now: _foo: testb $1, %dil je LBB0_2 divsd LCPI0_0(%rip), %xmm0 ret LBB0_2: movaps %xmm1, %xmm0 ret This avoids the divsd when early exit is taken. rdar://8454886 llvm-svn: 114372
2010-09-20Avoid splitting critical edge twice for a set of PHI uses.Evan Cheng1-17/+23
llvm-svn: 114338
2010-09-18Fix code that break critical edges for PHI uses. Watch out for multiple PHIs ↵Evan Cheng1-71/+66
in different blocks. llvm-svn: 114270
2010-09-17Teach machine sink toEvan Cheng1-68/+218
1) Do forward copy propagation. This makes it easier to estimate the cost of the instruction being sunk. 2) Break critical edges on demand, including cases where the value is used by PHI nodes. Critical edge splitting is not yet enabled by default. llvm-svn: 114227
2010-08-19Update debug logs.Evan Cheng1-4/+4
llvm-svn: 111575
2010-08-19It's possible to sink a def if its local uses are PHI's.Evan Cheng1-5/+5
llvm-svn: 111537
2010-08-19Remove disabled assertion.Evan Cheng1-2/+0
llvm-svn: 111531
2010-08-19Teach machine-sink to break critical edges when appropriate. Work in progress.Evan Cheng1-8/+99
llvm-svn: 111530
2010-08-18If any def of a machine-sink candidate has local uses, it's obviously not ↵Evan Cheng1-5/+18
safe to sink it to a successor block. This bug has been hidden because a later check for critical-edge disable these illegal optimizations. This patch should significantly reduce the amount of time spent on checking dominator information for obviously unsafe sinking. llvm-svn: 111450
2010-08-06Reapply r110396, with fixes to appease the Linux buildbot gods.Owen Anderson1-1/+1
llvm-svn: 110460
2010-08-06Revert r110396 to fix buildbots.Owen Anderson1-1/+1
llvm-svn: 110410
2010-08-05Don't use PassInfo* as a type identifier for passes. Instead, use the ↵Owen Anderson1-1/+1
address of the static ID member as the sole unique type identifier. Clean up APIs related to this change. llvm-svn: 110396
2010-07-21Fix batch of converting RegisterPass<> to INTIALIZE_PASS().Owen Anderson1-2/+2
llvm-svn: 109045
2010-06-25- Reapply r106066 now that the bzip2 build regression has been fixed.Bill Wendling1-50/+10
- 2010-06-25-CoalescerSubRegDefDead.ll is the testcase for r106878. llvm-svn: 106880
2010-06-23Revert r106066, "Create a more targeted fix for not sinking instructions ↵Daniel Dunbar1-14/+53
into a range where it"... it causes bzip2 to be miscompiled by Clang. Conflicts: lib/CodeGen/MachineSink.cpp llvm-svn: 106614
2010-06-16Improve comment to include that the use of a preg is also verboten in this ↵Bill Wendling1-3/+4
situation. llvm-svn: 106119
2010-06-15Create a more targeted fix for not sinking instructions into a range where itBill Wendling1-50/+10
will conflict with another live range. The place which creates this scenerio is the code in X86 that lowers a select instruction by splitting the MBBs. This eliminates the need to check from the bottom up in an MBB for live pregs. llvm-svn: 106066
2010-06-03Cleanup 80-column and trim trailing whitespaceJim Grosbach1-33/+33
llvm-svn: 105435
2010-06-03Machine sink could potentially sink instructions into a block where the physicalBill Wendling1-4/+56
registers it defines then interfere with an existing preg live range. For instance, if we had something like these machine instructions: BB#0 ... = imul ... EFLAGS<imp-def,dead> test ..., EFLAGS<imp-def> jcc BB#2 EFLAGS<imp-use> BB#1 ... ; fallthrough to BB#2 BB#2 ... ; No code that defines EFLAGS jcc ... EFLAGS<imp-use> Machine sink will come along, see that imul implicitly defines EFLAGS, but because it's "dead", it assumes that it can move imul into BB#2. But when it does, imul's "dead" imp-def of EFLAGS is raised from the dead (a zombie) and messes up the condition code for the jump (and pretty much anything else which relies upon it being correct). The solution is to know which pregs are live going into a basic block. However, that information isn't calculated at this point. Nor does the LiveVariables pass take into account non-allocatable physical registers. In lieu of this, we do a *very* conservative pass through the basic block to determine if a preg is live coming out of it. llvm-svn: 105387
2010-06-02Compulsive reformating. No functionalitical changes.Bill Wendling1-11/+19
llvm-svn: 105359
2010-05-13Teach MachineLICM and MachineSink how to clear kill flags conservativelyDan Gohman1-0/+5
when they move instructions. llvm-svn: 103737
2010-04-15Avoid sinking machine instructions into a loop.Jakob Stoklund Olesen1-0/+11
MachineLoopInfo is already available when MachineSinking runs, so the check is free. There is no test case because it would require a critical edge into a loop, and CodeGenPrepare splits those. This check is just to be extra careful. llvm-svn: 101420
2010-04-13Teach MachineSinking to handle easy critical edges.Jakob Stoklund Olesen1-2/+17
Sometimes it is desirable to sink instructions along a critical edge: x = ... if (a && b) ... else use(x); The 'a && b' condition creates a critical edge to the else block, but we still want to sink the computation of x into the block. The else block is dominated by the parent block, so we are not pushing instructions into new code paths. llvm-svn: 101165
2010-04-05Don't do code sinking on unreachable blocks. It's unprofitable and hazardous.Dan Gohman1-0/+5
llvm-svn: 100455
2010-03-05Fix some more places where dbg_value affected codegen.Dale Johannesen1-3/+11
llvm-svn: 97765
2010-03-02Swap parameters of isSafeToMove and isSafeToReMat for consistency.Evan Cheng1-1/+1
llvm-svn: 97578
2010-02-09move target-independent opcodes out of TargetInstrInfoChris Lattner1-3/+2
into TargetOpcodes.h. #include the new TargetOpcodes.h into MachineInstr. Add new inline accessors (like isPHI()) to MachineInstr, and start using them throughout the codebase. llvm-svn: 95687
2010-01-05Change errs() to dbgs().David Greene1-4/+4
llvm-svn: 92593
2009-10-25Remove includes of Support/Compiler.h that are no longer needed after theNick Lewycky1-1/+0
VISIBILITY_HIDDEN removal. llvm-svn: 85043
2009-10-25Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces.Nick Lewycky1-1/+1
Chris claims we should never have visibility_hidden inside any .cpp file but that's still not true even after this commit. llvm-svn: 85042
2009-10-19Fix a typo in a comment.Dan Gohman1-1/+1
llvm-svn: 84504
2009-10-19Change a few instance variables to be local variables.Dan Gohman1-11/+6
llvm-svn: 84503
2009-10-09Factor out LiveIntervalAnalysis' code to determine whether an instructionDan Gohman1-1/+5
is trivially rematerializable and integrate it into TargetInstrInfo::isTriviallyReMaterializable. This way, all places that need to know whether an instruction is rematerializable will get the same answer. This enables the useful parts of the aggressive-remat option by default -- using AliasAnalysis to determine whether a memory location is invariant, and removes the questionable parts -- rematting operations with virtual register inputs that may not be live everywhere. llvm-svn: 83687
2009-10-07Replace TargetInstrInfo::isInvariantLoad and its target-specificDan Gohman1-2/+0
implementations with a new MachineInstr::isInvariantLoad, which uses MachineMemOperands and is target-independent. This brings MachineLICM and other functionality to targets which previously lacked an isInvariantLoad implementation. llvm-svn: 83475
2009-09-26Don't hoist or sink instructions with physreg uses if the physreg isDan Gohman1-3/+12
allocatable. Even if it doesn't appear to have any defs, it may latter on after register allocation. llvm-svn: 82834
2009-09-25Fix MachineSink to be able to sink instructions that use physical registersDan Gohman1-1/+14
which have no defs anywhere in the function. In particular, this fixes sinking of instructions that reference RIP on x86-64, which is currently being modeled as a register. llvm-svn: 82815
2009-09-25Simplify this code by using use_iterator instead of reg_iteratorDan Gohman1-4/+2
and skipping the defs. llvm-svn: 82811
2009-08-23remove std::ostream versions of printing stuff for MBB and MF,Chris Lattner1-3/+3
upgrading a few things to use raw_ostream llvm-svn: 79811
2009-08-22Convert DOUT to DEBUG(errs()...).Bill Wendling1-1/+2
llvm-svn: 79755
2009-08-05Various comment fixes.Dan Gohman1-3/+8
llvm-svn: 78139
2009-07-31Use setPreservesAll and setPreservesCFG in CodeGen passes.Dan Gohman1-0/+1
llvm-svn: 77754
2009-04-10fix two problems with machine sinking:Chris Lattner1-12/+26
1. Sinking would crash when the first instruction of a block was sunk due to iterator problems. 2. Instructions could be sunk to their current block, causing an infinite loop. This fixes PR3968 llvm-svn: 68787
2009-02-15Fix PR3522. It's not safe to sink into landing pad BB's.Evan Cheng1-0/+5
llvm-svn: 64582
2009-02-07Don't sink the instruction if TargetRegisterInfo::isSafeToMoveRegClassDefs ↵Evan Cheng1-0/+4
doesn't think it's safe. This works around PR1911. llvm-svn: 63994
2009-01-05Tidy up #includes, deleting a bunch of unnecessary #includes.Dan Gohman1-1/+0
llvm-svn: 61715
2008-10-03Switch the MachineOperand accessors back to the short names likeDan Gohman1-1/+1
isReg, etc., from isRegister, etc. llvm-svn: 57006