Michael Gottesman
cf896976a0
Revert "Expand the amount of unchecked_addr_casts that we can handle."
...
This reverts commit r19272 to unblock the submission. I am going to
cherry-pick this later.
Swift SVN r19279
2014-06-27 00:02:05 +00:00
Michael Gottesman
256f1e5515
Expand the amount of unchecked_addr_casts that we can handle.
...
This is tested by an assertion in IRGen. After Beta3, this code is going
to go away and be replaced by just always promoting the cast. Then the
IRGen assertion will be replaced by propagating undef. The assertion in
the stdlib will still fire in that case since the assertion is based on
the tops not the given value implying that we will not lose any
correctness.
Swift SVN r19272
2014-06-26 23:07:52 +00:00
Michael Gottesman
3fc1042ca1
[load-store] Refactor load->load and store->load forwarding to use the same underlying method.
...
Both have the same form of, (Address, Value, Load). For the store->load I pass in
(SI->getDest(), SI->getSrc(), LI) and for the load->load I pass in
(OldLI->getOperand(), OldLI, LI).
This also for free lets our load deduplication support forwarding from casts.
Swift SVN r19133
2014-06-24 09:57:23 +00:00
Michael Gottesman
f6eefe63a3
[load-store] Teach load store opts how to forward stores -> partial loads which are related via typed GEPs.
...
I also refactored findExtractPathBetweenValues to be able to be used for both
partial load duplication and forwarding stores to partial loads.
Swift SVN r19132
2014-06-24 08:37:14 +00:00
Michael Gottesman
ee818e7533
[load-store] Teach load store forwarding how to forward stores -> loads with an intervening unchecked_addr_cast of layout compatible types.
...
Swift SVN r19130
2014-06-24 07:21:05 +00:00
Michael Gottesman
735a23a0a3
[sil-combine] Rewrite unchecked_addr_cast to access layout compatible first element fields via typed GEPS.
...
A first element field of a nominal type is either the first element of a
struct or the first payload of an enum. We currently allow the stdlib to
rappel into struct heirarchies using reinterpretCast. This patch teaches
the optimizer how to rewrite such unchecked_addr_cast into
unchecked_enum_data_addr and struct_element_addr instructions. Then
Mem2Reg and Load Store Forwarding will remove the allocation generated
by such uses of reinterpret cast.
<rdar://problem/16703656>
Swift SVN r18977
2014-06-18 09:34:05 +00:00
Michael Gottesman
102cd40ea0
[load-store-opts] RetainValue is insert from a load store opts perspective despite it having side effects due to it touching reference counts.
...
Swift SVN r18912
2014-06-15 20:01:42 +00:00
Michael Gottesman
aa70a16d7e
[load-store-opts] Track, perform load forwarding, and eliminate multiple stores.
...
rdar://16703656
Swift SVN r17746
2014-05-09 00:44:28 +00:00
Michael Gottesman
9fee32d515
[load-store-opts] Do not invalidate stores if AA says that an instruction does not alias the store's destination conservatively.
...
Swift SVN r17738
2014-05-09 00:00:21 +00:00
Michael Gottesman
02c42cd0a4
[load-store-opts] Refactor out special cases for strong_retain, cond-fail, and dealloc_stack into a helper function call isLSForwardingInertInstruction.
...
Swift SVN r17735
2014-05-08 23:34:22 +00:00
Michael Gottesman
f18dbbe9e8
[load-store-opts] Refactor load forwarding into its own method LSBBForwarder::tryToForwardLoad.
...
Now the main optimize method of load store forwarding is ~60 lines and
is significantly more readable.
Swift SVN r17718
2014-05-08 22:42:16 +00:00
Michael Gottesman
df441227f1
[load-store-opts] Refactor out dead store elimination into LSBBForwarder::tryToEliminateDeadStore.
...
Swift SVN r17717
2014-05-08 22:42:16 +00:00
Michael Gottesman
d4698e3beb
[load-store-opts] Move invalidateAliasingLoads onto LSBBForwarder and remove unneeded arguments.
...
Swift SVN r17716
2014-05-08 22:42:16 +00:00
Michael Gottesman
f510d16666
[load-store-opts] Refactor out call to recursivelyDeleteTriviallyDeadInstructions -> LSBBForwarder::deleteInstruction.
...
Swift SVN r17715
2014-05-08 22:42:15 +00:00
Michael Gottesman
328dd3cf52
[load-store-opts] Refactor/Simplify LoadStoreOpts by including a BBState structure.
...
This makes the main method able to be broken down into simpler pieces
without the need to pass as many things around.
Swift SVN r17714
2014-05-08 22:42:14 +00:00
Michael Gottesman
bd62e9d9e7
[load-store-opts] Keeping performing load store optimizations on a basic block until we no longer eliminate anything.
...
Swift SVN r17670
2014-05-08 02:33:35 +00:00
Manman Ren
fb299a4899
[LoadStoreOpt] make sure Loads do not hold deleted SILInstructions.
...
We add a callback function to recursivelyDeleteTriviallyDeadInstructions.
When a Load instruction is deleted, we erase it from Loads.
rdar://16815627
Swift SVN r17558
2014-05-06 20:02:31 +00:00
Mark Lacey
1452d24671
Small cleanup: Remove unnecessary calls to getDef(), mostly in dyn_cast<>(...).
...
Swift SVN r16235
2014-04-11 23:05:16 +00:00
Nadav Rotem
cce0b2d342
Add comments that describe the purpose of the set.
...
Swift SVN r15394
2014-03-23 20:55:24 +00:00
Nadav Rotem
4d9598fad1
Remove store instructions that store a loaded value that is known to be unmodified.
...
After this change swap in RC4 contains only 2 stores (of the swapped values).
Swift SVN r15386
2014-03-23 08:03:58 +00:00
Nadav Rotem
79c552b003
Zero -> Nullptr. NFC.
...
Swift SVN r15384
2014-03-23 07:04:14 +00:00
Nadav Rotem
8e4ff9bf10
Any instruction that invalidates loads should also invalidate stores.
...
Swift SVN r15382
2014-03-23 06:54:16 +00:00
Nadav Rotem
20c8272388
Promote partial-loads after stores.
...
Swift SVN r14217
2014-02-21 18:41:58 +00:00
Nadav Rotem
0a5f7b57a7
Change the debug string to match the ail-opt flag.
...
Swift SVN r14216
2014-02-21 18:40:35 +00:00
Michael Gottesman
fbe2ccf0d6
[sil-aa] Add in convenience methods for querying AliasAnalysis::getMemoryBehavior.
...
The methods are:
* mayWriteToMemory()
* mayReadFromMemory()
* mayReadOrWriteMemory()
* mayHaveSideEffects() [Side effects + writing to memory]
* mayHavePureSideEffects() [Only side effects, ignores writes to memory]
Swift SVN r13791
2014-02-12 00:14:29 +00:00
Michael Gottesman
8cff098f1e
Split SILCodeMotion into two passes, LoadStoreOpts and SILCodeMotion.
...
LoadStoreOpts removes duplicate loads, forwards stores to loads, and eliminates
dead stores.
Swift SVN r13789
2014-02-11 23:36:51 +00:00