Commit Graph

160 Commits

Author SHA1 Message Date
Stephen Lin
60cf42b38a Add helper function that will be necessary for recursively removing a group of instructions without dangling pointer issues.
Swift SVN r10376
2013-11-12 19:07:57 +00:00
Stephen Lin
eeda966a68 SILPasses: Avoid trying to processes the same instructions twice in recursivelyDeleteTriviallyDeadInstructions, in case an instruction is an operand of two instructions being deleted at once so appears in the worklist twice.
Swift SVN r10375
2013-11-12 19:07:57 +00:00
Chris Lattner
beab485db3 enhance the constant folding pass a bit to be smarter about folding
tuple-producing results (like those produced by folding overflow builtins).

Before the pass would just RAUW the apply_inst with a tuple_inst, but this
would leave around a bunch of tuple extracts.  Now we seek and destroy them.

This unblocks other transformations and allows the stdlib to shrink by another
1700 LOC.


Swift SVN r9900
2013-11-03 06:01:13 +00:00
Michael Gottesman
bdf7cbe178 [sil-combine] Initial SILCombine implementation.
This pass is a port of InstCombine from LLVM to SIL. Thus if you are familiar
with the code from InstCombine you will feel right at home.

Keep in mind that in order to help with review, this is just a skeleton with no
optimizations in it besides a simple DCE based off of isInstructionTriviallyDead
(which this patch exposes in Local.h like LLVM does) to ensure that trivial
testing of the pass can be accomplished since otherwise it would do nothing
implying that no tests could be written at all.

I additionally modified one test which no longer passed due to SILCombine
removing 1x unused metatype instruction from the standard library.

Swift SVN r9404
2013-10-16 03:10:14 +00:00
Anna Zaks
a19d7569cc Introduce Builtin.staticReport, which allows compiler diagnostic reporting.
- Introduces the Builtin
- If the first parameter evaluates to '1', the dataflow diagnostics pass produces a diagnostic.
- The Builtin gets cleaned up before IRGen, but not before SIL serialization.

This patch also removes the current, overflow warning and XFAILs one of the tests. The other test is switched to use Builtin.staticReport.

TODO:
 - Utilize the other parameters to the builtin - the Message and IsError flag.
 - Use this Builtin within the stdlib.

Swift SVN r8939
2013-10-05 00:12:23 +00:00
Anna Zaks
fe2d8d594d [SIL] Get access to LLVM intrinsic attributes.
And use them to decide if an llvm intrinsic apply instruction can be considered dead.

(This is a hack because it uses LLVM Global context. However, we already use
this approach elsewhere.)

Swift SVN r7404
2013-08-21 17:44:51 +00:00
Anna Zaks
21ce68188d [SIL] Add attributes to swift builtins, specifically, the readnone attribute.
Use the attribute when deciding if a call to a builtin can be eliminated as dead.

Swift SVN r7391
2013-08-21 00:02:25 +00:00
Anna Zaks
2f05d5c4df [SIL] Move GenFunc to use getBuiltinInfo and getIntrinsicInfo.
Make the functions support a wider range of builtins and store types to make
it possible.

This is an optimization - the cached ID will be used for builtin identification,
instead of retrieval of the string name and using it as the key.

Swift SVN r7390
2013-08-21 00:02:22 +00:00
Anna Zaks
ff3143a370 [analyzer] Eagerly DCE in ConstPropagation; teach about side-effect-free intrinsics.
It would be good if LLVM provided mechanism to find out which intrinsics do not have side effects.
Currently, just ensure that everything we might constant fold is in that category.

Swift SVN r7312
2013-08-17 00:41:37 +00:00
Anna Zaks
be6feaa82c [SIL] Fixup commit r7248.
I forgot to add in the new files!

Swift SVN r7251
2013-08-15 01:21:57 +00:00