History log of /external/llvm/lib/CodeGen/BranchFolding.cpp
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
05d96f98cbd96dab7f4ea1ea4ebe4285597e7e88 22-Aug-2012 Benjamin Kramer <benny.kra@googlemail.com> Reduce duplicated hash map lookups.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162362 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.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/BranchFolding.cpp
f152fe8d487c46873bbdd4abab43200f783e978b 01-Jun-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Switch some getAliasSet clients to MCRegAliasIterator.

MCRegAliasIterator can optionally visit the register itself, allowing
for simpler code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157837 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
dbb4e57a3c7fb18d5ff2d9504c5cacb5df20fab4 24-May-2012 Bill Wendling <isanbard@gmail.com> Forgot to reverse conditional.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157349 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
20350db44807f6863c3c00345934d45763ed21d3 24-May-2012 Bill Wendling <isanbard@gmail.com> Reduce indentation by early detection of 'continue'. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157348 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6a8c7bf8e72338e55f0f9583e1828f62da165d4a 23-Apr-2012 Preston Gurd <preston.gurd@intel.com> This patch fixes a problem which arose when using the Post-RA scheduler
on X86 Atom. Some of our tests failed because the tail merging part of
the BranchFolding pass was creating new basic blocks which did not
contain live-in information. When the anti-dependency code in the Post-RA
scheduler ran, it would sometimes rename the register containing
the function return value because the fact that the return value was
live-in to the subsequent block had been lost. To fix this, it is necessary
to run the RegisterScavenging code in the BranchFolding pass.

This patch makes sure that the register scavenging code is invoked
in the X86 subtarget only when post-RA scheduling is being done.
Post RA scheduling in the X86 subtarget is only done for Atom.

This patch adds a new function to the TargetRegisterClass to control
whether or not live-ins should be preserved during branch folding.
This is necessary in order for the anti-dependency optimizations done
during the PostRASchedulerList pass to work properly when doing
Post-RA scheduling for the X86 in general and for the Intel Atom in particular.

The patch adds and invokes the new function trackLivenessAfterRegAlloc()
instead of using the existing requiresRegisterScavenging().
It changes BranchFolding.cpp to call trackLivenessAfterRegAlloc() instead of
requiresRegisterScavenging(). It changes the all the targets that
implemented requiresRegisterScavenging() to also implement
trackLivenessAfterRegAlloc().

It adds an assertion in the Post RA scheduler to make sure that post RA
liveness information is available when it is needed.

It changes the X86 break-anti-dependencies test to use –mcpu=atom, in order
to avoid running into the added assertion.

Finally, this patch restores the use of anti-dependency checking
(which was turned off temporarily for the 3.1 release) for
Intel Atom in the Post RA scheduler.

Patch by Andy Zhang!

Thanks to Jakob and Anton for their reviews.




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155395 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
80799fbe3c048cc78aba59c389e4b33e936bc190 27-Mar-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Branch folding may invalidate liveness.

Branch folding can use a register scavenger to update liveness
information when required. Don't do that if liveness information is
already invalid.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153517 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
5b2749abf585f9e28656c289001c2327eed401af 07-Mar-2012 Bill Wendling <isanbard@gmail.com> Where the BranchFolding pass removes a branch then adds another better branch,
the DebugLoc information can be maintained throughout by grabbing the DebugLoc
before the RemoveBranch and then passing the result to the InsertBranch.
Patch by Andrew Stanford-Jason!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152212 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
9ebfbf8b9fd5f982e0db9293808bd32168615ba9 05-Mar-2012 Craig Topper <craig.topper@gmail.com> Convert more GenRegisterInfo tables from unsigned to uint16_t to reduce static data size.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152016 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.cpp
90f20044ade3712c8b0c3f4ebe47d57ad15ae6ce 22-Feb-2012 Chad Rosier <mcrosier@apple.com> Remove extra semi-colons.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151169 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a230262791397c88beeb7ca9bb97c8a8a026e848 16-Feb-2012 Jakob Stoklund Olesen <stoklund@2pi.dk> Handle register masks in branch folding.

Don't attempt to move instructions with regmask operands. They are most
likely calls anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150634 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.cpp
1df91b0e54bc62f8fc7a06a4f75220e40aa2dfe0 08-Feb-2012 Andrew Trick <atrick@apple.com> whitespace

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150094 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4d6ccb5f68cd7c6418a209f1fa4dbade569e4493 20-Jan-2012 David Blaikie <dblaikie@gmail.com> More dead code removal (using -Wunreachable-code)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c16c25fbc3b53da99dcaf27685a6116249f79b30 12-Jan-2012 Evan Cheng <evan.cheng@apple.com> When hoisting common code, watch out for uses which are marked "kill". If the
killed registers are needed below the insertion point, then unset the kill
marker.

Sorry I'm not able to find a reduced test case.

rdar://10660944


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148043 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
70017fb01bba634649f7f3b1dee33c6cda0721d0 07-Jan-2012 Evan Cheng <evan.cheng@apple.com> Revert part of r147716. Looks like x87 instructions kill markers are all messed
up so branch folding pass can't use the scavenger. :-( This doesn't breaks
anything currently. It just means targets which do not carefully update kill
markers cannot run post-ra scheduler (not new, it has always been the case).

We should fix this at some point since it's really hacky.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147719 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
977679d6034791fd48a344e5b990503ba50fc242 07-Jan-2012 Evan Cheng <evan.cheng@apple.com> Added a late machine instruction copy propagation pass. This catches
opportunities that only present themselves after late optimizations
such as tail duplication .e.g.
## BB#1:
movl %eax, %ecx
movl %ecx, %eax
ret

The register allocator also leaves some of them around (due to false
dep between copies from phi-elimination, etc.)

This required some changes in codegen passes. Post-ra scheduler and the
pseudo-instruction expansion passes have been moved after branch folding
and tail merging. They were before branch folding before because it did
not always update block livein's. That's fixed now. The pass change makes
independently since we want to properly schedule instructions after
branch folding / tail duplication.

rdar://10428165
rdar://10640363



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147716 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ddfd1377d2e4154d44dc3ad217735adc15af2e3f 14-Dec-2011 Evan Cheng <evan.cheng@apple.com> - Add MachineInstrBundle.h and MachineInstrBundle.cpp. This includes a function
to finalize MI bundles (i.e. add BUNDLE instruction and computing register def
and use lists of the BUNDLE instruction) and a pass to unpack bundles.
- Teach more of MachineBasic and MachineInstr methods to be bundle aware.
- Switch Thumb2 IT block to MI bundles and delete the hazard recognizer hack to
prevent IT blocks from being broken apart.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@146542 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.cpp
a823e3d42c48ceeb2f5011f7402031bf02fa0fe1 26-Oct-2011 Bill Wendling <isanbard@gmail.com> Reapply r142920 with fix:

An MBB which branches to an EH landing pad shouldn't be considered for tail merging.

In SjLj EH, the jump to the landing pad is not done explicitly through a branch
statement. The EH landing pad is added as a successor to the throwing
BB. Because of that however, the branch folding pass could mistakenly think that
it could merge the throwing BB with another BB. This isn't safe to do.
<rdar://problem/10334833>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
51583ce4b6938a44a246df65977e29e0509a7f5b 25-Oct-2011 Duncan Sands <baldrick@free.fr> Revert commit 142891. Takumi bisected the tablegen miscompiles
down to this commit. Original commit message:

An MBB which branches to an EH landing pad shouldn't be considered for tail merging.

In SjLj EH, the jump to the landing pad is not done explicitly through a branch
statement. The EH landing pad is added as a successor to the throwing
BB. Because of that however, the branch folding pass could mistakenly think that
it could merge the throwing BB with another BB. This isn't safe to do.
<rdar://problem/10334833>



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142920 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
86ed4089e367956ea7134dd7e99334a084fec6df 25-Oct-2011 Bill Wendling <isanbard@gmail.com> An MBB which branches to an EH landing pad shouldn't be considered for tail merging.

In SjLj EH, the jump to the landing pad is not done explicitly through a branch
statement. The EH landing pad is added as a successor to the throwing
BB. Because of that however, the branch folding pass could mistakenly think that
it could merge the throwing BB with another BB. This isn't safe to do.
<rdar://problem/10334833>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142891 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
54cfeda74574ee167fc1261ddc71d64ee94add11 05-Aug-2011 Jakob Stoklund Olesen <stoklund@2pi.dk> Fix liveness computations in BranchFolding.

The old code would look at kills and defs in one pass over the
instruction operands, causing problems with this code:

