Граф коммитов

69389 Коммитов

Автор SHA1 Сообщение Дата
Noah Gibbs be06112d48 Fix changes from rebase 2021-10-20 18:19:42 -04:00
Alan Wu f36a5a98c0 style: line break before "else" 2021-10-20 18:19:41 -04:00
Alan Wu ec4998bd69 style: switch statements indent
Case labels get half an indent and the opening brace is on the same line
as "switch".
2021-10-20 18:19:41 -04:00
Alan Wu a10cf74e5c style: align pointer "*" to the right 2021-10-20 18:19:41 -04:00
John Hawthorn 5b68d14c2f Add optimized Thread.current 2021-10-20 18:19:41 -04:00
Alan Wu 5c15850ea6 Use jit_guard_known_klass() for hashes in opt_aref
The old heap object check is not as efficient as the one in
jit_guard_known_klass(). Also, the old code saves cfp->sp after popping
the operands off the stack, which might cause the operands to be not
marked by the GC in some circumstances.
2021-10-20 18:19:41 -04:00
Alan Wu 9dce2d5132 Also do String#str 2021-10-20 18:19:41 -04:00
Alan Wu 1a5109cb5f Comment edits and moving functions around in the file 2021-10-20 18:19:41 -04:00
Alan Wu a09adac2d7 Add specialization for String#to_s on plain strings
When calling "to_s" on an instance of String, the method simply returns
self. In this situation most of the work comes from setting up the
method call. It turns out that both railsbench and liquid-render do this
a lot.

When generating code for opt_send_without_block, we already generate a
known class guard, so we can detect when the receiver is a String
instance. Since gen_send_cfunc() is also used for gen_invokesuper(), and
gen_invokesuper() doesn't generate a known class guard, a new nullable
parameter for specialized codegen function is added.

Closes GH-245
2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert 79015926eb Try to get getblockparamproxy to support level > 0 2021-10-20 18:19:41 -04:00
Alan Wu 8edb29e5a0 Reconstruct interpreter state before calling rb_ivar_get()
It could raise ractor exceptions. The included test didn't run properly
before this change.
2021-10-20 18:19:41 -04:00
Alan Wu d0a213b30d Remove a memory load in gen_send_iseq
Instead of loading from meory for REG_SP, do a register rename instead.
It's cheaper.
2021-10-20 18:19:41 -04:00
Alan Wu 0a108601ef Add counters for version invalidation reasons
I noticed that there were two st_table iterators that do exactly the
same thing so I merged them into one.
2021-10-20 18:19:41 -04:00
Noah Gibbs e48fc07d11 Fix counter names 2021-10-20 18:19:41 -04:00
Noah Gibbs 7704a6990a Fix typo in comment 2021-10-20 18:19:41 -04:00
Noah Gibbs a0790e6335 Break up callsite_not_simple into multiple cases. 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert 0c1aa17556 Remove a few more uses of the global cb/ocb 2021-10-20 18:19:41 -04:00
Alan Wu 78b5e95e41 Add a slowpath for opt_getinlinecache
Before this change, when we encounter a constant cache that is specific
to a lexical scope, we unconditionally exit. This change falls back to
the interpreter's cache in this situation.

This should help constant expressions in `class << self`, which is popular
at Shopify due to the style guide.

This change relies on the cache being warm while compiling to detect the
need for checking the lexical scope for simplicity.
2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert f1eb48cb23 Step 2 to remove the global cb/ocb objects. 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert c55d4cafc2 Pass the global cb through codegen functions 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert 0385ca2e97 Try to break the code page refactoring into smaller steps 2021-10-20 18:19:41 -04:00
Alan Wu c46bda6f19 Fix excessive invalidation for opt_getinlinecache
YJIT expects the VM to invalidate opt_getinlinecache when updating the
constant cache, and the invalidation used to happen even when YJIT can't
use the cached value.

Once the first invalidation happens, the block for opt_getinlinecache
becomes a stub. When the stub is hit, YJIT fails to compile the
instruction as the cache is not usable. The stub becomes a block that
exits for opt_getinlinecache which can be invalidated again. Some
workloads that bust the interpreter's constant cache can create an
invalidation loop with this behavior.

