summaryrefslogtreecommitdiff
path: root/yjit_codegen.c
AgeCommit message (Collapse)Author
2021-10-20Fix counter names for getblockparamproxy. Print in --yjit-stats.Maxime Chevalier-Boisvert
2021-10-20Implement getclassvariable in yjiteileencodes
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
2021-10-20Add counted side exit to getblockparamproxyeileencodes
This is so we know the specific reason we're exiting this instruction. Co-authored-by: Aaron Patterson tenderlove@ruby-lang.org
2021-10-20Fix changes from rebaseNoah Gibbs
2021-10-20style: line break before "else"Alan Wu
2021-10-20style: switch statements indentAlan Wu
Case labels get half an indent and the opening brace is on the same line as "switch".
2021-10-20style: align pointer "*" to the rightAlan Wu
2021-10-20Add optimized Thread.currentJohn Hawthorn
2021-10-20Use jit_guard_known_klass() for hashes in opt_arefAlan Wu
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-20Also do String#strAlan Wu
2021-10-20Comment edits and moving functions around in the fileAlan Wu
2021-10-20Add specialization for String#to_s on plain stringsAlan Wu
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-20Try to get getblockparamproxy to support level > 0Maxime Chevalier-Boisvert
2021-10-20Reconstruct interpreter state before calling rb_ivar_get()Alan Wu
It could raise ractor exceptions. The included test didn't run properly before this change.
2021-10-20Remove a memory load in gen_send_iseqAlan Wu
Instead of loading from meory for REG_SP, do a register rename instead. It's cheaper.
2021-10-20Add counters for version invalidation reasonsAlan Wu
I noticed that there were two st_table iterators that do exactly the same thing so I merged them into one.
2021-10-20Fix counter namesNoah Gibbs
2021-10-20Fix typo in commentNoah Gibbs
2021-10-20Break up callsite_not_simple into multiple cases.Noah Gibbs
2021-10-20Remove a few more uses of the global cb/ocbMaxime Chevalier-Boisvert
2021-10-20Add a slowpath for opt_getinlinecacheAlan Wu
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-20Step 2 to remove the global cb/ocb objects.Maxime Chevalier-Boisvert
2021-10-20Pass the global cb through codegen functionsMaxime Chevalier-Boisvert
2021-10-20Fix excessive invalidation for opt_getinlinecacheAlan Wu
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-20Correct margin for stack overflow testAlan Wu
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-20Add jit_obj_info_dumpJohn Hawthorn
2021-10-20Add comment explaining argc + 2John Hawthorn
2021-10-20Implement invokebuiltinJohn Hawthorn
2021-10-20Implement generic setlocalJohn Hawthorn
2021-10-20Extract gen_get_epJohn Hawthorn
2021-10-20Fix opt_aset comptime_key checkJohn Hawthorn
2021-10-20Expand tabsAlan Wu
2021-10-20Update yjit_codegen.cMaxime Chevalier-Boisvert
2021-10-20Remove vm_opt_asetJohn Hawthorn
2021-10-20Specialize based on types of opt_asetJohn Hawthorn
2021-10-20Don't store cfp->pc when doing iseq callsAlan Wu
We set it before calling routines and when we are exiting.
2021-10-20No need to do ec->cfp = reg_cfp on exitsAlan Wu
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-20Fix warnings about redefining YJIT_STATSAlan Wu
Follow up for ecb5b383a0c17550b9b27663005049ddac871edb. Now that YJIT_STATS is defined in yjit.h, it shoudl be the only place that defines it.
2021-10-20Check for comptime fixnum in gen_fixnum_cmpJohn Hawthorn
2021-10-20Check for comptime fixnums in opt_and and opt_orJohn Hawthorn
2021-10-20Check for comptime integers in opt_plus and opt_minusJohn Hawthorn
2021-10-20Move forward declaration upJohn Hawthorn
2021-10-20Fix misplaced ivar_set_method exit counterMaxime Chevalier-Boisvert
2021-10-20Skip opt_case_dispatchJohn Hawthorn
2021-10-20Add comments to getspecialJohn Hawthorn
2021-10-20only compile for T_OBJECT typesAaron Patterson
2021-10-20Refactor attrset to use a functionAaron Patterson
This new function will do the write barrier / resize the object / check frozen for us
2021-10-20Fix opt_eq for overridden equalityJohn Hawthorn
2021-10-20Implement getspecialJohn Hawthorn
2021-10-20Deduplicate side exitsAlan Wu
Send instructions currently generate the exact same side exit twice. Cache the exit the first time we generate it. Also add a comment explaining what side exits do. Closes GH-117.