- User Since
- May 4 2017, 2:45 PM (20 w, 2 d)
Sat, Sep 2
Aug 25 2017
Aug 23 2017
Updated according to comments
Aug 21 2017
Continuation of: D36910
I added bitcode read/write support and updated all the tests so they use the new bitcode. I was planning on waiting for a bit more feedback on this patch (and updating mine with the requested changes), but I can post mine whenever you want to move the discussion to llvm-commits.
Aug 19 2017
Aug 18 2017
Corrected norecurse propagation and insert norecurse into IR.
Aug 17 2017
Will add tests next.
Create dummy root for index callgraph entry point.
Aug 16 2017
Maybe add an scc dumper facility for the module summary graph, which creates an scc_iterator from the module summary and just dumps the nodes in each scc, that can be checked using a Lit based test
I tried implementing a search to find the root nodes in the Index callgraph. But there can be multiple root nodes in the callgraph and we can only return one node from GraphTraits<ModuleSummaryIndex *>::getEntry. Since I didn't know how to pick the correct root, I didn't go with that solution. Is there any information I can find in the Index that indicates the entry point?
Aug 15 2017
oops - forgot a cast
I don't think I can use a topological sort in this case since the FunctionSummary callgraph isn't necessarily a DAG, so if there's a cycle it would make the sort useless.
Ah, I think I realized what the entryNode should be: I should topologically sort the nodes in the ModuleSummaryIndex and take the first FunctionSummary. Right now the entry node is arbitrary.
For some reason, the scc_iterator isn't visiting the whole graph, and only visits the children of the entryNode. How should I move across all SCCs in the Index?
removed fsummary_iterator since it's not needed for the scc_iterator
Aug 8 2017
Added GraphTraits for ModuleSummaryIndex
simplify code by using mapped_iterator rather than custom implementation.
Aug 7 2017
How should I test this and ensure it's working properly?
Make the entry node the function itself.
Aug 4 2017
Since this patch depends on D36233, I'm diffing against it to show minimal changes.
Diff against D36233 rather than master.
Aug 3 2017
Check for returnDoesNotAlias rather than NoAlias.
Note the function is dumped with "noalias", but doesn't have the NoAlias attribute. However, the return is marked no alias. And looking at the FunctionAttrs.cpp NoAlias propagation (addNoAliasAttrs), it is this (the returnDoesNotAlias) that is being propagated. So perhaps that's what you need to be checking. Probably change the name of the boolean flag in the index accordingly.
Bumped bitcode version, removed memory access field, updated tests.
Aug 2 2017
Currently, two tests are failing: ThinLTO/X86/autoupgrade.ll and ThinLTO/X86/drop-debug-info.ll, since they have blobs with old versions of the bitcode. Should I update those as well?
Jul 31 2017
Will be split into two patches.
Patch is being split into multiple dependent patches.
Jul 29 2017
Jul 22 2017
Jul 21 2017
Updated as per comments.
Jul 20 2017
Just a note: this isn't fully completed yet. I still have to add tests and do some verification, but I wanted to make it's on the right track.
refactored code and removed unnecessary SCCNodes
- added memory access info to index callgraph edges
- renamed functions
Jul 19 2017
Jul 17 2017
Jun 27 2017
Added names to dump-summary in llvm-lto2.
Jun 26 2017
Jun 20 2017
Updated GlobalValue loop.
Added test, further cleanup.
Jun 19 2017
Jun 16 2017
Fixes according to comments.
Jun 15 2017
Jun 13 2017
Jun 12 2017
Use FileCheck rather than egrep
Jun 10 2017
Removed extraneous formatting.
Jun 9 2017
Addressed some updates from the comments.