Roman Levenstein
1494d155c6
Don't sink open_existential instructions.
...
We don't sink open_existential_* instructions, because there may be some instructions depending on them, e.g. ametatype_inst, etc. But this kind of dependency cannot be expressed in SIL as a use yet. As a result, sinking open_existential may break the invariant that these instructions should dominate their uses.
2016-05-12 12:05:49 -07:00
Roman Levenstein
2eff3a1e9b
Do not hoist metatype instructions with opened existentials.
...
Hoisting this instructions may break the invariant that each such instruction should be dominated by an open_existential instruction.
2016-05-12 12:05:20 -07:00
Roman Levenstein
73b6a38edc
[sil-devirtualizer] Do not perform a speculative devirtualization for no-opt callees.
2016-05-11 16:28:50 -07:00
Ted Kremenek
942e524285
Revert "SE-0036: Requiring Leading Dot Prefixes for Enum Instance Member Implementations" ( #2477 )
2016-05-11 11:02:37 -07:00
Jordan Rose
14a7334aef
Merge pull request #2224 : SE-0036: Requiring Leading Dot Prefixes for Enum Instance Member Implementations
...
from @ahoppen
2016-05-10 19:58:09 -07:00
Joe Groff
01f98fa4dc
AST: More robust rewrite of ProtocolConformance::getInheritedConformance.
...
A recursive implementation is cleaner, and more cleanly preserves class inheritance and generic specialization through the operation to get the refined protocol conformance. Fixes SR-1323.
2016-05-10 10:41:16 -07:00
Doug Gregor
852686b225
Manually add _unconditionallyBridgeFromObjectiveC throughout test cases. NFC
2016-05-09 00:28:56 -07:00
Alex Hoppen
0e8c69c56f
[SE-0036]: Requiring Leading Dot Prefixes for Enum Instance Member Implementations
2016-05-07 22:39:26 +02:00
Chris Lattner
c990fc1595
Add some parens to function types in sil tests. NFC.
2016-05-06 21:07:08 -07:00
Erik Eckstein
0c97cfa6a8
ABCOpt: we should not hoist bounds/overflow checks if the loop has multiple exit edges.
...
fixes rdar://problem/26126534
2016-05-06 15:07:17 -07:00
practicalswift
68b148cfb1
[gardening] Fix recently introduced typos.
2016-05-06 20:31:38 +02:00
Erik Eckstein
d6e86b7c4b
Add a new SIL pass to move conditions closer to switch_enum to enable jump threading.
...
For details see the comment in ConditionForwarding.cpp.
This optimization pass helps to optimize loops iterating over closed ranges, e.g. for i in 0...n { }
2016-05-05 10:34:08 -07:00
Erik Eckstein
b3e81a084f
SimplifyCFG: unpack enum arguments.
...
As we already do for structs and tuples.
If all incoming values are enum instructions and the only use is an unchecked_enum_data, then we can replace the argument with the enum payload itself.
2016-05-05 10:34:08 -07:00
Xin Tong
be029e01ea
Merge pull request #2386 from trentxintong/DSE
...
Fix a bug in dead store elimination.
2016-05-03 20:22:38 -07:00
Xin Tong
15df3016e0
Make smaller stores generated for stores that are partly dead deterministic
...
We do not have problem right now because the we only do partial dead store when
we end up generating only 1 single smaller store.
2016-05-03 17:53:11 -07:00
Xin Tong
c4eda1abbb
Fix a bug in dead store elimination. Make sure we consider SILargument when we
...
invalidate base.
Also small change on how BlockState is allocated.
2016-05-03 16:55:39 -07:00
Arnold Schwaighofer
98e3253bbd
UnsafeGuaranteed Peephole: Handle a release after the UnsafeGuaranteedEnd instruction
...
We seem to emit this pattern now.
2016-04-30 14:17:38 -07:00
Erik Eckstein
53bb3e8ea1
SimplifyCFG: improve switch_enum simplification.
...
Figure out the enum case if an enum value is dominated by a switch_enum and use this info for a subsequent switch_enum to be simplified.
This change partly recovers the ClosedRange-regression.
rdar://problem/25933907
2016-04-29 10:57:01 -07:00
Erik Eckstein
16e600a6a1
StackPromotion: fix a bug which could place the deallocation inside a loop.
2016-04-29 08:55:13 -07:00
Arnold Schwaighofer
c65acf0b6f
ABCOpts: Rewrite the code that handles known comparisons to be more general and handle more cases
...
rdar://25965806
2016-04-29 07:55:38 -07:00
Roman Levenstein
7a9b05babf
[sil-devirtualizer] Fix some bugs in the devirtualizer.
...
- Don't crash if a class_method instruction could not be devirtualized.
- Improve devirtualization of methods with generic parameters and using dependent types.
- Fix a bug in isBindableToSuperclassOf, uncovered while fixing the original bug reported in SR-1206.
This bug could lead in certain cases to invocations of a wrong method from the base class, instead
of using a method from a derived class.
rdar://25891588 and SR-1206
2016-04-28 22:40:47 -07:00
Dmitri Gribenko
daea3f6693
Merge pull request #2108 from apple/swift-3-indexing-model
...
Implement SE-0065 "A New Model for Collections and Indices"
2016-04-27 11:11:26 -07:00
Arnold Schwaighofer
aec5001616
ABCOpts: Check for another pattern the compiler will generate with the indexing changes
...
rdar://25940018
2016-04-27 10:51:49 -07:00
Arnold Schwaighofer
010cd2684a
ABCOpts: Remove superflous range checks that fall within the range of the induction variable
...
rdar://25940018
2016-04-27 09:04:00 -07:00
Dmitri Gribenko
fc9c1f6a61
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-26 10:20:31 -07:00
Xin Tong
57e2bdb123
Revert "Simplify function signature optimization"
2016-04-25 16:33:17 -07:00
Xin Tong
633ca2e92b
Simplify function signature optimzation.
...
Several functionalities have been added to FSO over time and the logic has become
muddled.
We were always looking at a static image of the SIL and try to reason about what kind of
function signature related optimizations we can do.
This can easily lead to muddled logic. e.g. we need to consider 2 different function
signature optimizations together instead of independently.
Split 1 single function to do all sorts of different analyses in FSO into several
small transformations, each of which does a specific job. After every analysis, we produce
a new function and eventually we collapse all intermediate thunks to in a single thunk.
With this change, it will be easier to implement function signature optimization as now
we can do them independently now.
Minimal modifications to the test cases.
2016-04-25 15:28:51 -07:00
Dmitri Gribenko
b75d2b9df4
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-25 13:50:09 -07:00
Erik Eckstein
3945539e71
DeadObjectElimination: use the debug location of the array store instead of the (unknown) instruction of the lifetime frontier.
...
The location of the lifetimefrontier can be a return-location which is invalid for the generated release instruction.
2016-04-25 11:38:49 -07:00
Mark Lacey
e2cbc5b1c3
Relax verification of dealloc_stack.
...
Allow it to have undef as an operand.
This can happen when NoReturnFolding does RAUW for the instructions that
come after a @noreturn function, replacing the uses of those
instructions in blocks that are unreachable. These instructions end up
getting deleted during diagnose unreachable when we remove the
unreachable code.
Fixes SR-967 / rdar://problem/25882880.
2016-04-24 11:10:01 -07:00
Dmitri Gribenko
0984f81a50
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-22 18:56:35 -07:00
Erik Eckstein
7348e48727
Don't stack promote allocations in no-return blocks.
...
Such allocations may missing their final release, which confuses stack-promotion.
Fixes rdar://problem/25842757.
2016-04-21 12:08:58 -07:00
eeckstein
05459a3c86
Merge pull request #2254 from eeckstein/vla-fix
...
ValueLifetimeAnalysis: fix the case if the last use of the value is a terminator instruction
2016-04-21 08:11:14 -07:00
Jordan Rose
e1126b36e5
Prespecialization: reduce the strength of an assertion.
...
If we find a specialization within the current module, it's okay if it
has a body. This can come up if we compile something with optimizations
and then compile the resulting SIL (or SIB) without optimizations.
2016-04-20 16:15:12 -07:00
Erik Eckstein
c52b933bdb
ValueLifetimeAnalysis: fix the case if the last use of the value is a terminator instruction.
...
This bug let the ClosureSpecializer insert a release after a try_apply in the same basic block.
Fixes SR-1252
2016-04-20 13:02:06 -07:00
Xin Tong
7d26a47200
Fix a non-deterministic retain/release insertion in RRCodeMotion
2016-04-19 22:14:38 -07:00
Xin Tong
c2e8c81227
Disable retain release code motion. There is some nondeterminism in
...
how we insert the new retain release instructions
2016-04-19 21:42:59 -07:00
Xin Tong
51b1c0bc68
Implement retain, release code motion.
...
Iterative data flow retain sinking and release hoisting.
This allows us to sink retains and hoist releases across harmless loops. which is
an improvement on the SILCodeMotion retain sinking and release hoisting.
It also separates the duty of moving retain and release with the duty of eliminating them
in ASO.
This should eventually replace RR code motion in SILcodemotion and insertion point
in ARCsequence opts (ASO).
This is the performance difference i get with retain sinking and release hoisting.
After disabling retain release code motion in ASO and SILCodeMotion. we can start to take
those code out once this lands.
I see that we go from 24.5% of time spent in SILOptimizations w.r.t. the whole stdlib compilation
to 25.1%.
Improvement is better (i.e. retain sinking and hoisting releases result in performance gain).
<details open>
<summary>Regression (7)</summary>
TEST | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP
--- | --- | --- | --- | ---
SetIsSubsetOf | 441 | 510 | +15.7% | **0.86x**
SetIntersect | 1041 | 1197 | +15.0% | **0.87x**
BenchLangCallingCFunction | 184 | 211 | +14.7% | **0.87x**
Sim2DArray | 326 | 372 | +14.1% | **0.88x**
SetIsSubsetOf_OfObjects | 498 | 567 | +13.9% | **0.88x**
GeekbenchGEMM | 945 | 1022 | +8.2% | **0.92x**
COWTree | 3839 | 4181 | +8.9% | **0.92x(?)**
</details>
<details >
<summary>Improvement (31)</summary>
TEST | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP
--- | --- | --- | --- | ---
ObjectiveCBridgeFromNSDictionaryAnyObjectToString | 174526 | 165392 | -5.2% | **1.06x**
RGBHistogram | 3128 | 2957 | -5.5% | **1.06x**
ObjectiveCBridgeToNSDictionary | 16510 | 15494 | -6.2% | **1.07x**
LuhnAlgoLazy | 2294 | 2120 | -7.6% | **1.08x**
DictionarySwapOfObjects | 6477 | 5994 | -7.5% | **1.08x**
StringRemoveDupes | 1610 | 1485 | -7.8% | **1.08x**
ObjectiveCBridgeFromNSSetAnyObjectToString | 159358 | 147824 | -7.2% | **1.08x**
ObjectiveCBridgeToNSSet | 16191 | 14924 | -7.8% | **1.08x**
DictionaryHashableClass | 1839 | 1704 | -7.3% | **1.08x**
DictionaryLiteral | 2906 | 2678 | -7.8% | **1.09x(?)**
StringUtilsUnderscoreCase | 10031 | 9187 | -8.4% | **1.09x**
LuhnAlgoEager | 2320 | 2113 | -8.9% | **1.10x**
ObjectiveCBridgeFromNSSetAnyObjectToStringForced | 99553 | 90348 | -9.2% | **1.10x**
RIPEMD | 3327 | 3009 | -9.6% | **1.11x**
Combos | 595 | 538 | -9.6% | **1.11x**
Roman | 10 | 9 | -10.0% | **1.11x**
StringUtilsCamelCase | 10783 | 9646 | -10.5% | **1.12x**
SetIntersect_OfObjects | 2511 | 2182 | -13.1% | **1.15x**
SwiftStructuresTrie | 28331 | 24339 | -14.1% | **1.16x**
Dictionary2OfObjects | 3748 | 3115 | -16.9% | **1.20x**
DictionaryOfObjects | 2473 | 2050 | -17.1% | **1.21x**
Dictionary | 894 | 737 | -17.6% | **1.21x**
Dictionary2 | 2268 | 1859 | -18.0% | **1.22x**
StringIteration | 8027 | 6344 | -21.0% | **1.27x**
Phonebook | 8207 | 6436 | -21.6% | **1.28x**
BenchLangArray | 119 | 91 | -23.5% | **1.31x**
LinkedList | 8267 | 6297 | -23.8% | **1.31x**
StrToInt | 5585 | 4180 | -25.2% | **1.34x**
Dictionary3OfObjects | 1122 | 831 | -25.9% | **1.35x**
Dictionary3 | 731 | 515 | -29.6% | **1.42x**
SuperChars | 513353 | 258735 | -49.6% | **1.98x**
2016-04-18 15:39:17 -07:00
Roman Levenstein
9596c6d4dc
Adjust mangled names in the failing pre-specialization test. They now contain a 'q' symbol.
2016-04-17 21:57:11 -07:00
Dmitri Gribenko
2b35fea059
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-16 00:30:12 -07:00
Chris Lattner
8746676616
Move @noescape and @autoclosure to their new places in various tests, NFC.
2016-04-15 16:05:35 -07:00
Dmitri Gribenko
cfea1a3f58
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-14 17:00:46 -07:00
Dmitri Gribenko
c52787e900
Merge commit '9cdbec13eee72feccfc5f8b987882a8c52e8107b' into swift-3-indexing-model
2016-04-14 16:23:53 -07:00
Dmitri Gribenko
4c6865ff5a
Merge remote-tracking branch 'origin/swift-3-indexing-model' into swift-3-indexing-model
2016-04-14 15:11:25 -07:00
Dmitri Gribenko
3e708a9328
Merge commit '8e292daec1bc790c96b5ee39b8d55dadcac6ce1b' into swift-3-indexing-model
2016-04-14 15:10:26 -07:00
Andrew Trick
493e5c30be
Update SIL test case for the removed conformance of SignedInteger to Distance
2016-04-14 14:27:32 -07:00
Dmitri Gribenko
735f1287b0
Merge remote-tracking branch 'origin/swift-3-indexing-model' into swift-3-indexing-model
2016-04-14 14:10:27 -07:00
Dmitri Gribenko
10697f939f
Merge commit '510f29abf77e202780c11d5f6c7449313c819030' into swift-3-indexing-model
2016-04-14 13:45:27 -07:00
Xin Tong
d84de12943
Revert "Change FSO explosion heuristic"
...
This reverts commit fa09c6b71d .
Broke Linux build. And also PR "please benchmark" does not seem to catch it.
2016-04-14 11:05:00 -07:00
Xin Tong
fa09c6b71d
Change FSO explosion heuristic
...
If we can not find the epilogue releases for all the fields with
reference sematics, but we found for some fields. Explode the argument.
I do not see a performance improvement with this change
rdar://25451364
2016-04-13 19:40:53 -07:00