%R0<def>, %CPSR<def,dead> = tLSLri %R5<kill>, 2, pred:14, pred:%noreg
%R0<def>, %CPSR<def,dead> = tADDrr %R4<kill>, %R0<kill>, pred:14, %pred:%noreg

The last instruction kills and redefines %R0, so it is still live after
the instruction.

This caused a register scavenger crash when compiling 483.xalancbmk for
armv6. I am not including a test case because it requires too much bad
luck to expose this old bug.

First you need to convince the register allocator to use %R0 twice on
the tADDrr instruction, then you have to convince BranchFolding to do
something that causes it to run the register scavenger on he bad block.

<rdar://problem/9898200>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136973 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a38cfb2fceb266bd78164021c08284dc59a1e8a3 07-Jul-2011 Eli Friedman <eli.friedman@gmail.com> When tail-merging multiple blocks, make sure to correctly update the live-in list on the merged block to correctly account for the live-outs of all the predecessors. They might not be the same in all cases (the testcase I have involves a PHI node where one of the operands is an IMPLICIT_DEF).

Unfortunately, the testcase I have is large and confidential, so I don't have a test to commit at the moment; I'll see if I can come up with something smaller where this issue reproduces.

<rdar://problem/9716278>



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134565 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
e837dead3c8dc3445ef6a0e2322179c57e264a13 28-Jun-2011 Evan Cheng <evan.cheng@apple.com> - Rename TargetInstrDesc, TargetOperandInfo to MCInstrDesc and MCOperandInfo and
sink them into MC layer.
- Added MCInstrInfo, which captures the tablegen generated static data. Chang
TargetInstrInfo so it's based off MCInstrInfo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134021 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
f924dea8ddb74df8d591f8fdc409fc5b8b5e10d4 14-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> Add 132986 back, but avoid non-determinism if a bb address gets reused.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132995 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7a07083c25074b560fea1198a86facf3a95af850 14-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> revert 132986 to see if the bots go green.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132988 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
3a42565ccb169ec4acf79698b38d7da880f13364 14-Jun-2011 Rafael Espindola <rafael.espindola@gmail.com> Make the threshold used by branch folding softer. Before we would get a
sharp all or nothing transition when one extra predecessor was added. Now
we still test first ones for merging.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132974 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
95ba669e09c30f9aa1a7d754199548b8e6a227ce 26-May-2011 Devang Patel <dpatel@apple.com> Add comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132149 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
785badb83e09ebae485c40f3fd86576581dd516e 26-May-2011 Devang Patel <dpatel@apple.com> During branch folding avoid inserting redundant DBG_VALUE machine instructions.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@132148 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6175e03825070f53b17deeb9156935ac1ac06672 13-May-2011 Evan Cheng <evan.cheng@apple.com> Update comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131258 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7139d3516526317497e70348e33a57b52ddc053c 12-May-2011 Evan Cheng <evan.cheng@apple.com> Re-enable branchfolding common code hoisting optimization. Fixed a liveness test bug and also taught it to update liveins.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131241 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
30adced41b17cc9a5c301386e80567faccaff04f 12-May-2011 Evan Cheng <evan.cheng@apple.com> Temporarily disable the transformation. It's breaking 186.crafty in some configuration.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131235 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
cbc988be22bc9411d95215c8b7251b5f85710674 12-May-2011 Evan Cheng <evan.cheng@apple.com> Re-commit 131172 with fix. MachineInstr identity checks should check dead
markers. In some cases a register def is dead on one path, but not on
another.

This is passing Clang self-hosting.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131214 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
41cdc16e7301c91d2460aa14412f592695b0d4ed 11-May-2011 Rafael Espindola <rafael.espindola@gmail.com> Revert 131172 as it is causing clang to miscompile itself. I will try
to provide a reduced testcase.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131176 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7e20a574eb3f4fc3840a0490c814443d756e2e0e 11-May-2011 Evan Cheng <evan.cheng@apple.com> Add a late optimization to BranchFolding that hoist common instruction sequences
at the start of basic blocks to their common predecessor. It's actually quite
common (e.g. about 50 times in JM/lencod) and has shown to be a nice code size
benefit. e.g.

pushq %rax
testl %edi, %edi
jne LBB0_2
## BB#1:
xorb %al, %al
popq %rdx
ret
LBB0_2:
xorb %al, %al
callq _foo
popq %rdx
ret

=>

pushq %rax
xorb %al, %al
testl %edi, %edi
je LBB0_2
## BB#1:
callq _foo
LBB0_2:
popq %rdx
ret

rdar://9145558


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131172 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d3dbd5f5cdb54b5e9472ec6040612fc4d898d297 22-Apr-2011 Bill Wendling <isanbard@gmail.com> Branch folding is folding a landing pad into a regular BB.

An exception is thrown via a call to _cxa_throw, which we don't expect to
return. Therefore, the "true" part of the invoke goes to a BB that has
'unreachable' as its only instruction. This is lowered into an empty MachineBB.
The landing pad for this invoke, however, is directly after the "true" MBB.
When the empty MBB is removed, the landing pad is directly below the BB with the
invoke call. The unconditional branch is removed and then the two blocks are
merged together.

The testcase is too big for a regression test.
<rdar://problem/9305728>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129965 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
cf13af6fdee302c2cc8628ae95b40b2bccfdde4b 22-Feb-2011 Evan Cheng <evan.cheng@apple.com> Add more debugging output.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126158 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
90c579de5a383cee278acc3f7e7b9d0a656e6a35 06-Aug-2010 Owen Anderson <resistor@mac.com> Reapply r110396, with fixes to appease the Linux buildbot gods.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110460 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1f74590e9d1b9cf0f1f81a156efea73f76546e05 06-Aug-2010 Owen Anderson <resistor@mac.com> Revert r110396 to fix buildbots.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110410 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
9ccaf53ada99c63737547c0235baeb8454b04e80 06-Aug-2010 Owen Anderson <resistor@mac.com> Don't use PassInfo* as a type identifier for passes. Instead, use the address of the static
ID member as the sole unique type identifier. Clean up APIs related to this change.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@110396 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4d54e5b2dd4a3d3bed38ff9c7aa57fc66adb5855 22-Jun-2010 Evan Cheng <evan.cheng@apple.com> Tail merging pass shall not break up IT blocks. rdar://8115404


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106517 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
86050dc8cc0aaea8c9dfeb89de02cafbd7f48d92 19-Jun-2010 Evan Cheng <evan.cheng@apple.com> Allow ARM if-converter to be run after post allocation scheduling.
- This fixed a number of bugs in if-converter, tail merging, and post-allocation
scheduler. If-converter now runs branch folding / tail merging first to
maximize if-conversion opportunities.
- Also changed the t2IT instruction slightly. It now defines the ITSTATE
register which is read by instructions in the IT block.
- Added Thumb2 specific hazard recognizer to ensure the scheduler doesn't
change the instruction ordering in the IT block (since IT mask has been
finalized). It also ensures no other instructions can be scheduled between
instructions in the IT block.

This is not yet enabled.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106344 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
3bf912593301152b65accb9d9c37a95172f1df5a 18-Jun-2010 Stuart Hastings <stuart@apple.com> Add a DebugLoc parameter to TargetInstrInfo::InsertBranch(). This
addresses a longstanding deficiency noted in many FIXMEs scattered
across all the targets.

This effectively moves the problem up one level, replacing eleven
FIXMEs in the targets with eight FIXMEs in CodeGen, plus one path
through FastISel where we actually supply a DebugLoc, fixing Radar
7421831.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106243 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
30fc5bbfd1047c666bfd653fefb74ffdc6e966f5 03-May-2010 Dan Gohman <gohman@apple.com> Fix a bug which prevented tail merging of return instructions in
beneficial cases. See the changes in test/CodeGen/X86/tail-opts.ll and
test/CodeGen/ARM/ifcvt2.ll for details.

The fix is to change HashEndOfMBB to hash at most one instruction,
instead of trying to apply heuristics about when it will be profitable to
consider more than one instruction. The regular tail-merging heuristics
are already prepared to handle the same cases, and they're more precise.

Also, make test/CodeGen/ARM/ifcvt5.ll and
test/CodeGen/Thumb2/thumb2-branch.ll slightly more complex so that they
continue to test what they're intended to test.

