Revision 2efe155f939a34fcf646f3745197d2384404b02c authored by Shuhei Kadowaki on 31 January 2022, 06:52:03 UTC, committed by Shuhei Kadowaki on 30 May 2022, 03:10:33 UTC
This commit limits the lifetimes of `OptimizationState` and `IRCode` for a more dataflow clarity. It also avoids duplicated calls of `ir_to_codeinf!`. Note that external `AbstractInterpreter`s can still extend their lifetimes to cache additional information, as described by this newly added documentation of `finish!`: > finish!(interp::AbstractInterpreter, > opt::OptimizationState, ir::IRCode, caller::InferenceResult) > > Runs post-Julia-level optimization process and caches information for later uses: > - computes "purity" (i.e. side-effect-freeness) of the optimized frame > - computes inlining cost and cache the inlineability in `opt.src.inlineable` > - stores the result of optimization in `caller.src` > * by default, `caller.src` will be an optimized `CodeInfo` object transformed from `ir` > * in a case when this frame has been proven pure, `ConstAPI` object wrapping the constant > value will be kept in `caller.src` instead, so that the runtime system will use > the constant calling convention > > !!! note > The lifetimes of `opt` and `ir` end by the end of this process. > Still external `AbstractInterpreter` can override this method as necessary to cache them. > Note that `transform_result_for_cache` should be overloaded also in such cases, > otherwise the default `transform_result_for_cache` implmentation will discard any information > other than `CodeInfo`, `Vector{UInt8}` or `ConstAPI`. This commit also adds a new overload `infresult_iterator` so that external interpreters can tweak the behavior of post processings of `_typeinf`. Especially, this change is motivated by the need for JET, whose post-optimization processing needs references of `InferenceState`.
1 parent 18bdbbf
fixup-libstdc++.sh
#!/bin/sh
# This file is a part of Julia. License is MIT: https://julialang.org/license
# Run as: fixup-libstdc++.sh <libdir> <private_libdir>
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <libdir> <private_libdir>"
exit 1
fi
libdir="$1"
private_libdir="$2"
if [ ! -f "$private_libdir/libjulia-internal.so" ]; then
echo "ERROR: Could not open $private_libdir/libjulia-internal.so" >&2
exit 2
fi
find_shlib ()
{
if [ -f "$1" ]; then
ldd "$1" | grep $2 | cut -d' ' -f3 | xargs
fi
}
# Discover libstdc++ location and name
LIBSTD=$(find_shlib "$private_libdir/libjulia-internal.so" "libstdc++.so")
LIBSTD_NAME=$(basename $LIBSTD)
LIBSTD_DIR=$(dirname $LIBSTD)
if [ ! -f "$private_libdir/$LIBSTD_NAME" ] && [ -f "$LIBSTD_DIR/$LIBSTD_NAME" ]; then
cp -v "$LIBSTD_DIR/$LIBSTD_NAME" "$private_libdir"
chmod 755 "$private_libdir/$LIBSTD_NAME"
fi
![swh spinner](/static/img/swh-spinner.gif)
Computing file changes ...