github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm
Set by AlexDaniel on 12 June 2018.
00:13 Ven`` joined 00:53 konvertex left 01:03 lucasb left 01:11 Ven`` left 05:12 quotable6 left, bloatable6 left, notable6 left, greppable6 left, shareable6 left, tellable6 left, squashable6 left, bisectable6 left, releasable6 left, benchable6 left, committable6 left, nativecallable6 left, sourceable6 left, coverable6 left, statisfiable6 left, evalable6 left, reportable6 left, linkable6 left, unicodable6 left 05:13 tellable6 joined, bisectable6 joined, nativecallable6 joined, releasable6 joined, reportable6 joined, linkable6 joined, statisfiable6 joined 05:14 greppable6 joined, squashable6 joined, quotable6 joined, sourceable6 joined, bloatable6 joined, benchable6 joined, unicodable6 joined, shareable6 joined 05:15 coverable6 joined, notable6 joined, evalable6 joined, committable6 joined
nwc10 good *, #moarvm 06:46
bloatable6? 06:47
nine bloatable6: help 06:50
bloatable6 nine, Like this: bloatable6: d=compileunits 292dc6a,HEAD # See wiki for more examples: github.com/Raku/whateverable/wiki/Bloatable
nwc10 nine: I asked it privately, and then when it refused to tell me, on #whateverable
and now I have bookmarked the github project for further inspection 06:51
06:54 domidumont joined 07:24 zakharyas joined 07:39 sivoais left 07:40 sivoais joined 08:14 Altai-man_ joined 08:24 konvertex joined 08:26 sena_kun joined 08:28 Altai-man_ left 09:34 Ven`` joined 10:15 Ven`` left 10:25 Altai-man_ joined 10:28 sena_kun left 11:09 zakharyas left 12:22 zakharyas joined 12:27 sena_kun joined 12:28 Altai-man_ left
Kaiepi when writing ops for objects of a specific repr, should the function called use MVMObject and check the repr itself, or should it take the actual repr type and have the repr check be done from interp.c? 13:05
jnthn That isn't terribly uniform at the moment. Ultimately, though, splitting the unchecked from the checking is a good way to go. 13:07
A lot of the ops doing these things will eventually go away in favor of the "syscall" dispatch thing speculated in my dispatch work.
Kaiepi aight 13:08
i'm working on a solution for github.com/Raku/problem-solving/issues/111 atm since my grant stuff's blocked. there's a lot of work to do on the backend side of things 13:20
13:21 Kaiepi left 14:26 Altai-man_ joined 14:28 sena_kun left
AlexDaniel` bloatable6: 2019.05,2020.05 14:33
bloatable6 AlexDaniel`, gist.github.com/1d19eb99c5ceda83c2...394824f82d 14:34
AlexDaniel` I wonder if it works
what's [None] ? O_o 14:36
timotimo not sure
MasterDuke nine: how do you run/use your check-roots.py plugin? 14:51
ugh, the plugin doesn't built with gcc 10 15:05
nine I guess you have figured out already that you need [email@hidden.address] 15:14
I only got it to compile with Python 2.7, not Python 3
I've symlinked gcc-c-api and python.so into my MoarVM directory. Then added -fplugin=python.so -fplugin-arg-python-script=tools/check-roots.py to the CFLAGS in the Makefile and run LD_LIBRARY_PATH=. make 15:16
MasterDuke yeah, it's github.com/davidmalcolm/gcc-python...issues/181
nine At least there seems to be a PR 15:17
MasterDuke yeah, just makes it more annoying to use my system package manager to install it 15:18
15:22 zakharyas left
MasterDuke tried applying a couple of the other PRs to get python 3 working, but it didn't in the end, so just switched to python 2 15:39
but did finally get it working, nine++
nine woohoo 15:40
MasterDuke huh. my plugin can find paired malloc/free, but doesn't find any mallocs without a free before an MVM_exception_throw_adhoc. and of course i don't remember where i thought i saw one for sure that the plugin should have found... 16:26
16:27 sena_kun joined 16:29 Altai-man_ left 17:26 MasterDuke left 17:46 domidumont left 18:10 MasterDuke joined
MasterDuke wtf? `ins.fn.operand.name` is never 'MVM_exception_throw_adhoc' in src/strings/ops.c, that's not right... 18:17
18:26 Altai-man_ joined 18:28 sena_kun left
MasterDuke there are a bunch of things with names like '_16'. i tried compiling with --optimize=0, but they still happen. any way to not do that? 18:38
i just compiled all of moarvm. printing out every function call the plugin sees and there aren't any MVM_exception_throw_* 18:39
timotimo what do you mean _16? things? is that like C-level stuff? 18:58
i'm kinda confused :) :)
ah is this about your gcc plugin?
are we working with python2 or python3? 19:04
all print invocations are print functions so that points towards python3
do we want a Makefile target to build the whole thing with the checker plugin? 19:07
MasterDuke python2. let me gist a diff 19:08
timotimo aw crap now i installed the python3 version of the plugin 19:09
MasterDuke gist.github.com/MasterDuke17/eb9c8...8dd36aa041
i don't think the script has any incompatibilities
but i could only get the python2 version of the plugin to build 19:10
timotimo how do i invoke it for the program?
for the codebase*
MasterDuke colabti.org/irclogger/irclogger_lo...-05-19#l82
timotimo ah there it is 19:11
have you tried the show-gimple or show-ssa or show-callgraph example scripts to see what the stuff looks like on the inside? 19:13
callgraph is "only" for functions, but perhaps it's good enough for finding if it ever has exception_throw_* anywhere 19:14
MasterDuke nope. i did try undefining MVM_NO_RETURN, but that didn't make a difference 19:17
unmodified generate-callgraph-c.py doesn't show anything useful 19:19
timotimo cc1: error: plugin python should be specified before ā€˜-fplugin-arg-python-script=tools/show-callgraph.pyā€™ in the command line 19:20
cc1: error: fail to initialize plugin /usr/lib/gcc/x86_64-redhat-linux/9/plugin/python2.so
:( :(
MasterDuke did you symlink the two .so files? 19:21
and show-callgraph.py doesn't have any MVM_exception_* in the graph 19:22
weird
timotimo cc1: error: plugin python should be specified before ā€˜-fplugin-arg-python-script=tools/show-callgraph.pyā€™ in the command line 19:24
cc1: error: fail to initialize plugin ./python2.so
after symlinking both .so files and setting the library path
19:24 zakharyas joined
timotimo if i use gcc-with-python2 instead of gcc for CC in the makefile it complains that the plugin gets initialized with two different paths 19:24
MasterDuke fwiw, this is how i'm running it. `PYTHONPATH=/home/dan/Source/gcc-python-plugin/ LD_LIBRARY_PATH=. make -j12` 19:25
timotimo gcc -c -fplugin=./python2.so -fplugin-arg-python-script=tools/show-callgraph.py -Wextra -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -Werror=pointer-arith -O3 -DNDEBUG -g3 -D_REENTRANT -D_FILE_OFFSET_BITS=64 -fPIC -DDEBUG_HELPERS -DMVM_HEAPSNAPSHOT_FORMAT=3 -march=native -DMVM_TRACING=0 -DMVM_CGOTO=1 -DMVM_RDTSCP=1 -DMVM_BUILD_SHARED -fPIC -I3rdparty/libuv/include
-I3rdparty/libuv/src -I3rdparty/libatomicops/src -I3rdparty/libtommath -I3rdparty/dyncall/dynload -I3rdparty/dyncall/dyncall -I3rdparty/dyncall/dyncallback -I3rdparty/sha1 -isystem3rdparty/tinymt -isystem3rdparty/dynasm -isystem3rdparty/cmp -isystem3rdparty -Isrc -o src/strings/ops.o src/strings/ops.c 19:26
this is the full commandline exactly how make fires it off
MasterDuke and i added `-fplugin=python.so -fplugin-arg-python-script=show-callgraph.py` to the end of the CFLAGS in the Makefile
timotimo oh, end?
makes no change
MasterDuke what version of gcc? 19:30
timotimo gcc version 9.2.1 20190827 (Red Hat 9.2.1-1) (GCC) 19:31
MasterDuke huh. not that old 19:32
timotimo oh 19:34
i think i know what the problem is
the flag had to change to -fplugin-arg-python2-script=... 19:35
cc1: error: fail to initialize plugin ./python.so 19:36
is now all that i'm getting
aha 19:43
different version of gcc and gcc-plugin installed
the internet claims it's supposed to say "version mismatch between gcc and plugin" or so 19:44
MasterDuke huh 19:46
timotimo no, that's not it 19:48
gcc-plugin-devel wasn't installed at all, and that's what would give trouble when it's mismatched 19:49
but that's for when i want to build it myself
it is, however, packaged in fedora
MasterDuke so should be working now? 19:51
timotimo doesn't tho 19:52
nine what does ldd say on python.so? 19:55
MasterDuke: the _16 stuff are just temporary variables 19:56
MasterDuke yeah
but any idea why i don't see MVM_exception_* anywhere? 19:57
timotimo gist.github.com/timo/133cca89e863d...862e2c7dd9 19:58
nine MasterDuke: you could try dot = cfg_to_dot(fun.cfg); invoke_dot(dot) 20:01
That gives you flow diagrams of the function in question. May help understand the Gimple tree
That's a seriously cool feature 20:02
timotimo: it's something I wouldn't be surprised to see from you for our spesh graphs at some point :)
timotimo: have you tried -fplugin=python2.so and running with LD_LIBRARY_PATH=.? 20:03
I'm pretty sure I tried and failed with ./python2.so
MasterDuke nine: gist updated
nine MasterDuke: except Exception: pass is evil...who knows what kind of errors prevent it from seeing the function calls you're after? 20:04
MasterDuke well, i added it because some ins doesn't have a .fn.operand.name after i commented out your `if isinstance(ins.fn, gcc.AddrExpr):`. 20:06
nine Yeah, because the call could be something else. Which it maybe is in the case of MVM_exception_throw_adhoc 20:07
MasterDuke 'gcc.SsaName' object has no attribute 'operand'
nine gcc-python-plugin.readthedocs.io/e...#ssa-names 20:09
MasterDuke if i put the if back in and print the ins in an else, i get `D.20777 = _13 (tc, _15)` and `s = _10 (tc, _13);` 20:10
timotimo nine: you mean like kinda like tools/graph_spesh.p6
nine Haha...of course you already did :) 20:11
timotimo 6 years ago :) :) 20:12
that's when the first commit landed with that in it
MasterDuke `_13 = _12->pos_funcs.get_elem_storage_spec;` and `_10 = _9->allocate;` 20:13
nine Ah, yes, repr function pointers
Oh, those could be an additional source for allocations that my plugin doesn't check yet 20:14
timotimo ah, interesting
sometimes we have a repr check immediately before the invocation
so you can have a map from repr id to which struct
though they are all called this_repr :D
committer Timo Paulssen <timonator@perpetuum-immobile.de> Wed Mar 22 22:28:48 2017 +0100 20:15
give this_repr consts more meaningful names
i guess not
20:17 timotimo left, timo joined 20:18 timo is now known as Guest71053, Guest71053 is now known as timotimo 20:27 sena_kun joined 20:29 Altai-man_ left
MasterDuke it's not just MVM_exception_*. i did a make clean and then made again (having been compiling without optimizations), printing out everything, but turn_32bit_into_8bit_unchecked wasn't there either 20:36
20:40 squashable6 left 20:42 squashable6 joined
timotimo how do fully inlined functions show up? 20:43
MasterDuke ones marked inline? 20:46
timotimo or static inlino 20:47
MasterDuke siphashfinish_32bits shows up and it's `MVM_STATIC_INLINE uint64_t siphashfinish_32bits (siphash *sh, const uint32_t src) {` 20:52
compiling everything (i.e., after a make clean) give ~1780 unique function names. ctags gives ~2700 20:53
21:34 zakharyas left 21:38 konvertex left 22:26 Altai-man_ joined 22:28 sena_kun left
timotimo looking further into the hllize optimization, and it's not easy to just code-gen what it'd do, because i don't think there's an op that can "skip this work if the hll already matches" 22:30
hm. looks like whenever the hll is "not the same", it's actually null on the type 22:33
MasterDuke you mean you don't think there's an op to do "skip this work if the hll already matches"? or none of the existing ops could "skip this work if the hll already matches"? 22:36
23:07 Altai-man_ left