Check if the cache is usable become doing invalidation to fix this
problem.

In the test harness, evaluate the test script in a lambda instead of a
proc so `return` doesn't return out of the harness.
2021-10-20 18:19:41 -04:00
Alan Wu 6ef1609fab Correct margin for stack overflow test
In vm_push_frame(), the stack overflow test is done against a
decremented cfp. YJIT wasn't accounting for that in its stack overflow
tests.
2021-10-20 18:19:41 -04:00
John Hawthorn 7482744e04 Add jit_obj_info_dump 2021-10-20 18:19:41 -04:00
John Hawthorn 561882e96e Add comment explaining argc + 2 2021-10-20 18:19:41 -04:00
John Hawthorn 9951a9a8ec Implement invokebuiltin 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert 6055078b24 Update README.md 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert e04c3af522 Update README.md 2021-10-20 18:19:41 -04:00
John Hawthorn 5506f2761f Add test for setlocal 2021-10-20 18:19:41 -04:00
John Hawthorn 82f60df5aa Implement generic setlocal 2021-10-20 18:19:41 -04:00
John Hawthorn 90de2dc703 Extract gen_get_ep 2021-10-20 18:19:41 -04:00
John Hawthorn 2ff26b9ec2 Fix opt_aset comptime_key check 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert a6cf515e6a Rearrange stats printout for consistency 2021-10-20 18:19:41 -04:00
Alan Wu 82405ac48a Add counters for tracking invalidations 2021-10-20 18:19:41 -04:00
Alan Wu 1f09eb66e6 Expand tabs 2021-10-20 18:19:41 -04:00
Maxime Chevalier-Boisvert 0ad9d1fa48 Update yjit_codegen.c 2021-10-20 18:19:41 -04:00
John Hawthorn 5e37f280d1 Remove vm_opt_aset 2021-10-20 18:19:41 -04:00
John Hawthorn ba9d01b3cf Specialize based on types of opt_aset 2021-10-20 18:19:41 -04:00
Alan Wu 121d8f4727 Compile out declaration for runtime stats on non stats builds
Checked on default build, RUBY_DEBUG build, and YJIT_STATS build.
2021-10-20 18:19:41 -04:00
Alan Wu a71590e681 Don't store cfp->pc when doing iseq calls
We set it before calling routines and when we are exiting.
2021-10-20 18:19:41 -04:00
Alan Wu 1f6641681b No need to do ec->cfp = reg_cfp on exits
It's already up to date. We set it when we do iseq calls and it's set
properly on entry. If it's not set properly exceptions wouldn't work.
2021-10-20 18:19:40 -04:00
Maxime Chevalier-Boisvert 9fff8fdb59 Update suggested ./configure in README 2021-10-20 18:19:40 -04:00
Alan Wu bc7652998e Fix warnings about redefining YJIT_STATS
Follow up for ecb5b383a0. Now that
YJIT_STATS is defined in yjit.h, it shoudl be the only place that
defines it.
2021-10-20 18:19:40 -04:00
Maxime Chevalier-Boisvert 0ee8c60662 Add missing percent sign in printout 2021-10-20 18:19:40 -04:00
John Hawthorn a68e61f089 Add tests against side exits for non-fixnum 2021-10-20 18:19:40 -04:00
John Hawthorn 7d99e85601 Check for comptime fixnum in gen_fixnum_cmp 2021-10-20 18:19:40 -04:00
John Hawthorn f1b7568f5a Check for comptime fixnums in opt_and and opt_or 2021-10-20 18:19:40 -04:00
John Hawthorn cb9bc13fcb Check for comptime integers in opt_plus and opt_minus 2021-10-20 18:19:40 -04:00
John Hawthorn fd10634b1a Move forward declaration up 2021-10-20 18:19:40 -04:00
Maxime Chevalier-Boisvert bd8cfb351b Fix misplaced ivar_set_method exit counter 2021-10-20 18:19:40 -04:00