And, this eliminates the problem in
test/CodeGen/Thumb2/2009-10-15-ITBlockBranch.ll, the testcase from
PR5204. Update it accordingly.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@102907 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
93d6a7e9c21204c52d6efec6c672163e7de79660 02-Apr-2010 Dale Johannesen <dalej@apple.com> Teach AnalyzeBranch, RemoveBranch and the branch
folder to be tolerant of debug info following the
branch(es) at the end of a block.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100168 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
80d23705e6df49a41298fd345be6f8a8d72f4fd0 19-Mar-2010 Bob Wilson <bob.wilson@apple.com> Stop trying to merge identical jump tables. This had been inadvertently
disabled for several months (since svn r88806) and no one noticed. My fix
for pr6543 yesterday reenabled it, but broke the ARM port's code for using
TBB/TBH. Rather than adding a target hook to disable merging for Thumb2 only,
I'm just taking this out. It is not common to have identical jump tables,
the code we used to merge them was O(N^2), and it only helps code size, not
performance.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98977 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a1bdfc3c7fcd7bf8e42c6e4805bfb694230c7a55 17-Mar-2010 Bob Wilson <bob.wilson@apple.com> Remove a check that can no longer be true, after r84803.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98694 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
18589de9b1b8c157dea602653042e486128dd9e4 14-Mar-2010 Chris Lattner <sabre@nondot.org> eliminate InvalidateLabel and LabelIDList from MMI and replace
them with a counter.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98462 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
2cd9ffef6e74febd727f0b548c21ba3f4e5cd26f 10-Mar-2010 Dale Johannesen <dalej@apple.com> Fix another place where DEBUG_VALUE affected codegen.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98181 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c5cf227f3dac755508928b9dee8ac6a45dcb4e4f 10-Mar-2010 Dale Johannesen <dalej@apple.com> This survived a bootstrap, so let's try 98104 again.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98137 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7dda453410eb957cd52cff4f8fa8d5a9c09e28df 10-Mar-2010 Dale Johannesen <dalej@apple.com> Speculatively revert 98104; could be what's causing crashes



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98108 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7f876967c0b368de48a1d0b9318b5113fddcf591 10-Mar-2010 Dale Johannesen <dalej@apple.com> Ever more complicated DEBUG_VALUE fixes for branch folding.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98104 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
84839daa595968286acd25644820c644867f0c52 08-Mar-2010 Dale Johannesen <dalej@apple.com> Fix dbg value handling in tail merging.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97938 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
b0812f114b83a32c4b90a4b553c7177c557558b5 05-Mar-2010 Dale Johannesen <dalej@apple.com> Fix some more places where dbg_value affected codegen.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97765 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
518bb53485df640d7b7e3f6b0544099020c42aa7 09-Feb-2010 Chris Lattner <sabre@nondot.org> move target-independent opcodes out of TargetInstrInfo
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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95687 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
071c62fad0b25ad4131e7f984173a796c1e63f61 26-Jan-2010 Chris Lattner <sabre@nondot.org> Rearrange handling of jump tables. Highlights:
1. MachineJumpTableInfo is now created lazily for a function the first time
it actually makes a jump table instead of for every function.
2. The encoding of jump table entries is now described by the
MachineJumpTableInfo::JTEntryKind enum. This enum is determined by the
TLI::getJumpTableEncoding() hook, instead of by lots of code scattered
throughout the compiler that "knows" that jump table entries are always
32-bits in pic mode (for example).
3. The size and alignment of jump table entries is now calculated based on
their kind, instead of at machinefunction creation time.

Future work includes using the EntryKind in more places in the compiler,
eliminating other logic that "knows" the layout of jump tables in various
situations.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94470 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
465e2b950d61c870fb3120c80191973e8282a3ef 24-Dec-2009 David Greene <greened@obbligato.org> Change errs() to dbgs().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92097 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
fe586b3e3800b397256ca9ee6a2811fc6ce7dce9 16-Dec-2009 Bill Wendling <isanbard@gmail.com> Initialize uninitialized variables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91477 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
408e9d166a66c8891637975921de2980c1940c3f 16-Dec-2009 Bill Wendling <isanbard@gmail.com> Initialize uninitialized variables.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91475 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
43cf6c3939176e8d87719516f0b2e4c6c346f340 15-Dec-2009 Bill Wendling <isanbard@gmail.com> Revert these. They may have been causing 483_xalancbmk to fail:

$ svn merge -c -91161 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91161 into '.':
U lib/CodeGen/BranchFolding.cpp
U lib/CodeGen/MachineBasicBlock.cpp
$ svn merge -c -91113 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91113 into '.':
G lib/CodeGen/MachineBasicBlock.cpp
$ svn merge -c -91101 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91101 into '.':
U include/llvm/CodeGen/MachineBasicBlock.h
G lib/CodeGen/MachineBasicBlock.cpp
$ svn merge -c -91092 https://llvm.org/svn/llvm-project/llvm/trunk
--- Reverse-merging r91092 into '.':
G include/llvm/CodeGen/MachineBasicBlock.h
G lib/CodeGen/MachineBasicBlock.cpp



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91376 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c42a0b75a41144be86d40872b57850ab578969ea 11-Dec-2009 Bill Wendling <isanbard@gmail.com> Don't try to move a MBB into the fall-through position if it's a landing pad or
branches only to a landing pad. Without this check, the compiler would go into
an infinite loop because the branch to a landing pad is an "abnormal" edge which
wasn't being taken into account.

This is the meat of that fix:

