Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

O1 fixes. #1400

Merged
merged 1 commit into from
Sep 24, 2024
Merged

O1 fixes. #1400

merged 1 commit into from
Sep 24, 2024

Conversation

vext01
Copy link
Contributor

@vext01 vext01 commented Sep 20, 2024

Requires a compiler change that will come soon.

(Pre-apologies that this isn't all nicely bundled up into self-contained commits -- it's been quite a journey and picking it apart now doesn't seem worthwhile)

This change is a collection of fixes required for us to enable the -O1 AOT post-link pipeline in Yk. This is slightly different from just passing -O1, but it's a big step in the right direction.

Probably the most significant change is the transition from llvm.experimental.stackamp to llvm.experimental.patchpoint for the control point. This is needed because we were tracking live values at a slightly incorrect point in time. We needed the register state immediately before the call to _ykrt_control_point, but including any register shuffling/spills required due to the call ABI.

The lua_array_len.c test was removed because we now run enough optimisations for LLVM to statically detect UB in it. Hardly surprising since this was derived using cvise. We can't handle poison values in the JIT and even if we could, I doubt the test is a good one any more.

Gives between about 12% and 18% speedup on the 4 benchmarks I tried.

@vext01 vext01 mentioned this pull request Sep 20, 2024
@vext01
Copy link
Contributor Author

vext01 commented Sep 20, 2024

12% to 18%

Raw numbers below.

(The columns don't line up. I know. That's been fixed in a newer rebench here]

Before

----------------------------------------------------------------------------------------------
  Benchmark   Executor   Suite   Extra   Core      Size   Var   #Samples   Mean (ms)
----------------------------------------------------------------------------------------------
  Json        YkLua      awfy      100   default                                  10    4969
  Richards    YkLua      awfy      100   default                                  10   22313
  DeltaBlue   YkLua      awfy    12000   default                                  10    3213
  CD          YkLua      awfy      250   default                                  10   12209
----------------------------------------------------------------------------------------------

After

----------------------------------------------------------------------------------------------
  Benchmark   Executor   Suite   Extra   Core      Size   Var   #Samples   Mean (ms)
----------------------------------------------------------------------------------------------
  Json        YkLua      awfy      100   default                                  10    4152
  Richards    YkLua      awfy      100   default                                  10   18608
  DeltaBlue   YkLua      awfy    12000   default                                  10    2804
  CD          YkLua      awfy      250   default                                  10   10036
----------------------------------------------------------------------------------------------

bin/yk-config Show resolved Hide resolved
@ltratt
Copy link
Contributor

ltratt commented Sep 23, 2024

@vext01 Please squash and rebase against the ykllvm master commit.

@vext01
Copy link
Contributor Author

vext01 commented Sep 23, 2024

llvm submodule synced/rebased in.

@ltratt ltratt added this pull request to the merge queue Sep 23, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Sep 23, 2024
@ltratt
Copy link
Contributor

ltratt commented Sep 24, 2024

Please force push an update referencing the new ykllvm commit.

This change is a collection of fixes required for us to enable the -O1
AOT post-link pipeline in Yk. This is slightly different from just
passing -O1, but it's a big step in the right direction.

Probably the most significant change is the transition from
llvm.experimental.stackamp to llvm.experimental.patchpoint for the
control point. This is needed because we were tracking live values at a
slightly incorrect point in time. We needed the register state
immediately before the call to _ykrt_control_point, but *including* any
register shuffling/spills required due to the call ABI.

The lua_array_len.c test was removed because we now run enough
optimisations for LLVM to statically detect UB in it. Hardly surprising
since this was derived using cvise. We can't handle poison values in the
JIT and even if we could, I doubt the test is a good one any more.

Co-authored-by: Lukas Diekmann <[email protected]>
@vext01
Copy link
Contributor Author

vext01 commented Sep 24, 2024

done

@ltratt ltratt added this pull request to the merge queue Sep 24, 2024
Merged via the queue into ykjit:master with commit 36ce8c6 Sep 24, 2024
2 checks passed
@vext01 vext01 deleted the o1 branch September 24, 2024 15:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants