Commits
Arnold Schwaighofer committed f94376f926f
[CopyForwarding] Handle single definition source take copy forwarding
This handles the case were we copy a single definition "%src" live range that is
destroyed imediately. The destination address is known to be initialized by only
this copy or by writes dominated by this copy.
For example:
foo(@in Protocol) {
bb(%src: $*Protocol)
%dst = alloc_stack Protocol
copy_addr [take] %src, [initialization] %dst#1
... [use %dst#1]
}
=>
foo(@in Protocol) {
bb(%src: $*Protocol)
... [use %src#1]
}
O improvments > 10% (time before/after)
DollarMap 1.13226
DollarReduce 1.11044
JSONHelperDeserialize 1.1365
StringWalk 1.13523
SwiftStructuresLinkedList 2.1201
SwiftStructuresQueue 1.86783
SwiftStructuresStack 1.22642
O regression:
SwiftStructuresBubbleSort 0.912005
Onone improvements > 10% (time before/after)
Dictionary 1.25214
Dictionary2 1.28772
Dictionary3 1.25364
DictionaryLiteral 1.12717
DictionaryRemove 1.14766
DictionarySwap 1.16806
DollarMap 1.14829
DollarReduce 1.11194
Forest 1.15122
Histogram 1.15321
JSONHelperDeserialize 1.14257
Prims 1.25893
RGBHistogram 1.11035
Richards 1.14413
StrSplitter 1.13805
SwiftStructuresGraphBFS 1.40441
SwiftStructuresLinkedList 1.60171
SwiftStructuresQueue 1.38401
SwiftStructuresStack 1.17395
TwoSum 1.14819
rdar://19851003
Swift SVN r25431