if (!PrevBB.canFallThrough() && !MBB->BranchesToLandingPad(MBB)) {

The other stuff is simplification of the "branches to a landing pad" code.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91161 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
864e2efce2cb5d02e376933933d96074723fe77c 05-Dec-2009 Dan Gohman <gohman@apple.com> Remove the target hook TargetInstrInfo::BlockHasNoFallThrough in favor of
MachineBasicBlock::canFallThrough(), which is target-independent and more
thorough.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90634 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7896c9f436a4eda5ec15e882a7505ba482a2fcd0 03-Dec-2009 Chris Lattner <sabre@nondot.org> improve portability to avoid conflicting with std::next in c++'0x.
Patch by Howard Hinnant!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@90365 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
15acadde5f87703da5f36721a19c09a7e3f97f53 26-Nov-2009 Bob Wilson <bob.wilson@apple.com> Split tail duplication into a separate pass. This is needed to avoid
running tail duplication when doing branch folding for if-conversion, and
we also want to be able to run tail duplication earlier to fix some
reg alloc problems. Move the CanFallThrough function from BranchFolding
to MachineBasicBlock so that it can be shared by TailDuplication.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89904 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
f8c4cfb7cc330234112e1378dac6424d9956add0 25-Nov-2009 Bob Wilson <bob.wilson@apple.com> Refactor target hook for tail duplication as requested by Chris.
Make tail duplication of indirect branches much more aggressive (for targets
that indicate that it is profitable), based on further experience with
this transformation. I compiled 3 large applications with and without
this more aggressive tail duplication and measured minimal changes in code
size. ("size" on Darwin seems to round the text size up to the nearest
page boundary, so I can only say that any code size increase was less than
one 4k page.) Radar 7421267.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89814 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
fbb6b67df086fa5ed54e2ff27c15e4c087883957 19-Nov-2009 Bob Wilson <bob.wilson@apple.com> There should be no need to keep renumbering blocks during tail duplication.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89275 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
60f34b9fb0323688e93cf347d63b56327d6250f8 18-Nov-2009 Bob Wilson <bob.wilson@apple.com> Tail duplication still needs to iterate. Duplicating new instructions onto
the tail of a block may make that block a new candidate for duplication.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89264 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
79d621035ebe620261dd8139a0882f62edabbfdb 18-Nov-2009 Bob Wilson <bob.wilson@apple.com> Add another statistic to measure code size due to tail duplication.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89254 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7cd5d3e05ca9573dbac1a01846813037f901480c 18-Nov-2009 Bob Wilson <bob.wilson@apple.com> Add statistics for tail duplication.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89225 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
834b08af8d3d8fc6c76ac6ca40674565689e8d7f 18-Nov-2009 Bob Wilson <bob.wilson@apple.com> Add a target hook to allow changing the tail duplication limit based on the
contents of the block to be duplicated. Use this for ARM Cortex A8/9 to
be more aggressive tail duplicating indirect branches, since it makes it
much more likely that they will be predicted in the branch target buffer.
Testcase coming soon.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89187 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
aa60ddac394e8d79ecd9700e32b595c115585007 17-Nov-2009 Bob Wilson <bob.wilson@apple.com> Remove a special case for tail merging that seems to be both broken and
unnecessary. It is broken because the "isIdenticalTo" check should be
negated. If that is fixed, this code causes the CodeGen/X86/tail-opts.ll
test to fail, in the dont_merge_oddly function. And, I confirmed that the
regression is real -- the generated code is worse. As far as I can tell,
that tail-opts.ll test is checking for what this code is supposed to handle
and we're doing the right thing anyway.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89121 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
37d60fd1427386f68faeb0217ac2034d1acfe486 17-Nov-2009 Dan Gohman <gohman@apple.com> Set MadeChange instead of MadeChangeThisIteration.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89114 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
465c8252f282fda26db6962a81948afce7f01cc2 17-Nov-2009 Bob Wilson <bob.wilson@apple.com> Update a comment, now that tail duplication happens after other branch
folding optimizations.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89109 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
56ea69c3a251434db3fef489881368e29c95712d 17-Nov-2009 Bob Wilson <bob.wilson@apple.com> Perform tail duplication only once, after tail merging is complete.
It was too difficult to keep the heuristics for merging and duplication
consistent.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89105 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4a504c6ff8c3d82e0e220611fbf53b2c9d9acdfd 16-Nov-2009 Bob Wilson <bob.wilson@apple.com> Fix a comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88940 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c4a0c843e4c58386b263903ccbef2cdb980821b5 16-Nov-2009 Bob Wilson <bob.wilson@apple.com> Fix some comments.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88932 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d34f5d91bc6fdc55085d3c4d509c778d6bcc5f0a 16-Nov-2009 Bob Wilson <bob.wilson@apple.com> Whitespace: be consistent with pointer syntax.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88929 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
3cbc3120873242d93e469b4635c0bbd09fdb6438 16-Nov-2009 Bob Wilson <bob.wilson@apple.com> Clean up whitespace.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88927 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c4c550c7584b3240bda71d4339ec49c1cf731d55 13-Nov-2009 Dan Gohman <gohman@apple.com> When optimizing for size, don't tail-merge unless it's likely to be a
code-size win, and not when it's only likely to be code-size neutral,
such as when only a single instruction would be eliminated and a new
branch would be required.

This fixes rdar://7392894.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@88692 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
72b2990a7495b9df89e151eb711c1e7abdd5f2e5 12-Nov-2009 Dan Gohman <gohman@apple.com> Make the BranchFolderPass class local to BranchFolding.cpp.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86928 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
8520149db158427339a235a74dd2cc19553a7328 12-Nov-2009 Dan Gohman <gohman@apple.com> Minor code cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86926 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ad6af45dc172fe23801771200eabb6a7f764e2cb 12-Nov-2009 Dan Gohman <gohman@apple.com> Tail merge at any size when there are two potentials blocks and one
can be made to fall through into the other.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86909 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ffe644ebf4dcc50b314261ddd2d08c841f629349 11-Nov-2009 Dan Gohman <gohman@apple.com> Promote MergePotentialsElt and SameTailElt to be regular classes
instead of typedefs for std::pair. This simplifies the type of
SameTails, which previously was std::vector<std::pair<std::vector<std::pair<unsigned, MachineBasicBlock *> >::iterator, MachineBasicBlock::iterator>


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86885 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7cc253e3b85b27540bbc91b8331e06e7a65fbc4c 11-Nov-2009 Dan Gohman <gohman@apple.com> Revert this line of 86871.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86875 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
2210c0bea83aa8a8585d793a1f63e8c01b65be38 11-Nov-2009 Dan Gohman <gohman@apple.com> Add support for tail duplication to BranchFolding, and extend
tail merging support to handle more cases.
- Recognize several cases where tail merging is beneficial even when
the tail size is smaller than the generic threshold.
- Make use of MachineInstrDesc::isBarrier to help detect
non-fallthrough blocks.
- Check for and avoid disrupting fall-through edges in more cases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86871 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
cdc06ba5dfdded6cdc48061d36b63b807962ab31 11-Nov-2009 Dan Gohman <gohman@apple.com> Fix indentation level.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86856 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4e3f125e184f96ae72f2c44d16cafe0d44158283 11-Nov-2009 Dan Gohman <gohman@apple.com> Whitespace cleanups.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86855 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a127edceae2a0097133e9f032e759f9d15f92b7e 11-Nov-2009 Dan Gohman <gohman@apple.com> Prefix MBB numbers with "BB#" in debug output to make it clear what
the numbers mean.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86854 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d194498d2669e28cd8e85b0ceb7c69a7ec66da13 11-Nov-2009 Dan Gohman <gohman@apple.com> Minor code simplification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86853 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7071528e4e1879b67d043e6058b758f17ae7ac1b 10-Nov-2009 Dan Gohman <gohman@apple.com> Remove an unused variable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86642 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
b2e40990c40999804f0f28650685c4af18e4c261 10-Nov-2009 Dan Gohman <gohman@apple.com> Minor code simplification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86641 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
888acc35a3e271d092f9b1efc7c32b94ff17fbf7 04-Nov-2009 Bob Wilson <bob.wilson@apple.com> Fix branch folding bug for indirect branches: for a block containing only
an unconditional branch (possibly from tail merging), this code is
trying to redirect all of its predecessors to go directly to the branch
target, but that isn't feasible for indirect branches. The other
predecessors (that don't end with indirect branches) could theoretically
still be handled, but that is not easily done right now.

The AnalyzeBranch interface doesn't currently let us distinguish jump table
branches from indirect branches, and this code is currently handling
jump tables. To avoid punting on address-taken blocks, we would have to give
up handling jump tables. That seems like a bad tradeoff.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ab918103d284b91105831c6b198ad2ab760b907d 30-Oct-2009 Dan Gohman <gohman@apple.com> Don't delete blocks which have their address taken.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85572 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7b888b8ad07cccec099634bc838eed5da3f336b1 29-Oct-2009 Bob Wilson <bob.wilson@apple.com> Refactor complicated predicate into a separate function.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85519 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
2c04dae715b05017d7d2c19ab4f8cb37c1e650ae 28-Oct-2009 Bob Wilson <bob.wilson@apple.com> Reimplement BranchFolding change to avoid tail merging for a 1 instruction
common tail, except when the OptimizeForSize function attribute is present.
Radar 7338114.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85441 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a597103c328e29fb763e7a4864bd7c29a588fc9d 28-Oct-2009 Bob Wilson <bob.wilson@apple.com> Revert r85346 change to control tail merging by CodeGenOpt::Level.
I'm going to redo this using the OptimizeForSize function attribute.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85426 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
cd4f04d6bcb7aefa24d92582fbadfe17519f4756 28-Oct-2009 Bob Wilson <bob.wilson@apple.com> Record CodeGen optimization level in the BranchFolding pass so that we can
use it to control tail merging when there is a tradeoff between performance
and code size. When there is only 1 instruction in the common tail, we have
been merging. That can be good for code size but is a definite loss for
performance. Now we will avoid tail merging in that case when the
optimization level is "Aggressive", i.e., "-O3". Radar 7338114.

Since the IfConversion pass invokes BranchFolding, it too needs to know
the optimization level. Note that I removed the RegisterPass instantiation
for IfConversion because it required a default constructor. If someone
wants to keep that for some reason, we can add a default constructor with
a hard-wired optimization level.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85346 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6d31268a7dc9854fa5a5cb9227ba9a15c5898414 22-Oct-2009 Dan Gohman <gohman@apple.com> Revert the main portion of r31856. It was causing BranchFolding
to break up CFG diamonds by banishing one of the blocks to the end of
the function, which is bad for code density and branch size.

This does pessimize MultiSource/Benchmarks/Ptrdist/yacr2, the
benchmark cited as the reason for the change, however I've examined
the code and it looks more like a case of gaming a particular
branch than of being generally applicable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84803 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
030a0a0cdb38924e55773a8e0b5fe7347aa664aa 04-Sep-2009 Evan Cheng <evan.cheng@apple.com> Run branch folding if if-converter make some transformations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80994 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
b3c27428969b3cc52ab8493e91b5dd1465325fed 04-Sep-2009 Evan Cheng <evan.cheng@apple.com> Funky indentation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80971 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
3403bcd8f943cb053a7d9bbf8eb8135407699afa 22-Aug-2009 Bill Wendling <isanbard@gmail.com> Convert DOUT to DEBUG(errs()...).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79747 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
da65822cfc938594f8fb7840947c1eb77e057a48 18-Aug-2009 Dan Gohman <gohman@apple.com> Make tail merging handle blocks with repeated predecessors correctly, and
remove RemoveDuplicateSuccessor, as it is no longer necessary, and because
it breaks assumptions made in
MachineBasicBlock::isOnlyReachableByFallthrough.

Convert test/CodeGen/X86/omit-label.ll to FileCheck and add a testcase
for PR4732.

test/CodeGen/Thumb2/thumb2-ifcvt2.ll sees a diff with this commit due to
it being bugpoint-reduced to the point where it doesn't matter what the
condition for the branch is.

Add some more interesting code to
test/CodeGen/X86/2009-08-06-branchfolder-crash.ll, which is the testcase
that originally motivated the RemoveDuplicateSuccessor code, to help
verify that the original problem isn't being re-broken.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79338 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1c5a28706d0b2e712f4c825d638b46bbe6eb67d6 07-Aug-2009 Dale Johannesen <dalej@apple.com> Rewrite previous patch to follow Chris' stylistic
preference; no functional change.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78391 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
14e545d18e46187b0f02e7c705a3da3ad82225c2 07-Aug-2009 Dale Johannesen <dalej@apple.com> Fix PR 4626, a crash in branch folding after OptimizeBlock
produced a CFG it wasn't prepared for.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78351 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c23197a26f34f559ea9797de51e187087c039c42 14-Jul-2009 Torok Edwin <edwintorok@gmail.com> llvm_unreachable->llvm_unreachable(0), LLVM_UNREACHABLE->llvm_unreachable.
This adds location info for all llvm_unreachable calls (which is a macro now) in
!NDEBUG builds.
In NDEBUG builds location info and the message is off (it only prints
"UREACHABLE executed").


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75640 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c25e7581b9b8088910da31702d4ca21c4734c6d7 11-Jul-2009 Torok Edwin <edwintorok@gmail.com> assert(0) -> LLVM_UNREACHABLE.
Make llvm_unreachable take an optional string, thus moving the cerr<< out of
line.
LLVM_UNREACHABLE is now a simple wrapper that makes the message go away for
NDEBUG builds.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75379 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
bf06f6a6f1be0802ad7b761138ecba568814008a 11-May-2009 Dale Johannesen <dalej@apple.com> Fix PR4188. TailMerging can't tolerate inexact
sucessor info.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71478 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
dc54d317e7a381ef8e4aca80d54ad1466bb85dda 09-Feb-2009 Evan Cheng <evan.cheng@apple.com> Turns out AnalyzeBranch can modify the mbb being analyzed. This is a nasty
suprise to some callers, e.g. register coalescer. For now, add an parameter
that tells AnalyzeBranch whether it's safe to modify the mbb. A better
solution is out there, but I don't have time to deal with it right now.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@64124 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1465d61bdd36cfd6021036a527895f0dd358e97d 28-Jan-2009 Duncan Sands <baldrick@free.fr> Rename getAnalysisToUpdate to getAnalysisIfAvailable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63198 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
5d5ee80ea8bf300d1ee8ccbd7174466d98a1e99e 08-Jan-2009 Dan Gohman <gohman@apple.com> Delete unnecessary parens around return values.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61950 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
0ffa3de9e9b342c0fb529853e14632c66ec9725f 11-Dec-2008 Bill Wendling <isanbard@gmail.com> Add a newline after this debug output.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60861 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
41474baac839da410302950305722cb0e026a094 03-Dec-2008 Dan Gohman <gohman@apple.com> Add a sanity-check to tablegen to catch the case where isSimpleLoad
is set but mayLoad is not set. Fix all the problems this turned up.

Change code to not use isSimpleLoad instead of mayLoad unless it
really wants isSimpleLoad.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60459 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
622addbe49ffdc611adb315fb22756e23fe7b222 27-Oct-2008 Dale Johannesen <dalej@apple.com> Increase default setting of tail-merge-threshold to
150, based on llvm-test measurements.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58225 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d735b8019b0f297d7c14b55adcd887af24d8e602 03-Oct-2008 Dan Gohman <gohman@apple.com> Switch the MachineOperand accessors back to the short names like
isReg, etc., from isRegister, etc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@57006 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
bbeeb2a61ea19fbb5449260165b56c40fdc4860b 22-Sep-2008 Evan Cheng <evan.cheng@apple.com> Mark several codegen passes as preserving all analysis.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56469 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
014278e6a11fa0767853b831e5bf51b95bf541c5 13-Sep-2008 Dan Gohman <gohman@apple.com> Remove isImm(), isReg(), and friends, in favor of
isImmediate(), isRegister(), and friends, to avoid confusion
about having two different names with the same meaning. I'm
not attached to the longer names, and would be ok with
changing to the shorter names if others prefer it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@56189 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ae73dc1448d25b02cabc7c64c86c64371453dda8 04-Sep-2008 Dan Gohman <gohman@apple.com> Tidy up several unbeseeming casts from pointer to intptr_t.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55779 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1501cdbf63cff3afd92df6cd249096770334b268 22-Aug-2008 Dan Gohman <gohman@apple.com> Fix SmallVector's size calculation so that a size of 0 is
handled correctly, and change a few SmallVector uses to use
size 0 to more clearly reflect their intent.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55181 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
44eb65cf58e3ab9b5621ce72256d1621a18aeed7 15-Aug-2008 Owen Anderson <resistor@mac.com> Convert uses of std::vector in TargetInstrInfo to SmallVector. This change had to be propoagated down into all the targets and up into all clients of this API.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54802 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
68d4d1d49c813d10047ad116e897a17d67112c10 29-Jul-2008 Duncan Sands <baldrick@free.fr> Fix PR2609. If a label is deleted, then it needs
to be marked invalid regardless of whether it is
a debug, an exception handling or (hopefully) a
GC label.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54172 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
8e5f2c6f65841542e2a7092553fe42a00048e4c7 08-Jul-2008 Dan Gohman <gohman@apple.com> Pool-allocation for MachineInstrs, MachineBasicBlocks, and
MachineMemOperands. The pools are owned by MachineFunctions.

This drastically reduces the number of calls to malloc/free made
during the "Emit" phase of scheduling, as well as later phases
in CodeGen. Combined with other changes, this speeds up the
"instruction selection" phase of CodeGen by 10% in some cases.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53212 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
62bc8a44868bd86e96bdbd2f0d66dda690cc66ad 01-Jul-2008 Dale Johannesen <dalej@apple.com> Fix longstanding thinko: don't exclude
predessors of exit blocks from tail merging
consideration.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52985 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4406604047423576e36657c7ede266ca42e79642 01-Jul-2008 Dan Gohman <gohman@apple.com> Split ISD::LABEL into ISD::DBG_LABEL and ISD::EH_LABEL, eliminating
the need for a flavor operand, and add a new SDNode subclass,
LabelSDNode, for use with them to eliminate the need for a label id
operand.

Change instruction selection to let these label nodes through
unmodified instead of creating copies of them. Teach the MachineInstr
emitter how to emit a MachineInstr directly from an ISD label node.

This avoids the need for allocating SDNodes for the label id and
flavor value, as well as SDNodes for each of the post-isel label,
label id, and label flavor.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52943 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
04478e56f736325d3567e7c0efe2bb5c2766c63b 19-Jun-2008 Dan Gohman <gohman@apple.com> Use the transferSuccessors helper function.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52495 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
679860e31bd7b8f043ba1ccdc5990cb9bafd9055 23-May-2008 Dale Johannesen <dalej@apple.com> Rewrite a loop to avoid using iterators pointing to
elements that have been erased. Based on a patch
by Nicolas Capens.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51485 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.cpp
30562b7d4403414936da0661d7c6bda392f26c59 13-May-2008 Dale Johannesen <dalej@apple.com> Be more aggressive about tail-merging small blocks
if those blocks consist entirely of common instructions;
merging will not add an extra branch in this case.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51006 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
51b2b9e29e4fa828ffd83d36f548bc44a4007822 12-May-2008 Dale Johannesen <dalej@apple.com> Further rework of tail merge algorithm. Not quite
semantically identical, but little difference in
either results or execution speed; but it's much
easier to read, at least IMO.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50999 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6b8583cbf1f8a3df5ae859d3da2ca690ff57f91c 10-May-2008 Dale Johannesen <dalej@apple.com> Remove an evil vector bool. Cosmetic refactoring,
no functional change.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50921 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6ae83faadf715c398e637424a764f6b02f0b6df2 09-May-2008 Dale Johannesen <dalej@apple.com> Rewrite tail merging algorithm to handle the
case where there are multiple blocks with a large
number of common tail instructions more efficiently
(compile time optimization).



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50916 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.cpp
80b09fe8bc1d2755ef9a6b03b8862a657db42f06 10-Apr-2008 Evan Cheng <evan.cheng@apple.com> Teach branch folding pass about implicit_def instructions. Unfortunately we can't just eliminate them since register scavenger expects every register use to be defined. However, we can delete them when there are no intra-block uses. Carefully removing some implicit def's which enable more blocks to be optimized away.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49461 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
fb8075d03f5c87bd57dcc9c5f2304f6b13c55aad 28-Feb-2008 Evan Cheng <evan.cheng@apple.com> Add a quick and dirty "loop aligner pass". x86 uses it to align its loops to 16-byte boundaries.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47703 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
31886dbe370118dbb291b01d58699243a82bc4e1 19-Feb-2008 Evan Cheng <evan.cheng@apple.com> PR1909: Tail merging pass ran wild. It makes no sense to merge blocks in order to save a single instruction since a branch will be inserted for each BB.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47301 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6f0d024a534af18d9e60b3ea757376cd8a3a980e 10-Feb-2008 Dan Gohman <gohman@apple.com> Rename MRegisterInfo to TargetRegisterInfo.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46930 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
303595942502f17c087fa28874c2b89117148c45 29-Jan-2008 Dan Gohman <gohman@apple.com> Use empty() instead of comparing size() with zero.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46514 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
749c6f6b5ed301c84aac562e414486549d7b98eb 07-Jan-2008 Chris Lattner <sabre@nondot.org> rename TargetInstrDescriptor -> TargetInstrDesc.
Make MachineInstr::getDesc return a reference instead
of a pointer, since it can never be null.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45695 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
69244300b8a0112efb44b6273ecea4ca6264b8cf 07-Jan-2008 Chris Lattner <sabre@nondot.org> Rename MachineInstr::getInstrDescriptor -> getDesc(), which reflects
that it is cheap and efficient to get.

Move a variety of predicates from TargetInstrInfo into
TargetInstrDescriptor, which makes it much easier to query a predicate
when you don't have TII around. Now you can use MI->getDesc()->isBranch()
instead of going through TII, and this is much more efficient anyway. Not
all of the predicates have been moved over yet.

Update old code that used MI->getInstrDescriptor()->Flags to use the
new predicates in many places.




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45674 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
834f1ce0312e3d00d836f9560cb63182c2c4570f 07-Jan-2008 Chris Lattner <sabre@nondot.org> rename isLoad -> isSimpleLoad due to evan's desire to have such a predicate.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45667 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
2e48a70b35635165703838fc8d3796b664207aa1 06-Jan-2008 Chris Lattner <sabre@nondot.org> rename isStore -> mayStore to more accurately reflect what it captures.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45656 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
8aa797aa51cd4ea1ec6f46f4891a6897944b75b2 31-Dec-2007 Chris Lattner <sabre@nondot.org> Add new shorter predicates for testing machine operands for various types:
e.g. MO.isMBB() instead of MO.isMachineBasicBlock(). I don't plan on
switching everything over, so new clients should just start using the
shorter names.

Remove old long accessors, switching everything over to use the short
accessor: getMachineBasicBlock() -> getMBB(),
getConstantPoolIndex() -> getIndex(), setMachineBasicBlock -> setMBB(), etc.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45464 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.cpp
11a4f64bd4cb6d438dd4b5882ee1b7404832f27f 10-Dec-2007 Christopher Lamb <christopher.lamb@gmail.com> Improve branch folding by recgonizing that explict successor relationships impact the value of fall-through choices.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44785 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
da6efc5268958a0668806e989c1c5a1f788543e5 25-Oct-2007 Bill Wendling <isanbard@gmail.com> Changed XXX to FIXME, and added comment to the README file

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43359 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
0713a224234b4596709c7582ebf17a1ccb95c872 25-Oct-2007 Bill Wendling <isanbard@gmail.com> Added comment explaining why we are doing this check.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43353 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
80629c85f1041df41b5158ebb03a4725af6ecd90 19-Oct-2007 Bill Wendling <isanbard@gmail.com> Don't branch fold inline asm statements.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43191 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
61e729e2e9517ab2d8887bab86fb377900fa1081 02-Aug-2007 Dan Gohman <gohman@apple.com> More explicit keywords.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40757 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
97b4ac8c844e08ce1c4f4a73b85ba56775a2a6c5 11-Jul-2007 Duncan Sands <baldrick@free.fr> If assertions are not enabled, we should return False here.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38535 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
67fcdf7f6579fcc070f019096cedf80d5a834554 11-Jul-2007 David Greene <greened@obbligato.org> Make this work with GLIBCXX_DEBUG.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38516 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
8a46d342d8cbca7c9c7be6c66007d41329babad0 29-Jun-2007 David Greene <greened@obbligato.org> Fix misue of iterator pointing to erased object. Uncovered by
_GLIBCXX_DEBUG.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37793 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
2bdb7d0cc88881857073b36f4a09ebe2f2008c24 19-Jun-2007 Evan Cheng <evan.cheng@apple.com> Move CorrectExtraCFGEdges() from BranchFolding.cpp to a MachineBasicBlock method.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37633 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1a90a5aebe3488dc3feaab60ba16bed1659ba27b 08-Jun-2007 Dale Johannesen <dalej@apple.com> Make throttle a hidden parameter, per review.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37511 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
53af4c01a87b8a60bce2cc19e5249aaed52d6523 08-Jun-2007 Dale Johannesen <dalej@apple.com> Throttle tail merging; handling blocks with large numbers of predecessors
is too slow.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37509 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
fe7e397100edd4f2d618a1ff938dfa8624670ec1 05-Jun-2007 Dale Johannesen <dalej@apple.com> Tail merging wasn't working for predecessors of landing pads. PR 1496.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37427 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
0370fad74b48388412c52d1325512f2c218487fa 04-Jun-2007 Evan Cheng <evan.cheng@apple.com> Move ReplaceUsesOfBlockWith() out of BranchFolding into a MachineBasicBlock general facility.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37408 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
8e63bf375d18118f46f43910c6a093c824eb4a7d 02-Jun-2007 Dale Johannesen <dalej@apple.com> Fix CorrectExtraCFGEdges to allow for multiple LandingPad targets.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37394 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a5a2117a4659ecadbec9476f2e537bcb7501b509 02-Jun-2007 Dale Johannesen <dalej@apple.com> Implement smarter algorithm for choosing which blocks to tail-merge.
See test/CodeGen/X86/test-pic-jtbl.ll for a case where it works well;
shaves another 10K off our favorite benchmark. I was hesitant about
this because of compile speed, but seems to do OK on a bootstrap.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37392 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a52dd151378eeaad1369829b1dc3164874774e04 31-May-2007 Dale Johannesen <dalej@apple.com> Arrange for only 1 of multiple branches to landing pad to be kept.
Do not remove empty landing pads (EH table needs to be updated)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
44008c59188ba61aeacfd8be049e3be548ffcea4 30-May-2007 Dale Johannesen <dalej@apple.com> Changed per review comment.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37355 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
95ef406e0f2da0197f8b46849319c07e9bea1e55 30-May-2007 Dale Johannesen <dalej@apple.com> Make stable_sort in tail merging actually be stable (it never was, but didn't
matter until my last change). Reenable tail merging by default.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37354 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
035fdeb37048bae2f49d3c3b8c246cfc26d9a80d 24-May-2007 Dale Johannesen <dalej@apple.com> Blocks that cond-br and uncond-br/fallthrough to same block should have
only one successor.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37324 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
de0963df420f408b2d813bd16f3c040c2d189f63 24-May-2007 Dale Johannesen <dalej@apple.com> Fix for PR1444: do not create two successors to the same block.
Temporarily, this breaks CodeGen/Generic/2006-02-12-InsertLibraryCall.ll
by exposing an unrelated latent problem; working on that.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37323 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7aea8320340ce867eb4328aeec52cb02c88ef0b3 23-May-2007 Dale Johannesen <dalej@apple.com> Two tail merging improvements:
When considering blocks with more than 2 predecessors, merge the block with
the largest number of matching insns, rather than the first block found.
Considering that 1 matching insn is enough to show a win for candidates that
already end with a branch.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37315 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
81da02b553b86868637f27b89c6e919c31ed5b51 22-May-2007 Dale Johannesen <dalej@apple.com> Make tail merging the default, except on powerPC. There was no prior art
for a target-dependent default with a command-line override; this way
should be generally usable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37285 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1cf08c1d6d59cbeead241f44d898eaa2a3bf1717 18-May-2007 Dale Johannesen <dalej@apple.com> Remove some unneeded branches. (spotted by Evan, thanks)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37198 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
14ba0cc42959a3fcc9b6781aea614b01877fb55f 15-May-2007 Dale Johannesen <dalej@apple.com> Remove extra CFG edges before doing these passes; it makes them happier.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37089 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
54f4a6780a33043031af97571dfffdac5a4aa35c 11-May-2007 Dale Johannesen <dalej@apple.com> Do not generate branches to entry block. This fixes several test suite
failures on PPC (can happen only when prologue code is null)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36979 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
76b38fcabeba725e166a2ff72c56fe31d784b229 10-May-2007 Dale Johannesen <dalej@apple.com> Make tail merging handle many more cases (all it can, I think).


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36966 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7d33b4c59b56afb96feea71073c1d9e70c457e28 07-May-2007 Dale Johannesen <dalej@apple.com> Handle some non-exit blocks in tail merging.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36907 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1997473cf72957d0e70322e2fe6fe2ab141c58a6 03-May-2007 Devang Patel <dpatel@apple.com> Drop 'const'


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36662 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
3e15bf33e024b9df9e89351a165acfdb1dde51ed 02-May-2007 Devang Patel <dpatel@apple.com> Use 'static const char' instead of 'static const int'.
Due to darwin gcc bug, one version of darwin linker coalesces
static const int, which defauts PassID based pass identification.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36652 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
794fd75c67a2cdc128d67342c6d88a504d186896 01-May-2007 Devang Patel <dpatel@apple.com> Do not use typeinfo to identify pass in pass manager.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36632 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
77edc4b1b004726d96c932356750b9f3c96d74dd 01-May-2007 Chris Lattner <sabre@nondot.org> Fix PR1228 and CodeGen/Generic/2007-04-30-LandingPadBranchFolding.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36602 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
69cb9b78f11d505f4351a269fc90e7b77fcda437 20-Mar-2007 Dale Johannesen <dalej@apple.com> maintain LiveIn when splitting blocks (register scavenging needs it)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35226 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
033c9715d9bf7ce59ad2e466bf0720811b34da08 22-Feb-2007 Jim Laskey <jlaskey@mac.com> Remove isAccessable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34497 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
02b3f5ec4ac120d14a63f7fd4f4388b7d0ab6c22 21-Feb-2007 Jim Laskey <jlaskey@mac.com> Make branch folding behave in the presence of landing pads.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34476 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6b896cec8b703e08e5f3d809e086a39b6ebe6589 17-Feb-2007 Dale Johannesen <dalej@apple.com> Fixes PR 1200


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34359 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
44c3b9fdd416c79f4b67cde1aecfced5921efd81 26-Jan-2007 Jim Laskey <jlaskey@mac.com> Change the MachineDebugInfo to MachineModuleInfo to better reflect usage
for debugging and exception handling.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33550 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1ee29257428960fede862fcfdbe80d5d007927e9 26-Jan-2007 Jim Laskey <jlaskey@mac.com> Make LABEL a builtin opcode.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33537 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
cd3245ac45c595da96bb768a55cddc356dff55fe 19-Dec-2006 Chris Lattner <sabre@nondot.org> Eliminate static ctors from Statistics


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32698 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ac0b6ae358944ae8b2b5a11dc08f52c3ed89f2da 06-Dec-2006 Chris Lattner <sabre@nondot.org> Detemplatize the Statistic class. The only type it is instantiated with
is 'unsigned'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32279 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4b105912657c0472dc4f6f7244ce20bf7cf9a7dc 18-Nov-2006 Chris Lattner <sabre@nondot.org> Don't transform in another bad case: if the block is empty, it should be
simplified before we do this xform so that our cost model is accurate.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31864 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
f10a56a86f8ae32d0493c7de770493d55519b073 18-Nov-2006 Chris Lattner <sabre@nondot.org> Fix another case we *don't* want to do this xform.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31861 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
154e1047184384afd0a701a9f8816459cf0b3490 18-Nov-2006 Chris Lattner <sabre@nondot.org> make the previous change more aggressive, moving any block with no fallthrough.
This speeds up yacr2 by 7% on a core2.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31856 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a7bef4a4e49f461984c04ef6be6eef3f1c023558 18-Nov-2006 Chris Lattner <sabre@nondot.org> Minor code layout tweak: if we have something like this:

if (cond) goto BB2
BB1:
...
return;
BB2:
...

Move BB1 to the end of the function so that the code falls through in the
non-return case. This has the effect of moving assert (and other no-return
call) bodies and return blocks out of loops.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31855 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
5d056952ba2f97729c5db69a3f14250595fa1ee8 08-Nov-2006 Chris Lattner <sabre@nondot.org> optimize single MBB loops better. In particular, produce:

LBB1_57: #bb207.i
movl 72(%esp), %ecx
movb (%ecx,%eax), %cl
movl 80(%esp), %edx
movb %cl, 1(%edx,%eax)
incl %eax
cmpl $143, %eax
jne LBB1_57 #bb207.i
jmp LBB1_64 #cond_next255.i

intead of:

LBB1_57: #bb207.i
movl 72(%esp), %ecx
movb (%ecx,%eax), %cl
movl 80(%esp), %edx
movb %cl, 1(%edx,%eax)
incl %eax
cmpl $143, %eax
je LBB1_64 #cond_next255.i
jmp LBB1_57 #bb207.i

This eliminates a branch per iteration of the loop. This hurted PPC
particularly, because the extra branch meant another dispatch group for each
iteration of the loop.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31530 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d41b30def3181bce4bf87e8bde664d15663165d0 05-Nov-2006 Jeff Cohen <jeffc@jolt-lang.org> Unbreak VC++ build.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31464 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
3ed469ccd7b028a030b550d84b7336d146f5d8fa 02-Nov-2006 Reid Spencer <rspencer@reidspencer.com> For PR786:
Turn on -Wunused and -Wno-unused-parameter. Clean up most of the resulting
fall out by removing unused variables. Remaining warnings have to do with
unused functions (I didn't want to delete code without review) and unused
variables in generated code. Maintainers should clean up the remaining
issues when they see them. All changes pass DejaGnu tests and Olden.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31380 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d4bf3c2fd60975b30cd067b59f743a3ea45e45b5 01-Nov-2006 Chris Lattner <sabre@nondot.org> give branch folding a simple heuristic to decide which block to split so that
it inserts an uncond branch where it is less likely to cause a problem. This
fixes some perf issues on ppc.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31354 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
1d08d83230338ca5969ff6ae6737a978336538bf 01-Nov-2006 Chris Lattner <sabre@nondot.org> make tail merging more aggressive. If two blocks share a common tail, but the
tail is not an entire block for either of them, pick one, split it, then
merge the common part.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31336 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
d8ccff0c3e5028019a02dd44bf7d906efc9effd8 01-Nov-2006 Chris Lattner <sabre@nondot.org> enable branch folding with an option


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31335 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6b0e3f890779b7fc912bec8d40a9590e44742737 29-Oct-2006 Chris Lattner <sabre@nondot.org> Make CanFallThrough more intelligent (so it can handle blocks with (e.g.) no
successors), and make island block movement more general.

This compiles CodeGen/X86/2006-04-27-ISelFoldingBug.ll to:

_loadAndRLEsource_no_exit_2E_1_label_2E_0:
subl $8, %esp
movl %esi, 4(%esp)
movl %ebx, (%esp)
movl 16(%esp), %eax
movl 12(%esp), %ecx
LBB1_3: #label.0
movl _last, %edx
movl %edx, %esi
incl %esi
movl %esi, _last
movl %ecx, %ebx
# TRUNCATE movb %bl, %bl
movl _block, %esi
movb %bl, 1(%esi,%edx)
cmpl %eax, _last
jge LBB1_2 #codeRepl5.exitStub
LBB1_4: #label.0
cmpl $257, %ecx
je LBB1_2 #codeRepl5.exitStub
LBB1_1: #label.0.no_exit.1_crit_edge.exitStub
movl $1, %eax
movl (%esp), %ebx
movl 4(%esp), %esi
addl $8, %esp
ret
LBB1_2: #codeRepl5.exitStub
xorl %eax, %eax
movl (%esp), %ebx
movl 4(%esp), %esi
addl $8, %esp
ret

instead of:

_loadAndRLEsource_no_exit_2E_1_label_2E_0:
subl $8, %esp
movl %esi, 4(%esp)
movl %ebx, (%esp)
movl 16(%esp), %eax
movl 12(%esp), %ecx
jmp LBB1_3 #label.0
LBB1_1: #label.0.no_exit.1_crit_edge.exitStub
movl $1, %eax
movl (%esp), %ebx
movl 4(%esp), %esi
addl $8, %esp
ret
LBB1_2: #codeRepl5.exitStub
xorl %eax, %eax
movl (%esp), %ebx
movl 4(%esp), %esi
addl $8, %esp
ret
LBB1_3: #label.0
movl _last, %edx
movl %edx, %esi
incl %esi
movl %esi, _last
movl %ecx, %ebx
# TRUNCATE movb %bl, %bl
movl _block, %esi
movb %bl, 1(%esi,%edx)
cmpl %eax, _last
jge LBB1_2 #codeRepl5.exitStub
LBB1_4: #label.0
cmpl $257, %ecx
jne LBB1_1 #label.0.no_exit.1_crit_edge.exitStub
jmp LBB1_2 #codeRepl5.exitStub

... which is much better layout :)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31282 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
6acfe12dd6d52c801f78c240528b7cb42fa91159 28-Oct-2006 Chris Lattner <sabre@nondot.org> Teach branch folding to fold identical jump tables together and to delete
jump tables that are dead.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31273 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
cf420cca572b061fdd63587cb90904c641b6e216 28-Oct-2006 Chris Lattner <sabre@nondot.org> improve deletion of blocks that just contain branches by knowing that
the pred block doesn't fall through into them if it's a jumptable.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31263 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c2e91e34dc18d794435db86713c06400ea60e930 26-Oct-2006 Chris Lattner <sabre@nondot.org> simplify code


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31188 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
323ece6fcd9722482a0be6c82afc5abc75739c78 25-Oct-2006 Chris Lattner <sabre@nondot.org> turn off tail merging for now


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31180 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7d09784d3fc652131a2afbf06a0f2ed893837fb9 24-Oct-2006 Chris Lattner <sabre@nondot.org> move single basic blocks that are neither fallen into nor fall out of into
a place more useful. In particular, if we can put them in a place where code
will be able to fall into it, do so. Otherwise, put it in a place it can fall
through into a successor. Otherwise, if preventing a fallthrough, move to the
end of the function, out of the way.

This deletes several hundred unconditional branches from spass.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31149 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a4bcfe12d1ea16e3e4ea9148e2d9cba3bb63dbda 24-Oct-2006 Chris Lattner <sabre@nondot.org> Enable tail merging by default.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31140 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
66ebf0973d717b4b2cdef731847aef3904fd04b2 23-Oct-2006 Jim Laskey <jlaskey@mac.com> More complete solution to deleting blocks and debug info.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31129 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
4bc135e93beebdcb3b9c44745c5ccbc91199ac0b 21-Oct-2006 Chris Lattner <sabre@nondot.org> don't break infinite loops


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31102 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
a2d799531a748a349b9a458dbbc580b134074c49 21-Oct-2006 Chris Lattner <sabre@nondot.org> Use branch reversal to do stuff like this:

call L_strcmp$stub
testl %eax, %eax
- jne LBB26_208 #cond_true6020
- jmp LBB26_227 #bb7119
+ je LBB26_227 #bb7119
LBB26_208: #cond_true6020
movl $l31_str14, 4(%esp)

testl %eax, %eax
- jne LBB26_704 #cond_true13042
- jmp LBB26_713 #bb13151
+ je LBB26_713 #bb13151
LBB26_704: #cond_true13042
movl $_str52, 4(%esp)

cmpl 76(%ecx), %eax
- jge LBB26_1628 #cond_false63.i.i
- jmp LBB26_1769 #_Z8makeGridP13mrSurfaceListidiidd.exit.i
+ jl LBB26_1769 #_Z8makeGridP13mrSurfaceListidiidd.exit.i
LBB26_1628: #cond_false63.i.i
movl $0, 48964(%esp)


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31100 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
2d47bd937c13556ace07b2b2daf4dfe75f4e1e90 21-Oct-2006 Chris Lattner <sabre@nondot.org> Transform code like:

jle FOO
jmp BAR
BAR:

into:

jle FOO
BAR:

... whoa!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31098 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
386e29065db5b05b57440f6b2a6dfa1e7f29a00d 21-Oct-2006 Chris Lattner <sabre@nondot.org> Three changes:
1. Remove a bunch of ifdef'd code.
2. When a block just contains an uncond branch, change all blocks branching
to it to jump to the destination instead.
3. If branch analysis tells us some edges in the machinecfg are not actually
possible, remove them.

#2 triggers a suprisingly large number of times.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31094 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
12143054aa6d120f029d268a5154bf2ecd0f707f 21-Oct-2006 Chris Lattner <sabre@nondot.org> Add an experimental cross-jumping implementation.
This is currently disabled by default and limited in several ways, but does
have a positive effect.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31090 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
683747abb81a7b7711ad6cb5abf5a4227f7ab691 18-Oct-2006 Chris Lattner <sabre@nondot.org> Teach the branch folder to update debug info if it removes blocks with line
# notes in it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31026 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
ffddf6ba1c58b42dcfd071972754649c3ca5dff7 17-Oct-2006 Chris Lattner <sabre@nondot.org> Enable deleting branches to successor blocks. With the previous patches,
branch folding can now compile stuff like this:

void foo(int W, int X, int Y, int Z) {
if (W & 1) {
for (; X;--X) bar();
} else if (W & 2) {
for (; Y;--Y) bar();
} else if (W & 4) {
for (; Z;--Z) bar();
} else if (W & 8) {
for (; W;--W) bar();
}

if (W) {
bar();
}
}

contrived testcase where loops exits all end up merging together. To have
the loop merges be:

...
cmplw cr0, r30, r27
bne cr0, LBB1_14 ;bb38
LBB1_16: ;cond_next48.loopexit
mr r27, r29
LBB1_20: ;cond_next48
cmplwi cr0, r27, 0
beq cr0, LBB1_22 ;UnifiedReturnBlock
...

instead of:


...
cmplw cr0, r30, r27
bne cr0, LBB1_14 ;bb38
LBB1_16: ;cond_next48.loopexit
mr r27, r29
b LBB1_20 ;cond_next48
LBB1_17: ;cond_next48.loopexit1
b LBB1_20 ;cond_next48
LBB1_18: ;cond_next48.loopexit2
b LBB1_20 ;cond_next48
LBB1_19: ;cond_next48.loopexit3
LBB1_20: ;cond_next48
cmplwi cr0, r27, 0
beq cr0, LBB1_22 ;UnifiedReturnBlock
...


This is CodeGen/PowerPC/branch-opt.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31006 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
c50ffcb7fcb7c1109fee2406e8f74d096f755f47 17-Oct-2006 Chris Lattner <sabre@nondot.org> Reenable this pass, fixing the bugs in it.
It now correctly deletes unreachable blocks and blocks that are empty.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31000 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
8f16eb98ed21a642d7f75c76f4b1acf0f199ee6d 14-Oct-2006 Chris Lattner <sabre@nondot.org> disable this pass for now, it's causing issues


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30951 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7821a8afd3009c3c2760592e61de9e2c31c73e18 14-Oct-2006 Chris Lattner <sabre@nondot.org> falling off the end of a function is ok with an unreachable instruction.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30950 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
eb15eeec396145b6f5028d07bd2c4a5e903fdec5 13-Oct-2006 Chris Lattner <sabre@nondot.org> disable some objectionable code, maybe we can bring this pass to life


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30939 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.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/BranchFolding.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/BranchFolding.cpp
4ae131e5da124bb5f7455133fefb1fa3b336192b 01-Aug-2004 Chris Lattner <sabre@nondot.org> Dereferencing end() is bad.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15402 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
f978a1db517749e91210b7df17b7f11b9a30ae47 31-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Make OptimizeBlock take a MachineFunction::iterator instead of a
MachineBasicBlock* as a parameter so that nxext() and prior() helper
functions can work naturally on it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15376 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
7f74340733967255cf45f6514cf0f18a1f325371 31-Jul-2004 Chris Lattner <sabre@nondot.org> Next on a pointer increments the pointer, not an iterator


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15375 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
9fd332392c184b13eeb2bd3ffc4347034bc7408a 31-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Use next() helper to make code more readable. Use
MachineFunction::iterator instead of MachineBasicBlock* to avoid
dereferencing end iterators.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15373 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
dd0458378128b748d4ac6c6035cd47d021faf507 31-Jul-2004 Alkis Evlogimenos <alkis@evlogimenos.com> Use MachineFunction::iterator instead of a MachineBasicBlock* because
FallThrough maybe == to MF.end().


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15372 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/BranchFolding.cpp
21ab22e47592d8a4046cfdac844d76b2cb76d711 31-Jul-2004 Chris Lattner <sabre@nondot.org> Implement a simple target-independent CFG cleanup pass


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