This repository was archived by the owner on Jul 10, 2021. It is now read-only.
Enable experimental Link-Time Optimization support#44
Open
feilen wants to merge 3 commits intojherico:masterfrom
feilen:master
Open
Enable experimental Link-Time Optimization support#44feilen wants to merge 3 commits intojherico:masterfrom feilen:master
feilen wants to merge 3 commits intojherico:masterfrom
feilen:master
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This lets the SDK access GCC's Link Time optimization support. It uses the same patterns that Dolphin uses to enable the same support.
Link Time Optimization allows GCC to look over multiple source files to create optimizations, where in most cases it's only able to optimize on a per-function basis, without exactly knowing what impact this will have on the overall code.
When compiled with this, my libovr.so drops from 950+KB to 861KB and has a noticeable reduction in judder in certain apps. Some binaries are able to get up to 34% speed increases with it enabled.
The only other build option I've considered adding would be -ftree-vectorize. That would allow GCC to take non-interdependent loops and generate SSE SIMD equivalents. (Considering the OculusSDK generally operates on a per-eye basis independently in loops, this would most likely give a considerable boost)
It's left as an option so that it can be left up to the discretion of the developer who imports it.