Commit Graph

793 Commits

Author SHA1 Message Date
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
Erik Eckstein
db288e958b SimplifyCFG: fix a crash in debug output 2016-05-12 08:38:38 -07:00
swiftix
4eaed25a5e Merge pull request #2491 from swiftix/devirtualizer-fixes
Small fixes for the sil-devirtualizer
2016-05-11 21:35:46 -07:00
Mark Lacey
921dededad Use a bump pointer allocator in the callee set creation.
Shaves about 19% of the time from the construction of these sets. The
SmallVector size was chosen to minimize the number of dynamic
allocations we end up doing while building the stdlib. This should be a
reasonable size for most projects, too. It's a bit wasteful in space,
but the total amount of allocated space here is pretty small to begin
with.
2016-05-11 17:07:27 -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
Roman Levenstein
28f7b09c1d Add a more strict check for conversions between metatypes.
Now it is more inline with the check performed by the verifier.
2016-05-11 15:25:08 -07:00
Roman Levenstein
f200dfdc72 Addresses are always ABI compatible.
Now it is more inline with the check performed by the verifier.
2016-05-11 15:25:08 -07:00
Arnold Schwaighofer
4df87a6554 Refactor unsafeGuaranteed code into utility functions.
NFC.
2016-05-08 08:10:43 -07:00
practicalswift
c262b42ae0 [gardening] Fix recently introduced whitespace typos. (#2443) 2016-05-06 23:49:39 -07:00
eeckstein
180098ea2e Merge pull request #2436 from eeckstein/abcopt-fix
ABCOpt: we should not hoist bounds/overflow checks if the loop has mu…
2016-05-06 17:44:10 -07:00
Arnold Schwaighofer
0883a96c13 UnsafeGuaranteedPeephole: Fix obvious mistake
Caught by ASAN.
2016-05-06 15:59:48 -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
practicalswift
1a4cf40a30 [gardening] Fix recently introduced top of file headers. 2016-05-06 19:56:26 +02:00
Xin Tong
af64977121 Merge pull request #2414 from trentxintong/CString
Add 1 more iteration of release hoisting
2016-05-06 00:26:48 -07:00
Xin Tong
392a957202 Add 1 more iteration of release hoisting.
I see that we go from 24.9% of time spent in SILOptimizations in stdlib compilation
to 25.2%.

This brings back 50% of the regression for StringWithCString.

  <summary>Regression (3)</summary>

TEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP
---                                                     | ---     | ---     | ---       | ---
NSError                                                 | 255     | 296     | +16.1%    | **0.86x**
ObjectiveCBridgeStubToArrayOfNSString                   | 25087   | 27733   | +10.6%    | **0.90x**
SwiftStructuresInsertionSort                            | 4292    | 4557    | +6.2%     | **0.94x**

</details>

<details >
  <summary>Improvement (7)</summary>

TEST                                                    | OLD_MIN | NEW_MIN | DELTA (%) | SPEEDUP
---                                                     | ---     | ---     | ---       | ---
MatMul                                                  | 1135    | 1071    | -5.6%     | **1.06x**
ObjectiveCBridgeToNSArray                               | 27090   | 25566   | -5.6%     | **1.06x**
ObjectiveCBridgeFromNSArrayAnyObjectToString            | 155362  | 145067  | -6.6%     | **1.07x**
OpenClose                                               | 47      | 44      | -6.4%     | **1.07x**
StringHasSuffix                                         | 695     | 642     | -7.6%     | **1.08x**
Calculator                                              | 34      | 30      | -11.8%    | **1.13x**
StringWithCString                                       | 336135  | 164974  | -50.9%    | **2.04x**
2016-05-06 00:24:59 -07:00
eeckstein
9435633f40 Merge pull request #2398 from eeckstein/some-cfg-opts
Some simplify-cfg opts and ConditionalForwarding
2016-05-05 13:17:13 -07:00
Slava Pestov
0280ed7ec5 SIL Optimizer: Remove some dead code, NFC 2016-05-05 12:25:05 -07: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
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
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