#
8c549b58 |
| 31-Jul-2012 |
Manman Ren <mren@apple.com> |
MachineSink: Sort the successors before trying to find SuccToSinkTo.
One motivating example is to sink an instruction from a basic block which has two successors: one outside the loop, the other ins
MachineSink: Sort the successors before trying to find SuccToSinkTo.
One motivating example is to sink an instruction from a basic block which has two successors: one outside the loop, the other inside the loop. We should try to sink the instruction outside the loop.
rdar://11980766
llvm-svn: 161062
show more ...
|
Revision tags: llvmorg-3.1.0, llvmorg-3.1.0-rc3, llvmorg-3.1.0-rc2, llvmorg-3.1.0-rc1 |
|
#
1fa5bcbe |
| 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.
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).
llvm-svn: 150100
show more ...
|
#
9e761997 |
| 08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
whitespace
llvm-svn: 150094
|
#
86ae07f0 |
| 16-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Extract method for detecting constant unallocatable physregs.
It is safe to move uses of such registers.
llvm-svn: 148259
|
#
c2686886 |
| 14-Dec-2011 |
Devang Patel <dpatel@apple.com> |
Do not sink instruction, if it is not profitable.
On ARM, peephole optimization for ABS creates a trivial cfg triangle which tempts machine sink to sink instructions in code which is really straight
Do not sink instruction, if it is not profitable.
On ARM, peephole optimization for ABS creates a trivial cfg triangle which tempts machine sink to sink instructions in code which is really straight line code. Sometimes this sinking may alter register allocator input such that use and def of a reg is divided by a branch in between, which may result in extra spills. Now mahine sink avoids sinking if final sink destination is post dominator.
Radar 10266272.
llvm-svn: 146604
show more ...
|
#
706574a9 |
| 09-Dec-2011 |
Devang Patel <dpatel@apple.com> |
Fix comment.
llvm-svn: 146226
|
#
2f9a0e1b |
| 09-Dec-2011 |
Devang Patel <dpatel@apple.com> |
Update stale comment.
llvm-svn: 146220
|
#
202cf2f6 |
| 08-Dec-2011 |
Devang Patel <dpatel@apple.com> |
Revert r146184. I am seeing performance regression cause by this patch in one test case.
llvm-svn: 146205
|
#
b94c9a47 |
| 08-Dec-2011 |
Devang Patel <dpatel@apple.com> |
Refactor. No intentional functionality change.
llvm-svn: 146187
|
#
1a3c1697 |
| 08-Dec-2011 |
Devang Patel <dpatel@apple.com> |
Filter "sink to" candidate blocks sooner. This avoids unnecessary computation to determine whether the block dominates all uses or not.
llvm-svn: 146184
|
#
7f8e563a |
| 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 mayL
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.
llvm-svn: 146026
show more ...
|
Revision tags: llvmorg-3.0.0, llvmorg-3.0.0-rc4, llvmorg-3.0.0-rc3, llvmorg-3.0.0-rc2, llvmorg-3.0.0-rc1 |
|
#
9de7a7db |
| 07-Sep-2011 |
Devang Patel <dpatel@apple.com> |
While sinking machine instructions, sink matching DBG_VALUEs also otherwise live debug variable pass will drop DBG_VALUEs on the floor.
llvm-svn: 139208
|
#
fe917efc |
| 11-Apr-2011 |
Evan Cheng <evan.cheng@apple.com> |
Fix a couple of places where changes are made but not tracked.
llvm-svn: 129287
|
Revision tags: llvmorg-2.9.0, llvmorg-2.9.0-rc3, llvmorg-2.9.0-rc2, llvmorg-2.9.0-rc1 |
|
#
6c18d1aa |
| 19-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency
Get rid of static constructors for pass registration. Instead, every pass 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
show more ...
|
#
8ac477ff |
| 12-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Begin adding static dependence information to passes, which will allow us to perform initialization without static constructors AND without explicit initialization by the client. For the moment, pas
Begin adding static dependence information to passes, which will allow us to 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
show more ...
|
#
df7a4f25 |
| 07-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Now with fewer extraneous semicolons!
llvm-svn: 115996
|
Revision tags: llvmorg-2.8.0, llvmorg-2.8.0-rc3 |
|
#
d4b31a76 |
| 23-Sep-2010 |
Evan Cheng <evan.cheng@apple.com> |
Don't sink insert_subreg, subreg_to_reg, reg_sequence. They are meant to be close to their sources to facilitate coalescing.
llvm-svn: 114631
|
#
f3e9a485 |
| 20-Sep-2010 |
Evan Cheng <evan.cheng@apple.com> |
Enable machine sinking critical edge splitting. e.g.
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 }
Enable machine sinking critical edge splitting. e.g.
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
show more ...
|
#
2031b768 |
| 20-Sep-2010 |
Evan Cheng <evan.cheng@apple.com> |
Avoid splitting critical edge twice for a set of PHI uses.
llvm-svn: 114338
|
Revision tags: llvmorg-2.8.0-rc2 |
|
#
b339f3da |
| 18-Sep-2010 |
Evan Cheng <evan.cheng@apple.com> |
Fix code that break critical edges for PHI uses. Watch out for multiple PHIs in different blocks.
llvm-svn: 114270
|
#
e53ab6df |
| 17-Sep-2010 |
Evan Cheng <evan.cheng@apple.com> |
Teach machine sink to 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
Teach machine sink to 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
show more ...
|
Revision tags: llvmorg-2.8.0-rc1, llvmorg-2.8.0-rc0 |
|
#
e5af9301 |
| 19-Aug-2010 |
Evan Cheng <evan.cheng@apple.com> |
Update debug logs.
llvm-svn: 111575
|
#
361b9be7 |
| 19-Aug-2010 |
Evan Cheng <evan.cheng@apple.com> |
It's possible to sink a def if its local uses are PHI's.
llvm-svn: 111537
|
#
681d0c25 |
| 19-Aug-2010 |
Evan Cheng <evan.cheng@apple.com> |
Remove disabled assertion.
llvm-svn: 111531
|
#
ae9939c8 |
| 19-Aug-2010 |
Evan Cheng <evan.cheng@apple.com> |
Teach machine-sink to break critical edges when appropriate. Work in progress.
llvm-svn: 111530
|