22c310d78ce9630af15b0de94c18a409705b7496 |
|
10-Dec-2014 |
Tim Murray <timmurray@google.com> |
Revert "Revert "Bring in fixes for Cortex-A53 errata + build updates."" This reverts commit c8db087b3b6d8767db4fa54057ac8fa448d812ca.
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c8db087b3b6d8767db4fa54057ac8fa448d812ca |
|
23-Oct-2014 |
Tim Murray <timmurray@google.com> |
Revert "Bring in fixes for Cortex-A53 errata + build updates." This reverts commit 8a1773694c6d9b1277647440583811ad3d85c6a4. bug 18094492
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
8a1773694c6d9b1277647440583811ad3d85c6a4 |
|
17-Oct-2014 |
Stephen Hines <srhines@google.com> |
Bring in fixes for Cortex-A53 errata + build updates. Bug: 18034609 (cherry picked from commit bfc2d688b591c574c0cc788348c74545ce894efa) Change-Id: I010fb735bb84fe97ccb8e3878f9601cb533962f4
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
dce4a407a24b04eebc6a376f8e62b41aaa7b071f |
|
29-May-2014 |
Stephen Hines <srhines@google.com> |
Update LLVM for 3.5 rebase (r209712). Change-Id: I149556c940fb7dc92d075273c87ff584f400941f
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
36b56886974eae4f9c5ebc96befd3e7bfe5de338 |
|
24-Apr-2014 |
Stephen Hines <srhines@google.com> |
Update to LLVM 3.5a. Change-Id: Ifadecab779f128e62e430c2b4f6ddd84953ed617
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
94ee55d4b39d6506cf4e0f4e4b1c0b7fbbfeaed5 |
|
16-Sep-2013 |
Benjamin Kramer <benny.kra@googlemail.com> |
Replace some unnecessary vector copies with references. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190770 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9608ed1311ca15fc43ee09dabea97d12f32485a4 |
|
20-Aug-2013 |
Richard Sandiford <rsandifo@linux.vnet.ibm.com> |
Fix overly pessimistic shortcut in post-RA MachineLICM Post-RA LICM keeps three sets of registers: PhysRegDefs, PhysRegClobbers and TermRegs. When it sees a definition of R it adds all aliases of R to the corresponding set, so that when it needs to test for membership it only needs to test a single register, rather than worrying about aliases there too. E.g. the final candidate loop just has: unsigned Def = Candidates[i].Def; if (!PhysRegClobbers.test(Def) && ...) { to test whether register Def is multiply defined. However, there was also a shortcut in ProcessMI to make sure we didn't add candidates if we already knew that they would fail the final test. This shortcut was more pessimistic than the final one because it checked whether _any alias_ of the defined register was multiply defined. This is too conservative for targets that define register pairs. E.g. on z, R0 and R1 are sometimes used as a pair, so there is a 128-bit register that aliases both R0 and R1. If a loop used R0 and R1 independently, and the definition of R0 came first, we would be able to hoist the R0 assignment (because that used the final test quoted above) but not the R1 assignment (because that meant we had two definitions of the paired R0/R1 register and would fail the shortcut in ProcessMI). This patch just uses the same check for the ProcessMI shortcut as we use in the final candidate loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@188774 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9e639e8fd95488cb4c8ef2f7f3a41919acb29ac4 |
|
11-Jul-2013 |
Craig Topper <craig.topper@gmail.com> |
Use SmallVectorImpl& instead of SmallVector to avoid repeating small vector size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186098 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
69e42dbd006c0afb732067ece7327988b1e24c01 |
|
11-Jan-2013 |
Benjamin Kramer <benny.kra@googlemail.com> |
Split TargetLowering into a CodeGen and a SelectionDAG part. This fixes some of the cycles between libCodeGen and libSelectionDAG. It's still a complete mess but as long as the edges consist of virtual call it doesn't cause breakage. BasicTTI did static calls and thus broke some build configurations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172246 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
860e7cdab9d5eceda5ac52ae0ddfb4bdab0067f2 |
|
13-Dec-2012 |
Patrik Hagglund <patrik.h.hagglund@ericsson.com> |
Change TargetLowering::getRepRegClassFor to take an MVT, instead of EVT. Accordingly, change RegDefIter to contain MVTs instead of EVTs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170140 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
34525f9ac098c1c6bc9002886d6da3039a284fd2 |
|
11-Dec-2012 |
Patrik Hagglund <patrik.h.hagglund@ericsson.com> |
Revert EVT->MVT changes, r169836-169851, due to buildbot failures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169854 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
aa7744d75fc1769ccc12c65c07bb5b82afa58330 |
|
11-Dec-2012 |
Patrik Hagglund <patrik.h.hagglund@ericsson.com> |
Change TargetLowering::getRepRegClassFor to take an MVT, instead of EVT. Accordingly, change RegDefIter to contain MVTs instead of EVTs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169838 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d04a8d4b33ff316ca4cf961e06c9e312eff8e64f |
|
03-Dec-2012 |
Chandler Carruth <chandlerc@gmail.com> |
Use the new script to sort the includes of every file under lib. Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module include to be the nearest plausible thing I could find. If you own or care about any of these source files, I encourage you to take some time and check that these edits were sensible. I can't have broken anything (I strictly added headers, and reordered them, never removed), but they may not be the headers you'd really like to identify as containing the API being implemented. Many forward declarations and missing includes were added to a header files to allow them to parse cleanly when included first. The main module rule does in fact have its merits. =] git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@169131 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
96601ca332ab388754ca4673be8973396fea2ddd |
|
22-Aug-2012 |
Craig Topper <craig.topper@gmail.com> |
Add a getName function to MachineFunction. Use it in places that previously did getFunction()->getName(). Remove includes of Function.h that are no longer needed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@162347 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
397fc4874efe9c17e737d4c5c50bd19dc3bf27f5 |
|
08-May-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add an MF argument to TRI::getPointerRegClass() and TII::getRegClass(). The getPointerRegClass() hook can return register classes that depend on the calling convention of the current function (ptr_rc_tailcall). So far, we have been able to infer the calling convention from the subtarget alone, but as we add support for multiple calling conventions per target, that no longer works. Patch by Yiannis Tsiouris! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@156328 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
71fbed45d9f4e2e886afc7f22c058087e7872dc6 |
|
11-Apr-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Tweak MachineLICM heuristics for cheap instructions. Allow cheap instructions to be hoisted if they are register pressure neutral or better. This happens if the instruction is the last loop use of another virtual register. Only expensive instructions are allowed to increase loop register pressure. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154455 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
8b560b8c485992dbd62ee31aaff5ac25b5549bd6 |
|
11-Apr-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Only check for PHI uses inside the current loop. Hoisting a value that is used by a PHI in the loop will introduce a copy because the live range is extended to cross the PHI. The same applies to PHIs in exit blocks. Also use this opportunity to make HasLoopPHIUse() non-recursive. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@154454 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d6c23557898b1fe9b21b28023f4133cab84a8b83 |
|
27-Mar-2012 |
Evan Cheng <evan.cheng@apple.com> |
Post-ra LICM should take care not to hoist an instruction that would clobber a register that's read by the preheader terminator. rdar://11095580 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153492 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
921c9bd91f59937e25e754e19832c40b2f130d63 |
|
28-Feb-2012 |
Chad Rosier <mcrosier@apple.com> |
Fix 80-column violation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@151599 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
0f7de3542f792da8abced2ad1809b2dfa8a4daff |
|
17-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Revert r150288, "Allow Post-RA LICM to hoist reserved register reads." This caused miscompilations on out-of-tree targets, and possibly i386 as well. I'll find some other way of hoisting %rip-relative loads from loops containing calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150816 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
5637379000b9a40f2bfee8ea238dc0d3955535ce |
|
11-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Allow Post-RA LICM to hoist reserved register reads. When using register masks, registers like %rip are clobbered by the register mask. LICM should still be able to hoist instructions reading %rip from a loop containing calls. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150288 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
fd3d4cf0ef5237bd517559703bea2310f1841a5d |
|
11-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Don't read PreRegAlloc before it is initialized. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150286 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
1dd8c8560d45d36a8e507cd014352f1d313f9f9e |
|
08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Codegen pass definition cleanup. No functionality. Moving toward a uniform style of pass definition to allow easier target configuration. Globally declare Pass ID. Globally declare pass initializer. Use INITIALIZE_PASS consistently. Add a call to the initializer from CodeGen.cpp. Remove redundant "createPass" functions and "getPassName" methods. While cleaning up declarations, cleaned up comments (sorry for large diff). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150100 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9d41bd5c78b99750d820e01bcd4a4e479b713d4c |
|
08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
Move pass configuration out of pass constructors: MachineLICM. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150099 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9f17cf625dc8be1e92cd2755e2d118ce38fc7268 |
|
08-Feb-2012 |
Andrew Trick <atrick@apple.com> |
whitespace git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@150098 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
478a8a02bc0f2e739ed8f4240152e99837e480b9 |
|
03-Feb-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Require non-NULL register masks. It doesn't seem worthwhile to give meaning to a NULL register mask pointer. It complicates all the code using register mask operands. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149646 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d0848a6398e0830898463ceb0041d4d7b163512d |
|
23-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Fix PR11829. PostRA LICM was too aggressive. This fixes a typo in r148589. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148724 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
39f66601938e88a4e287986fab58a0d5053f8f8e |
|
23-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify debug output. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148723 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a3c4ca9c7ba4bb98eb1c240726c8f4fb7e60f1c7 |
|
20-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Support register masks in MachineLICM. Only PostRA LICM is affected. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148589 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c035c940a656f34a58ebe22fcc5f9b2a7d8e97fb |
|
16-Jan-2012 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Extract method for detecting constant unallocatable physregs. It is safe to move uses of such registers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@148259 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
75fda5dcaebf3daafdbd06f44e89c7683b1be770 |
|
10-Jan-2012 |
Evan Cheng <evan.cheng@apple.com> |
80 col violation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147884 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
3cfecf5cc2279cbbcdd497f2898161e40e690c86 |
|
22-Dec-2011 |
Pete Cooper <peter_cooper@apple.com> |
Hoisted some loop invariant smallvector lookups out of a MachineLICM loop git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147127 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
acde91e2735cf2841a306a7c7af7af8c31f34a4a |
|
22-Dec-2011 |
Pete Cooper <peter_cooper@apple.com> |
Changed MachineLICM to use a worklist list MachineCSE instead of recursion. Fixes <rdar://problem/10584116> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@147125 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
7c2a4a30e0e16762c75adacebd05ec9fcbccf16b |
|
06-Dec-2011 |
Evan Cheng <evan.cheng@apple.com> |
First chunk of MachineInstr bundle support. 1. Added opcode BUNDLE 2. Taught MachineInstr class to deal with bundled MIs 3. Changed MachineBasicBlock iterator to skip over bundled MIs; added an iterator to walk all the MIs 4. Taught MachineBasicBlock methods about bundled MIs git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145975 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
99aa14ff64c92eab347d23696e358361d3bd90ea |
|
16-Nov-2011 |
Owen Anderson <resistor@mac.com> |
Rename MVT::untyped to MVT::Untyped to match similar nomenclature. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144747 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
73b5bb38650a1a1441fcf210c79f188d08990946 |
|
26-Oct-2011 |
Evan Cheng <evan.cheng@apple.com> |
Disable LICM speculation in high register pressure situation again now that Devang has fixed other issues. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@143003 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
06e16bbec02d289552f942abe7a6353b51cdb5ea |
|
20-Oct-2011 |
Devang Patel <dpatel@apple.com> |
As Evan suggested, loads from constant pool are safe to speculate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142593 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
e6de9f30cbdbeca7f6632420f2cd5728d9a2dc1c |
|
20-Oct-2011 |
Devang Patel <dpatel@apple.com> |
Add a comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142592 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
1025cce290d99fd325bccd0c1e89dab49eea8140 |
|
17-Oct-2011 |
Evan Cheng <evan.cheng@apple.com> |
Constraint register class with constrainRegClass() to CSE a virtual into another. rdar://10293289 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142234 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
6c15fec3c5b4770570a4d681762a7bd510e65077 |
|
17-Oct-2011 |
Devang Patel <dpatel@apple.com> |
It is safe to speculate load from GOT. This fixes performance regression caused by r141689. Radar 10281206. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142202 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
ea3abd553668e272772f04ae1536034cd37e70d1 |
|
13-Oct-2011 |
Nick Lewycky <nicholas@mxc.ca> |
Tabs to spaces. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141844 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
7007e4c5564f32fe4f06765a9740218039e7b492 |
|
12-Oct-2011 |
Evan Cheng <evan.cheng@apple.com> |
Disable machine LICM speculation check (for profitability) until I have time to investigate the regressions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141813 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a2e87912d826b1843bb5b1058670f09b87aea905 |
|
12-Oct-2011 |
Bill Wendling <isanbard@gmail.com> |
Expand the check for a landing pad so that it looks at the basic block's containing loop's header to see if that's a landing pad. If it is, then we don't want to hoist instructions out of the loop and above the header. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141767 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
7efba85d414949febe51100e298077233526787c |
|
12-Oct-2011 |
Evan Cheng <evan.cheng@apple.com> |
Fix r141744. 1. The speculation check may not have been performed if the BB hasn't had a load LICM candidate. 2. If the candidate would be CSE'ed, then go ahead and speculatively LICM the instruction even if it's in high register pressure situation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141747 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
fad62874883ab78af47b4eeba042775a67ea7515 |
|
12-Oct-2011 |
Evan Cheng <evan.cheng@apple.com> |
Refine r141689 with a tri-state variable. Also teach MachineLICM to avoid "speculation" when register pressure is high. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141744 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c83693f5b0aa26de55881345a79f4202ef9c3088 |
|
12-Oct-2011 |
Bill Wendling <isanbard@gmail.com> |
N.B. This is with the new EH scheme: The blocks with invokes have branches to the dispatch block, because that more correctly models the behavior of the CFG. The dispatch of course has edges to the landing pads. Those landing pads could contain invokes, which then have branches back to the dispatch. This creates a loop. The machine LICM pass looks at this loop and thinks it can hoist elements out of it. But because the dispatch is an alternate entry point into the program, the hoisted instructions won't be executed. I wasn't able to get a testcase which was small and could reproduce all of the time. The function_try_block.cpp in llvm-test was where this showed up. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141726 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
2e350479478ccf809e2142a4f0ad8062342577cc |
|
11-Oct-2011 |
Devang Patel <dpatel@apple.com> |
Add dominance check for the instruction being hoisted. For example, MachineLICM should not hoist a load that is not guaranteed to be executed. Radar 10254254. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141689 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
db7334dbc55fb4b86fa3db19bff08ec02ba474d5 |
|
11-Oct-2011 |
Devang Patel <dpatel@apple.com> |
Revert r141569 and r141576. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141594 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
6b50bc9d88538c155503582b095fdba518070257 |
|
10-Oct-2011 |
Devang Patel <dpatel@apple.com> |
If loop header is also loop exiting block then it may not be safe to hoist instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141576 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9ac743a4ee61cb845bbe22a2f6898f38c2adafce |
|
10-Oct-2011 |
Devang Patel <dpatel@apple.com> |
Add dominance check for the instruction being hoisted. For example, MachineLICM should not hoist a load that is not guaranteed to be executed. Radar 10254254. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@141569 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
61560e205a7997749f066dcceaadd5f4b9b5e1be |
|
01-Sep-2011 |
Evan Cheng <evan.cheng@apple.com> |
Teach MachineLICM reg pressure tracking code to deal with MVT::untyped. Sorry, I can't come up with a small test case. rdar://10043690 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138934 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
ab8be96fd30ca9396e6b84fdddf1ac6208984cad |
|
29-Jun-2011 |
Evan Cheng <evan.cheng@apple.com> |
Sink SubtargetFeature and TargetInstrItineraries (renamed MCInstrItineraries) into MC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@134049 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
15993f83a419950f06d2879d6701530ae6449317 |
|
27-Jun-2011 |
Evan Cheng <evan.cheng@apple.com> |
More refactoring. Move getRegClass from TargetOperandInfo to TargetInstrInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@133944 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d67705faaa526a31feab831ac1e5e15ee37880a1 |
|
11-Apr-2011 |
Evan Cheng <evan.cheng@apple.com> |
Look pass copies when determining whether hoisting would end up inserting more copies. rdar://9266679 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129297 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
be2119e8e2bc7006cfd638a24367acbfda625d16 |
|
07-Mar-2011 |
Cameron Zwarich <zwarich@apple.com> |
Move getRegPressureLimit() from TargetLoweringInfo to TargetRegisterInfo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127175 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9fe2009956fc40f3aea46fb3c38dcfb61c4aca46 |
|
20-Jan-2011 |
Evan Cheng <evan.cheng@apple.com> |
Sorry, several patches in one. TargetInstrInfo: Change produceSameValue() to take MachineRegisterInfo as an optional argument. When in SSA form, targets can use it to make more aggressive equality analysis. Machine LICM: 1. Eliminate isLoadFromConstantMemory, use MI.isInvariantLoad instead. 2. Fix a bug which prevent CSE of instructions which are not re-materializable. 3. Use improved form of produceSameValue. ARM: 1. Teach ARM produceSameValue to look pass some PIC labels. 2. Look for operands from different loads of different constant pool entries which have same values. 3. Re-implement PIC GA materialization using movw + movt. Combine the pair with a "add pc" or "ldr [pc]" to form pseudo instructions. This makes it possible to re-materialize the instruction, allow machine LICM to hoist the set of instructions out of the loop and make it possible to CSE them. It's a bit hacky, but it significantly improve code quality. 4. Some minor bug fixes as well. With the fixes, using movw + movt to materialize GAs significantly outperform the load from constantpool method. 186.crafty and 255.vortex improved > 20%, 254.gap and 176.gcc ~10%. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123905 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c9df025e33ac435adb3b3318d237c36ca7cec659 |
|
10-Jan-2011 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Simplify a bunch of isVirtualRegister() and isPhysicalRegister() logic. These functions not longer assert when passed 0, but simply return false instead. No functional change intended. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123155 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
fca0b106f7df867912cd1de8bbd6285bb2ab7225 |
|
11-Nov-2010 |
Dan Gohman <gohman@apple.com> |
Add a FIXME comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@118803 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
8bcf7603f7e3be558991000fd99b8b7ac359204f |
|
02-Nov-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
MachineLICM should not claim to be preserving the CFG when it can split critical edges on demand. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117982 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c8141dfc7f983cb04e65d8acd6bcbdc8e4b8a0ae |
|
26-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
Use instruction itinerary to determine what instructions are 'cheap'. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117348 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
134982daa9bcd87f79c357e3a2686804b9baddd9 |
|
21-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
More accurate estimate / tracking of register pressure. - Initial register pressure in the loop should be all the live defs into the loop. Not just those from loop preheader which is often empty. - When an instruction is hoisted, update register pressure from loop preheader to the original BB. - Treat only use of a virtual register as kill since the code is still SSA. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116956 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
f96e4bd2a3b11928af75fb7472288930d16fec0b |
|
20-Oct-2010 |
Dan Gohman <gohman@apple.com> |
Make CodeGen TBAA-aware. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116890 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
2312842de0c641107dd04d7e056d02491cc781ca |
|
19-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
Re-enable register pressure aware machine licm with fixes. Hoist() may have erased the instruction during LICM so UpdateRegPressureAfter() should not reference it afterwards. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116845 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
081c34b725980f995be9080eaec24cd3dfaaf065 |
|
19-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Get rid of static constructors for pass registration. Instead, every pass exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies. Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments. I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116820 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
98694138025fdb0cec0cda5727201ad00ded3d63 |
|
19-Oct-2010 |
Daniel Dunbar <daniel@zuster.org> |
Revert r116781 "- Add a hook for target to determine whether an instruction def is", which breaks some nightly tests. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116816 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
dc986d2462ca8df72af9e2f6afac0ba86b753e5b |
|
19-Oct-2010 |
Andrew Trick <atrick@apple.com> |
Fix for machine licm assert: RCCost <= RegPressure[RCId] in MultiSource/Benchmarks/VersaBench/beamformer/beamformer. SmallSet.insert returns true if the element is inserted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116790 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
11e8b74a7ae9ecd59b64180a59143e39bc3b9514 |
|
19-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
- Add a hook for target to determine whether an instruction def is "long latency" enough to hoist even if it may increase spilling. Reloading a value from spill slot is often cheaper than performing an expensive computation in the loop. For X86, that means machine LICM will hoist SQRT, DIV, etc. ARM will be somewhat aggressive with VFP and NEON instructions. - Enable register pressure aware machine LICM by default. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116781 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
03a9fdf2e755c1cebdb8371d79b591d46daa9463 |
|
16-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
More machine LICM work. It now tracks register pressure for path from preheader to current BB and use the information determine whether hoisting is worthwhile. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116654 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
0e673919f0f02f39e2210c365f732299a21db49e |
|
14-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
Register pressure and instruction latency aware machine LICM. Work in progress. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116465 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
2ab36d350293c77fc8941ce1023e4899df7e3a82 |
|
12-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Begin adding static dependence information to passes, which will allow us to perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116334 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
e95f3195b8c65f377a59cc716bfda58c8f7c2f5e |
|
08-Oct-2010 |
Evan Cheng <evan.cheng@apple.com> |
Don't waste time unfolding simple loads. The unfolded copy won't be hoisted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@116081 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
ce665bd2e2b581ab0858d1afe359192bac96b868 |
|
08-Oct-2010 |
Owen Anderson <resistor@mac.com> |
Now with fewer extraneous semicolons! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115996 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.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/MachineLICM.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/MachineLICM.cpp
|
c46a5f20c5ab9c497a91d3227d6368e92069cace |
|
29-Jul-2010 |
Dale Johannesen <dalej@apple.com> |
Comment typo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109765 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d13db2c59cc94162d6cf0a04187d408bfef6d4a7 |
|
22-Jul-2010 |
Owen Anderson <resistor@mac.com> |
Fix batch of converting RegisterPass<> to INTIALIZE_PASS(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109045 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
21d35c1399cbf353abfad82fc47c919ffbe7abc6 |
|
20-Jul-2010 |
Dale Johannesen <dalej@apple.com> |
Fix test for switch statements and increase threshold a bit per experimentation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108935 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
bf1ae5e254f8f6f6f3dfe9438d14bef9b955f01f |
|
20-Jul-2010 |
Dale Johannesen <dalej@apple.com> |
Don't hoist things out of a large switch inside a loop, for the reasons in the comments. This is a major win on 253.perlbmk on ARM Darwin. I expect it to be a good heuristic in general, but it's possible some things will regress; I'll be watching. 7940152. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108792 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
db8980903717e1127463f00a34cae9bd29f82a91 |
|
14-Jul-2010 |
Evan Cheng <evan.cheng@apple.com> |
Teach ProcessImplicitDefs to transform more COPY instructions into IMPLICIT_DEF (and subsequently eliminate them). This allows machine LICM to hoist IMPLICIT_DEF's. PR7620. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108304 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
7791080151a5a8bbda073551289469301d006fcb |
|
12-Jul-2010 |
Chris Lattner <sabre@nondot.org> |
change machinelicm to use MachineInstr::isSafeToMove. No intended functionality change. The avoidance of hoistiing implicitdef seems wrong though. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108109 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
aa7426070da3b74d60186763bb7c53af3e095427 |
|
09-Jul-2010 |
Dan Gohman <gohman@apple.com> |
Fix MachineLICM to actually visit inner loops. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@108001 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
853d3fb8d24fab2258e9cd5dce3ec8ff4189eeda |
|
22-Jun-2010 |
Dan Gohman <gohman@apple.com> |
Move PHIElimination's SplitCriticalEdge for MachineBasicBlocks out into a utility routine, teach it how to update MachineLoopInfo, and make use of it in MachineLICM to split critical edges on demand. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106555 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
82e0a1a1a81ad54452823a8eb1e8d743cf38f098 |
|
29-May-2010 |
Evan Cheng <evan.cheng@apple.com> |
Doh. Machine LICM is re-initializing the CSE map over and over. Patch by Anna Zaks. rdar://8037934. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105065 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
e6cd757e6800b9b94a6459ec148c0624c4f2e3c1 |
|
13-May-2010 |
Dan Gohman <gohman@apple.com> |
Teach MachineLICM and MachineSink how to clear kill flags conservatively when they move instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@103737 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9196ab640559ca473931b1ad74b90bbed516272f |
|
20-Apr-2010 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
When MachineLICM is hoisting a physical register after regalloc, make sure the register is not killed in the loop. This fixes 188.ammp on ARM where the post-ra scheduler would grab a register that looked available but wasn't. A testcase would be huge and fragile, sorry. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101930 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
94d1d9c2190b93feeb01934dbf1f2b828ceb82dc |
|
17-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Postra machine licm must add registers defined by loop invariants to *all* of the live-in sets of BBs in the loop. Otherwise later pass may end up using the registers and override the invariant. rdar://7852937 No reasonablly sized test case possible. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101626 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
6327537a377d2b77748270258e99b257bf1723df |
|
14-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Fast path implicit_def check. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101183 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c15d9135a82525d1b1e52fe79c70e782c15e251e |
|
13-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Avoid variable shadowing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101170 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
aeb2f4aa462949ce067125f2f56dc34df64b25db |
|
13-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Expand postra machine licm's capability a little more. If an instruction's register operands are all loop invariants, then it's safe to hoist it. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101167 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
5dc57ce53329143c2b533882410be80ea5d259a7 |
|
13-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Teach postra machine licm to hoist more obvious invariants, e.g. instructions with no source operands. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101154 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
81bf03eb5cd68243eabb52505105aa5f4a831bf3 |
|
13-Apr-2010 |
Dan Gohman <gohman@apple.com> |
Eliminate MachineBasicBlock::const_livein_iterator and make MachineBasicBlock::livein_iterator a const_iterator, because clients shouldn't ever be using the iterator interface to mutate the livein set. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101147 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
678d9b7ed030dd79ed5ac749b0b21b6cb0859cd0 |
|
12-Apr-2010 |
Benjamin Kramer <benny.kra@googlemail.com> |
Plug trivial leak. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101034 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
7d597b4428dcc120b15fcd92b33515108d54e35e |
|
09-Apr-2010 |
Dan Gohman <gohman@apple.com> |
Delete this obsolete comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100858 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
4038f9c21b17378617c25f3092fe615326f8b874 |
|
08-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Make post regalloc machine licm functional. It now passes all of MultiSource. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100742 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
5b463905be11f8c89bf3a7a777eb5d0c7be7162d |
|
07-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Add comments for missed opportunities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100610 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
348856e56a247c9815986be51565551394f9e9c2 |
|
07-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Fix typo. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100609 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d94671a25e65918557a2c03c0fc12a60a5d138bf |
|
07-Apr-2010 |
Evan Cheng <evan.cheng@apple.com> |
Post regalloc LICM. Work in progress. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@100592 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
506049f29f4f202a8e45feb916cc0264440a7f6d |
|
03-Mar-2010 |
Evan Cheng <evan.cheng@apple.com> |
- Change MachineInstr::isIdenticalTo to take a new option that determines whether it should skip checking defs or at least virtual register defs. This subsumes part of the TargetInstrInfo::isIdentical functionality. - Eliminate TargetInstrInfo::isIdentical and replace it with produceSameValue. In the default case, produceSameValue just checks whether two machine instructions are identical (except for virtual register defs). But targets may override it to check for unusual cases (e.g. ARM pic loads from constant pools). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97628 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
6ac33b4533889f132ba10c812ae574d779c827b9 |
|
28-Feb-2010 |
Dan Gohman <gohman@apple.com> |
Don't try to replace physical registers when doing CSE. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97360 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a363a9b71afcf326d376445f6f3cae0c36e6e9d9 |
|
28-Feb-2010 |
Dan Gohman <gohman@apple.com> |
Don't unconditionally suppress hoisting of instructions with implicit defs or uses. The regular def and use checking below covers them, and can be more precise. It's safe to hoist an instruction with a dead implicit def if the register isn't live into the loop header. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97352 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
65a41eb59e37b9e2b8d3ecff56c8fc44ddc9de58 |
|
05-Jan-2010 |
David Greene <greened@obbligato.org> |
Change errs() to dbgs(). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92547 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
92329c7fbe572892c17aa2d2542a10e3ea16132f |
|
18-Dec-2009 |
Dan Gohman <gohman@apple.com> |
Add Loop contains utility methods for testing whether a loop contains another loop, or an instruction. The loop form is substantially more efficient on large loops than the typical code it replaces. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91654 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c26abd94877eb1e2e00de8f9f927606e37e479d8 |
|
21-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Enable hoisting load from constant memories. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89510 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
87b75ba75e854773bde482309d6594c25c567e0e |
|
20-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Add option -licm-const-load to hoist all loads from constant memory. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89477 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
324da7647cfc3025e0c987176f0a300f9f780e6f |
|
20-Nov-2009 |
Jakob Stoklund Olesen <stoklund@2pi.dk> |
Add MachineBasicBlock::getName, and use it in place of getBasicBlock()->getName. Fix debug code that assumes getBasicBlock never returns NULL. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89428 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
7adcdc313f8367808a1f43c34ca67a4044595327 |
|
17-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Fix comment. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89129 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
78e5c1140adc926e7c004748c1c912bfddd875b4 |
|
07-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
- Add TargetInstrInfo::isIdentical(). It's similar to MachineInstr::isIdentical except it doesn't care if the definitions' virtual registers differ. This is used by machine LICM and other MI passes to perform CSE. - Teach Thumb2InstrInfo::isIdentical() to check two t2LDRpci_pic are identical. Since pc relative constantpool entries are always different, this requires it it check if the values can actually the same. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86328 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9fb744e16945390d6ff0a631d4ad7637fec5b7b1 |
|
05-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Code refactoring. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86085 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
777c6b7caa9bbefe14085bf51e91a0bf21b0b3c0 |
|
03-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Re-apply 85799. It turns out my code isn't buggy. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85947 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
454ac8961b243afa7c46fce9c28fb4c01650bb3e |
|
02-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Revert 85799 for now. It might be breaking llvm-gcc driver. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85827 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
72ed88feacb989831581f2c71176a68fcdba4b67 |
|
02-Nov-2009 |
Evan Cheng <evan.cheng@apple.com> |
Initilize the machine LICM CSE map upon the first time an instruction is hoisted to the loop preheader. Add instructions which are already in the preheader block that may be common expressions of those that are hoisted out. These does get a few more instructions CSE'ed. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85799 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
0115e164bad632572e2cfbaf72f0f0882d5319de |
|
30-Oct-2009 |
Dan Gohman <gohman@apple.com> |
Fix MachineLICM to use the correct virtual register class when unfolding loads for hoisting. getOpcodeAfterMemoryUnfold returns the opcode of the original operation without the load, not the load itself, MachineLICM needs to know the operand index in order to get the correct register class. Extend getOpcodeAfterMemoryUnfold to return this information. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85622 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
5c95230f25a51835375ebaae77b841c6d2c57889 |
|
29-Oct-2009 |
Dan Gohman <gohman@apple.com> |
Refactor the code for unfolding a load into a separate function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85515 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
b8457a1a29c659638af9e260a14aa12836ca128f |
|
28-Oct-2009 |
Dan Gohman <gohman@apple.com> |
Simplify this code: if the unfolded load can't be hoisted, just delete the new instructions and leave the old one in place. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85393 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
589f1f5a4321eeee2856baa5c8ab1139d6e0351e |
|
28-Oct-2009 |
Dan Gohman <gohman@apple.com> |
Teach MachineLICM to unfold loads from constant memory from otherwise unhoistable instructions in order to allow the loads to be hoisted. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85364 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
f5a86f45e75ec744c203270ffa03659eb0a220c1 |
|
25-Oct-2009 |
Nick Lewycky <nicholas@mxc.ca> |
Remove includes of Support/Compiler.h that are no longer needed after the VISIBILITY_HIDDEN removal. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85043 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
6726b6d75a8b679068a58cb954ba97cf9d1690ba |
|
25-Oct-2009 |
Nick Lewycky <nicholas@mxc.ca> |
Remove VISIBILITY_HIDDEN from class/struct found inside anonymous namespaces. Chris claims we should never have visibility_hidden inside any .cpp file but that's still not true even after this commit. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85042 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a70dca156fa76d452f54829b5c5f962ddfd94ef2 |
|
10-Oct-2009 |
Dan Gohman <gohman@apple.com> |
Factor out LiveIntervalAnalysis' code to determine whether an instruction is trivially rematerializable and integrate it into TargetInstrInfo::isTriviallyReMaterializable. This way, all places that need to know whether an instruction is rematerializable will get the same answer. This enables the useful parts of the aggressive-remat option by default -- using AliasAnalysis to determine whether a memory location is invariant, and removes the questionable parts -- rematting operations with virtual register inputs that may not be live everywhere. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83687 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
599a87aca0194edb46f0bee141c3de8281bf22b9 |
|
09-Oct-2009 |
Dan Gohman <gohman@apple.com> |
isTriviallyReMaterializable checks the TargetInstrDesc::isRematerializable flag, so it isn't necessary to do this check in its callers. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83671 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
64efb555ceb67aa5dc6554140cc2b4ebc0eab23a |
|
09-Oct-2009 |
Evan Cheng <evan.cheng@apple.com> |
Give Dan and my recent changes, machine LICM is now code size neutral. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83624 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
3dc326ba83c8fc9a47f1cb9968ff15ba73913ce8 |
|
09-Oct-2009 |
Evan Cheng <evan.cheng@apple.com> |
Fix a logic error that caused non-rematable loop invariants loads to be licm'ed out of loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83622 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
e33f44cfc547359bc28526e4c5e1852b600b4448 |
|
07-Oct-2009 |
Dan Gohman <gohman@apple.com> |
Replace TargetInstrInfo::isInvariantLoad and its target-specific implementations with a new MachineInstr::isInvariantLoad, which uses MachineMemOperands and is target-independent. This brings MachineLICM and other functionality to targets which previously lacked an isInvariantLoad implementation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83475 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
45094e34bcbb133aa0bbe55710e25369df0e02ed |
|
26-Sep-2009 |
Dan Gohman <gohman@apple.com> |
Don't hoist or sink instructions with physreg uses if the physreg is allocatable. Even if it doesn't appear to have any defs, it may latter on after register allocation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82834 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a8fb336c2e7b8beb00d96a0992c41d38f0310a8f |
|
26-Sep-2009 |
Dan Gohman <gohman@apple.com> |
Unbreak MachineLICM for instructions that reference RIP on x86-64 too. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82825 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
b7a89928f495da21e77bae788e3d6b1c57ecc192 |
|
22-Aug-2009 |
Bill Wendling <isanbard@gmail.com> |
Convert DOUT to DEBUG(errs()...). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79754 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
ffef8acc3e3398bdd04e947c7949befdd52faf86 |
|
11-Aug-2009 |
Dan Gohman <gohman@apple.com> |
Tidy #includes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@78677 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
ce63ffb52f249b62cdf2d250c128007b13f27e71 |
|
25-Jul-2009 |
Daniel Dunbar <daniel@zuster.org> |
More migration to raw_ostream, the water has dried up around the iostream hole. - Some clients which used DOUT have moved to DEBUG. We are deprecating the "magic" DOUT behavior which avoided calling printing functions when the statement was disabled. In addition to being unnecessary magic, it had the downside of leaving code in -Asserts builds, and of hiding potentially unnecessary computations. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77019 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
efc783951c0ab801601aeaeae07ef2a7305d37b0 |
|
27-Feb-2009 |
Evan Cheng <evan.cheng@apple.com> |
MachineLICM CSE should match destination register classes; avoid hoisting implicit_def's. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@65592 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
740854bb1974642af77bec5e7f835e15115ad639 |
|
05-Feb-2009 |
Evan Cheng <evan.cheng@apple.com> |
Machine LICM increases register pressure and it almost always increase code size. For now, disable it for optimizing for size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63856 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
af6949d0b1e1545dff21c5e492fbf1760aa74b59 |
|
05-Feb-2009 |
Evan Cheng <evan.cheng@apple.com> |
Teach machine licm to CSE hoisted instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63854 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
5caa883afc2c768c293757d4ca30d85b9094e876 |
|
04-Feb-2009 |
Evan Cheng <evan.cheng@apple.com> |
Don't call isInvariantLoad twice. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63729 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
45e94d68d7c99235cf4decc72812445b214df40e |
|
04-Feb-2009 |
Evan Cheng <evan.cheng@apple.com> |
Don't bother hoisting out a "cheap" instruction if all of its uses are PHIs. LICM "cheap" instructions are not particularly beneficial to start with. This will just end up making the copies harder to coalesce. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63728 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9b61f33351a92f6a87065adae713c02497780887 |
|
04-Feb-2009 |
Evan Cheng <evan.cheng@apple.com> |
For now, only hoist re-materilizable instructions. LICM will increase register pressure. We want to avoid spilling more instructions if it's possible. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@63725 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
c475c3608a5f0fc0c6bd43da04ae786649690070 |
|
15-Jan-2009 |
Dan Gohman <gohman@apple.com> |
Simplify the MachineLICM pass by having it only traverse outer loops, hoisting instructions all the way out in one step rather than hoisting them one nest level at a time. Also, make a few other code simplifications. This speeds up MachineLICM by several fold. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@62283 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d68a07650cdb2e18f18f362ba533459aa10e01b6 |
|
05-Jan-2009 |
Dan Gohman <gohman@apple.com> |
Tidy up #includes, deleting a bunch of unnecessary #includes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61715 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
237dee125997dcaf16e391878465162cc680c0fa |
|
23-Dec-2008 |
Dan Gohman <gohman@apple.com> |
Use isTerminator() instead of isBranch()||isReturn() in several places. isTerminator() returns true for a superset of cases, and includes things like FP_REG_KILL, which are nither return or branch but aren't safe to move/remat/etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61373 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
7224170f6a5b8a3c76f4adc5f84d650d142a27c4 |
|
18-Dec-2008 |
Dan Gohman <gohman@apple.com> |
Give MachineLICM a name, for -time-passes etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@61184 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.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/MachineLICM.cpp
|
acb04ec4273516242fe87cb0a57a43136805dedd |
|
31-Aug-2008 |
Bill Wendling <isanbard@gmail.com> |
Cosmetic changes to Machine LICM. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55578 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
fb018d0433f7b52c3f1235e675276adb1f92d597 |
|
20-Aug-2008 |
Bill Wendling <isanbard@gmail.com> |
Don't hoist instructions that define a physical register. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55074 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
d3361e996b272084d8ebe5bae8a0d420206c8e37 |
|
18-Aug-2008 |
Bill Wendling <isanbard@gmail.com> |
Don't hoist instructions that have implicit uses or defines. Before, it was hoisting out some "test" and "cmp" instructions. This was obvious badness. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54908 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
8870ce951d3f545edc8a5ce89ce3e7cdbf38eb25 |
|
07-Jul-2008 |
Bill Wendling <isanbard@gmail.com> |
Prevent option name conflict. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53166 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
c1b7f52fbeb2b637b1cdb1d5e81b3f2b090b8770 |
|
12-May-2008 |
Bill Wendling <isanbard@gmail.com> |
Revert the previous commit. Go ahead and hoist rematerializable instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50990 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
e4fc1ccd4dd66a7421e911528c1af5337c20167b |
|
12-May-2008 |
Bill Wendling <isanbard@gmail.com> |
One real change - don't hoist something that's trivially rematerializable. It's possible for it to produce worse code than before. The rest of this patch is code cleanup. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@50987 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
074223a124e945ee67cacedb99e777265a0c6cb6 |
|
10-Mar-2008 |
Bill Wendling <isanbard@gmail.com> |
Minor cleanup. No functionality change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@48142 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
e6d088acc90e422451e098555d383d4d65b6ce6b |
|
26-Feb-2008 |
Bill Wendling <isanbard@gmail.com> |
Rename PrintableName to Name. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47629 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
74ab84c31ef64538a1b56e1f282e49303412ad17 |
|
26-Feb-2008 |
Bill Wendling <isanbard@gmail.com> |
Change "Name" to "AsmName" in the target register info. Gee, a refactoring tool would have been a Godsend here! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47625 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
a22edc82cab86be4cb8876da1e6e78f82bb47a3e |
|
11-Jan-2008 |
Chris Lattner <sabre@nondot.org> |
Simplify the side effect stuff a bit more and make licm/sinking both work right according to the new flags. This removes the TII::isReallySideEffectFree predicate, and adds TII::isInvariantLoad. It removes NeverHasSideEffects+MayHaveSideEffects and adds UnmodeledSideEffects as machine instr flags. Now the clients can decide everything they need. I think isRematerializable can be implemented in terms of the flags we have now, though I will let others tackle that. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45843 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.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/MachineLICM.cpp
|
d5da7048c297deb6137ad10cac217c5d9d702065 |
|
04-Jan-2008 |
Bill Wendling <isanbard@gmail.com> |
Add that this preserves some analyses. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45573 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
cc8f603f531c906782e4966107ae29667eb6632c |
|
04-Jan-2008 |
Bill Wendling <isanbard@gmail.com> |
Move option to enable machine LICM into LLVMTargetMachine.cpp. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45572 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
b082c6f5d9ee0b70e0ce67a8e26dd0955a034599 |
|
04-Jan-2008 |
Bill Wendling <isanbard@gmail.com> |
Call the parent's getAnalysisUsage. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45571 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
ac69582664714c2656a28ed6cb70627bb85ee673 |
|
04-Jan-2008 |
Chris Lattner <sabre@nondot.org> |
remove dead #includes and reorder the rest. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45569 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
dde059a9de65941e7b9013ddab92d3da403dd7be |
|
02-Jan-2008 |
Bill Wendling <isanbard@gmail.com> |
Use the correct MachineRegisterInfo object. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45499 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a4b662272d2aa1a39025523fd9d1fdce9dfcbdb2 |
|
02-Jan-2008 |
Bill Wendling <isanbard@gmail.com> |
Remove dead code. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45496 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
9258cd3994e54aaec66f69a321032e071391dc90 |
|
02-Jan-2008 |
Bill Wendling <isanbard@gmail.com> |
Use the new architecture to get the containing machine basic block for a machine instruction. Also, use "splice" to move the new instruction instead of remove/insert (where it was leaking memory anyway). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45492 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.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/MachineLICM.cpp
|
60ff1a300523d931bc297905a7238219e789028d |
|
20-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Updated comments to reflect what "side effects" means in this situation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45245 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
280f4565eb599ce424c204b9ea07130d772af7e3 |
|
18-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Add debugging info. Use the newly created "hasUnmodelledSideEffects" method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45178 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
efe2be797699d77dc3387969aa566c26d5c36d9d |
|
12-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Need to grow the indexed map. Added debug statements. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44892 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
a17ad59e13f5caafe33738bafc75af00ca354c9f |
|
11-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Simplify slightly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44881 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
12ebf14048f4a6489033f8468ba36424442140ac |
|
11-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Blark! How in the world did this work without this?! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44874 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
28bd5f0e47d968d64ea2e64868c505923b27c24d |
|
11-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
- Update the virtual reg to machine instruction map when hoisting. - Fix subtle bug when creating initially creating this map. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44873 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
650b0527a495acbf7d6ee3343e8c41fae1686148 |
|
11-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Checking for "zero operands" during the "CanHoistInst()" method isn't necessary because those with side effects will be caught by other checks in here. Also, simplify the check for a BB in a sub loop. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44871 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
041b3f835682588cb63df7e609d726369dd6b7d3 |
|
09-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Reverting 44702. It wasn't correct to rename them. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44727 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
320c630c1b55e17fa00249d499f974cb1a4238f8 |
|
08-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Renaming: isTriviallyReMaterializable -> hasNoSideEffects isReallyTriviallyReMaterializable -> isTriviallyReMaterializable git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44702 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
b48519cbadbb2b91a811f6fc189f40bd67c007f4 |
|
08-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Incorporated comments from Evan and Chris: http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20071203/056043.html http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20071203/056048.html git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44696 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|
0f940c95d4506f8d04fa2aeda8a79cadb3105fe3 |
|
07-Dec-2007 |
Bill Wendling <isanbard@gmail.com> |
Initial commit of the machine code LICM pass. It successfully hoists this: _foo: li r2, 0 LBB1_1: ; bb li r5, 0 stw r5, 0(r3) addi r2, r2, 1 addi r3, r3, 4 cmplw cr0, r2, r4 bne cr0, LBB1_1 ; bb LBB1_2: ; return blr to: _foo: li r2, 0 li r5, 0 LBB1_1: ; bb stw r5, 0(r3) addi r2, r2, 1 addi r3, r3, 4 cmplw cr0, r2, r4 bne cr0, LBB1_1 ; bb LBB1_2: ; return blr ZOMG!! :-) Moar to come... git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44687 91177308-0d34-0410-b5e6-96231b3b80d8
/external/llvm/lib/CodeGen/MachineLICM.cpp
|