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
Erik Eckstein
380ded8151
SimplifyCFG: debug dump the function name at the beginning of the pass
2016-05-05 10:34:08 -07:00
Erik Eckstein
f24e23660d
SimplifyCFG: don't jump thread if the condition is an undef.
...
Uses of undef can be in a different function. This may result in modifying another function.
A test is included in a following commit.
2016-05-05 10:34:08 -07:00
Erik Eckstein
512cc62e43
SimplifyCFG: recalculate loop header information if a loop header block is jump threaded.
2016-05-05 10:34:08 -07:00
Erik Eckstein
9577aa698a
fix comment
2016-05-05 10:34:08 -07:00
Erik Eckstein
7f71e4c6fe
SimplifyCFG: improve debug logging
2016-05-05 10:34:08 -07:00
Xin Tong
6d6a82f44b
Remove code motion in ASO. This code has been disabled for sometime.
...
As promised, we separate the duty of moving retain release pairs with the
task of removing them. Now the task of moving retains and releases are in
Retain Release Code Motion committed in 51b1c0bc68 .
2016-05-04 17:23:02 -07:00
Xin Tong
ccdbc329af
Merge pull request #2389 from trentxintong/DSE
...
Update comments and remove dead functions in DSE
2016-05-04 16:26:05 -07:00
Xin Tong
a6082ae8f1
Update comments and remove dead functions in DSE
2016-05-03 21:23:25 -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
practicalswift
540cb751ac
[gardening] Fix recently introduced typo: "adavances" → "advances"
...
[gardening] Fix recently introduced typo: "compie" → "compile"
[gardening] Fix recently introduced typo: "consise" → "concise"
[gardening] Fix recently introduced typo: "dengerate" → "degenerate"
[gardening] Fix recently introduced typo: "encodeded" → "encoded"
[gardening] Fix recently introduced typo: "equvalent" → "equivalent"
[gardening] Fix recently introduced typo: "guaranted" → "guaranteed"
[gardening] Fix recently introduced typo: "overridde" → "override"
[gardening] Fix recently introduced typo: "subsquence" → "subsequence"
[gardening] Fix recently introduced typo: "substraction" → "subtraction"
[gardening] Fix recently introduced typo: "whiltespace" → "whitespace"
2016-05-01 20:07:18 +02: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
swiftix
3fe16591c6
Merge pull request #2338 from swiftix/devirtualizer-bugfix
...
[sil-devirtualizer] Fix some bugs in the devirtualizer.
2016-04-29 00:21:29 -07:00
swift-ci
55672e0089
Merge pull request #2321 from xbuzz/master
2016-04-28 23:05:30 -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
Chris Williams
0c6759ebad
Correct misspelling of method and references.
2016-04-27 00:09:10 -04: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
practicalswift
9a078b54ef
[gardening] Fix recently introduced typo: "a executable" → "an executable"
...
[gardening] Fix recently introduced typo: "a offset" → "an offset"
[gardening] Fix recently introduced typo: "accessiblity" → "accessibility"
[gardening] Fix recently introduced typo: "cant" → "can't"
[gardening] Fix recently introduced typo: "inteference" → "interference"
[gardening] Fix recently introduced typo: "unsatified" → "unsatisfied"
[gardening] Remove accidental space.
2016-04-24 22:11:59 +02:00
Dmitri Gribenko
0984f81a50
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-22 18:56:35 -07:00
Slava Pestov
2e52338d7c
SIL: Rename long form of getOrCreateFunction() to createFunction(), NFC
...
This made call sites confusing to read because it doesn't actually
check if the function already exists.
Also fix some minor formatting issues. This came up while I was working
on a fix for a bug that turned out to not be a bug.
2016-04-21 17:58:10 -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
practicalswift
abacf7e73d
Merge pull request #2243 from practicalswift/gardening-20160419
...
[gardening] Typos, PEP-8 and unused code.
2016-04-20 07:30:59 +02: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
b27697eff1
Merge pull request #2246 from trentxintong/CodeMotion
...
Rename mayUseValue to mayHaveSymmetricInteference
2016-04-19 19:40:33 -07:00
Slava Pestov
41a9543648
SIL Optimizer: Fix pre-specialization [fragile] mismatch assert
...
Applying this patch triggered an assert while building libswiftOnoneSupport:
--- a/lib/SILOptimizer/PassManager/Passes.cpp
+++ b/lib/SILOptimizer/PassManager/Passes.cpp
@@ -283,6 +283,9 @@ void swift::runSILOptimizationPasses(SILModule &Module) {
PM.setStageName("HighLevel+EarlyLoopOpt");
// FIXME: update this to be a function pass.
PM.addEagerSpecializer();
+
+ AddSimplifyCFGSILCombine(PM);
+
AddSSAPasses(PM, OptimizationLevelKind::HighLevel);
AddHighLevelLoopOptPasses(PM);
PM.runOneIteration();
I don't have a reduced testcase, but presumably Erik will commit the above
change soon.
Fixes <rdar://problem/25646947>.
2016-04-19 17:23:48 -07:00
Xin Tong
49f1c66d7b
Rename mayUseValue to mayHaveSymmetricInteference
2016-04-19 15:23:45 -07:00
practicalswift
092007bf12
[gardening] Fix recently introduced typos.
2016-04-19 21:48:05 +02:00
Xin Tong
3824a9479e
Merge pull request #2064 from trentxintong/CodeMotion
...
implement retain release code motion.
2016-04-18 18:16:50 -07:00
swift-ci
48e0aac9a6
Merge pull request #2234 from trentxintong/IP
2016-04-18 16:41:10 -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
Xin Tong
bfc9683b49
Use a SmallPtrSet instead of a DenseSet. More memory efficient
2016-04-18 14:54:39 -07:00
Dmitri Gribenko
fc8d62dfbb
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-18 14:40:06 -07:00
Mark Lacey
0bc63c8ce8
Reorder and remove some passes to reduce compile time.
...
I'm measuring around a 1% reduciton in compile time for the stdlib, with
a handful of improvements on the benchmarks when compiled at -O, and one
small regression on one benchmark.
2016-04-17 23:04:28 -07:00
Dmitri Gribenko
cfea1a3f58
Merge remote-tracking branch 'origin/master' into swift-3-indexing-model
2016-04-14 17:00:46 -07:00