Skip to content

Instantly share code, notes, and snippets.

@Whateverable
Created April 27, 2020 17:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Whateverable/c66af3893388153660dcc2a0c970bf00 to your computer and use it in GitHub Desktop.
Save Whateverable/c66af3893388153660dcc2a0c970bf00 to your computer and use it in GitHub Desktop.
committable6
master,hyper_codegen %*ENV<RAKUDO_OPTIMIZER_HYPER>=1; run <perl6 -e>, 「my int @a = ^100_000; my int @b = ^100_000; my int @c = ^100_000; my int @d = ^100_000; my int @result = ^100_000; my $now = now; for ^500 { @result = @a >>+<< @b >>+<< @c >>+<< @d>>.sin; Nil }; say now - $now;」
¦«master»:
This type cannot unbox to a native integer: P6opaque, Num
in block <unit> at -e line 1
The spawned command 'perl6' exited unsuccessfully (exit code: 1, signal: 0)
in block <unit> at /tmp/QBtaFMfJF_ line 1
«exit code = 1»
¦«hyper_codegen»:
metaop hyper from core? 1
2.8144641
check array type of symbol @result
primspec is 1
here comes this tree:
- QAST::Op(call) >>+<<
- QAST::Op(call &METAOP_HYPER) <wanted>
- QAST::Var(lexical &infix:<+>) <wanted>
- QAST::Op(call) <wanted> >>+<<
- QAST::Op(call &METAOP_HYPER) <wanted>
- QAST::Var(lexical &infix:<+>) <wanted>
- QAST::Op(call) <wanted> >>+<<
- QAST::Op(call &METAOP_HYPER) <wanted>
- QAST::Var(lexical &infix:<+>) <wanted>
- QAST::Var(lexical @a) <wanted> @a
- QAST::Var(lexical @b) <wanted> @b
- QAST::Var(lexical @c) <wanted> @c
- QAST::Op(hllize) <wanted>
- QAST::Op(callmethod dispatch:<hyper>) sin
- QAST::Var(lexical @d) <wanted> @d
- QAST::SVal
- QAST::SVal(sin)
node is qast op
op is call
call op is nameless
this is a valid hyperop call.
arg1:
- QAST::Op(call) <wanted> >>+<<
- QAST::Op(call &METAOP_HYPER) <wanted>
- QAST::Var(lexical &infix:<+>) <wanted>
- QAST::Op(call) <wanted> >>+<<
- QAST::Op(call &METAOP_HYPER) <wanted>
- QAST::Var(lexical &infix:<+>) <wanted>
- QAST::Var(lexical @a) <wanted> @a
- QAST::Var(lexical @b) <wanted> @b
- QAST::Var(lexical @c) <wanted> @c
arg2:
- QAST::Op(hllize) <wanted>
- QAST::Op(callmethod dispatch:<hyper>) sin
- QAST::Var(lexical @d) <wanted> @d
- QAST::SVal
- QAST::SVal(sin)
node is qast op
op is call
call op is nameless
this is a valid hyperop call.
arg1:
- QAST::Op(call) <wanted> >>+<<
- QAST::Op(call &METAOP_HYPER) <wanted>
- QAST::Var(lexical &infix:<+>) <wanted>
- QAST::Var(lexical @a) <wanted> @a
- QAST::Var(lexical @b) <wanted> @b
arg2:
- QAST::Var(lexical @c) <wanted> @c
node is qast op
op is call
call op is nameless
this is a valid hyperop call.
arg1:
- QAST::Var(lexical @a) <wanted> @a
arg2:
- QAST::Var(lexical @b) <wanted> @b
it's a var node
seems like an array var. let's check it.
check array type of symbol @a
primspec is 1
it's a var node
seems like an array var. let's check it.
check array type of symbol @b
primspec is 1
res1:
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@a_1)
- QAST::Var(local hyperidx_1)
res2:
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@b_1)
- QAST::Var(local hyperidx_1)
argument return types are equal? 1
primspecs? 1 1
argument return types are equal to int? 1 1
argument return types are equal to num? 0 0
- QAST::Op(add_i)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@a_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@b_1)
- QAST::Var(local hyperidx_1)
it's a var node
seems like an array var. let's check it.
check array type of symbol @c
primspec is 1
res1:
- QAST::Op(add_i)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@a_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@b_1)
- QAST::Var(local hyperidx_1)
res2:
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@c_1)
- QAST::Var(local hyperidx_1)
argument return types are equal? 1
primspecs? 1 1
argument return types are equal to int? 1 1
argument return types are equal to num? 0 0
- QAST::Op(add_i)
- QAST::Op(add_i)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@a_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@b_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@c_1)
- QAST::Var(local hyperidx_1)
node is qast op
skipping hllize
node is qast op
it's a var node
seems like an array var. let's check it.
check array type of symbol @d
primspec is 1
will look if needs a custom hypermeth impl
- QAST::Op(callmethod dispatch:<hyper>) sin
- QAST::Var(lexical @d) <wanted> @d
- QAST::SVal
- QAST::SVal(sin)
here's the result of the argument
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@d_1)
- QAST::Var(local hyperidx_1)
returning a sin _n op here
res1:
- QAST::Op(add_i)
- QAST::Op(add_i)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@a_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@b_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@c_1)
- QAST::Var(local hyperidx_1)
res2:
- QAST::Op(sin_n)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@d_1)
- QAST::Var(local hyperidx_1)
argument return types are equal? 0
primspecs? 1 2
argument return types are equal to int? 1 0
argument return types are equal to num? 0 1
- QAST::Op(add_n)
- QAST::Op(add_i)
- QAST::Op(add_i)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@a_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@b_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@c_1)
- QAST::Var(local hyperidx_1)
- QAST::Op(sin_n)
- QAST::Op(atpos_i)
- QAST::Var(local hyperinput_@d_1)
- QAST::Var(local hyperidx_1)
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment