►
From YouTube: OMR Architecture Meeting 20220526
Description
Agenda:
* l2a IL opcode semantics (#6508) [ @jdmpapin ]
A
Welcome
everyone
to
the
may
26th
omar
architecture
meeting
today
we
have
one
topic
to
discuss
and
it's
issue
6508,
which
was
initiated
by
a
discussion
on
a
defect
that
popped
up
on
art,
64.
and
devin.
Papino
has
agreed
to
take
us
through
that
discussion.
So
devin
can
I
turn
that
over
to
you.
B
B
Okay,
can
everybody
see
that
yeah
all
right?
So
this
isn't
it's
not
super
fleshed
out
in
terms
of
opcode
stuff,
because
the
op
code
is
very
straightforward.
This
is
more
about
the
motivation
for
what
I'm
suggesting
a
an
op
code
here.
B
So
at
the
moment
we
have
along
an
int
to
address
right.
So
here's
our
our
node
and
it's
got
a
child
of
integer,
some
integer
type
and
it's
the
integer
value
of
an
address
and
then
we
convert
it
to
an
address
type
node.
B
We
have
two
kinds
of
address:
addresses
right,
they're,
the
collected
and
non-collected
ones.
So
it's
basically
is
this
a
an
object
managed
by
the
gce
or
not.
B
B
If
we
look
more
closely
at
the
collected
case,
where
did
we
get
this
address
right
and
the
only
way
we
could
have
gotten
that
address
really
is
by
taking
the
actual
address
type
thing
and
and
then
converting
it
to
an
integer?
But
when
we
do
this,
the
gc
doesn't
know
about
this
integer
right.
It
loses
track
of
it,
and
so,
by
the
time
we
use
it,
we
could
end
up
with
the
object
having
been
been
moved
or
or
having
been
freed.
B
It
confuses
us
about
what's
collectible
and
and
what's
not-
and
you
know
we
just
decided
that
it's
there's,
there's
no
reliable
way
to
do
it
really
and
we
don't
even
we
don't
need
to
make
a
reliable
way
either
right.
For
example,
we
had
you
know
lube
strider
used
to
generate
this
tree.
That
looks
kind
of
like
this
right.
B
So
originally
it
would
have
been
an
integer
comparison
on
on
the
integer
type
iv,
but
then
it
it
creates
an
address
typed
one
and
then
it
would
still
do
an
integer
comparison,
but
it
would
convert
to.
B
So
a
possible
way
that
the
problem
could
manifest
here
is
say
this
a2l
gets
commoned
somewhere
further
up
and
there's
a
gc
point
in
between
yeah.
You
can
have
a
problem
right,
so
we
stopped
doing
that.
It
doesn't
generate
this
and
you
know.
As
of
you
know,
this
pull
request
and
it
just
generates
an
address
comparison.
B
C
C
B
Go
ahead:
okay
and
we
have
this
compute
is
collected
reference
query
that
just
says:
well,
if
it's
a
conversion,
then
it
better
not
be
collected
right,
because
if
it's
collected.
B
But
back
to
this
question,
of
which
one
is
l2a
right,
here's
this
this
collected
object
case,
and
this
is
not
allowed
really
sorry
devon.
Can
you
go
back
to
the
previous?
Your
previous.
A
Slide
for
a
sec!
So
that's
a
question
that
you
ask
on
the
like
from
your
previous
slide,
the
a
to
the
the
l
to
a
note
or
sorry,
the
a
to
l
note.
B
It's
a
question
that
you
can
ask
on
sorry
not
on
the
a2l
node,
so
this
this
is
the
conversion
two
integer,
as
opposed
to
the
conversion
from
integer
right.
We
are
concerned
with
the
conversion
from
integer.
A
B
B
C
I
I
can
see
sort
of
why
that
was
being
done
and
now
we
may
have
an
ifa
compare
less
than
off-road,
so
we
I
can
see
how
it
doesn't
have
to
use
an
a2l
or
maybe
over
there.
So
I
guess
I'm
still
unclear
on.
Where
do
you
see
l2a
get
used?
So
is
it
like?
If,
if
we
are
already
using
an
if
a
compare
less
than
then
there
is
no
a2l
in
that
c?
And
if
there's
no
a2l,
then
what
are
we
putting
under
l2a.
B
So
one
of
those
is
about
to
come
up.
I
don't
have.
B
In
here,
but
the
the
other
kind
is
let's
say
we
have.
B
Let's
say
we
were
looking
at
some
code
that
contains
something
the
compiler
knows
about,
so
you
know
take
to
give
a
j9
sort
of
example.
It
would
be.
B
You
know
this
method
handle
has
the
address
of
of
a
let's
say,
a
j9
method
in
it,
and
it's
a
long
and
we
have
to
we.
We
load
that
out
it's
long
long
type,
and
then
you
know
maybe
some
java
code
loads
it
and
then
it
passes
it
to.
B
L2A
and
that's
fine,
because
this
is
not
the
address
of
a
collected-
object
right-
it's
not
going
to
move
or
disappear
on
us
just
because
our
reference,
like
our
integer,
is
unknown
to
the
to
the
garbage
collector.
C
A
B
So
you
can
ask
this:
I
don't
know
that
it
makes
sense
to
ask
it
on
any
node,
although
if
it
was
a
not
a
reference,
typed
node,
I
guess
you
could
say
false.
I
didn't
I
don't
recall
what
it
does
in
that
case,
if
it,
if
it
asserts
or
but
it
you
know
it,
it
really
only
matters
for
reference
type
nodes
which
is
to
distinguish
between.
A
B
Oh,
that's
just
memoization.
B
B
B
It's
the
the
l
to
a
we
say:
no,
it's
not
collected
right
and
we
say
that
because,
if
it
well
here,
if
it
were
collected,
we
would
have
this
case
right,
and
this
is
the
case
where
we
took
the
address
of
one
of
these
things
and
we
put
it
into
an
integer
where
the
gc
can't
see
it
and
then
now
we
don't
know
whether
it's
good
anymore.
B
B
So
we
lower
the
compressed
refs
they,
you
know
you
do
an
integer
type
load
of
you
know
some
field
of
some
object
that
refers
to
another.
B
B
B
And
so
my
suggestion
was,
let's
have
a
way
to
you,
know
just
specify,
let's
just
be
precise,
about
whether
this
is
a
collected
reference
or
not
right
and
given.
B
You
know
everything
leading
up
to
here.
I
would
want
to
say
this
is
non-collected
and
then
we'll
add
a
new
one.
B
You
know,
and
this
is
l
or
I
it
has
exactly
the
same
behavior
but
the
the
result
is
a
collected
reference.
B
C
B
A
B
Yes
and
then
everything
else
you
know
anybody
else
who
has
an
address
that
they
know
is
good
and
want
to
convert
it
to
an
address
type
can
use
l2a
or
i2a,
as
the
case
may
be,
and
then
you
know,
cogen
will
know
that
that
is
not
collected,
and
then
the
ones
from
the
compressed
roofs
lowering
would
get
this
and
cogen
would
know
that
it
is
collected.
A
A
Are
are
there
any
other
means
that
that
we
use
to
determine
whether
or
not
a
node
contains
a
collected
like
have
we
have
we
done
any
other
attempts
over
the
years
to
look
at
these
kind
of
conversion
nodes
and
determine
what
it's
really
trying
to
do?
I'm
just
wondering
if
any
of
those
cases
need
to
be
undone.
B
B
And
I
think
the
if
I
recall
from
the
discussion,
the
the
cogens
seemed
to
treat
the
collectedness
of
of
l2a.
B
Right,
so,
if
you're,
if
your
other
uses
of
l2a
happen
not
to
cross
gc
points,
then
it
is,
it
doesn't
matter
what
kind
of
register
you've
got.
C
A
C
As
he
was
saying
so
in
this
case,
if
you
allocate
a
non-collected
register
for
f
for
the
long
value
that
is
below
l
to
dc
that-
and
you
allocate
a
collected
reference
register
or
collected
register
for
the
l2d
series,
even
if
the
long
value
has
a
ref
count
of
one
does,
that
imply
some
sort
of
regret,
move
in
the
code
gen
or
will
it
just
subsume
it
like?
I.
B
I
think
what
I'll
say
about
that
point
is
that
I
don't
think
it's
particularly
related
to
whether
or
not
we
have
this
new
op
code.
B
That
cogen
will
see
l2a
in
this
compressed
riffs
case
here
and
if
it
ends
up
with
a.
B
C
B
So
I
guess
it
would
be
a
conversion,
so
this
code
might
need
to
be
adjusted.
If
this
I
mean,
ideally,
we
should
probably
adjust
this
code,
regardless
of
whether
it's
used
in
in
cogen
after
after
those
l2
gc
riff
nodes
might
have
been
generated.
B
B
You
know
the
the
kind
of
confusion
that
made
us
stop
doing
this
and
the
optimizer
right
there's
not
nearly
as
much
transformation
going
on
at
that
point,
and
we
can
have
an
idea
that-
and
you
know
we
sort
of
already
do
have
that
idea
that
well,
these
things
are
going
to
be.
B
A
collective
reference
you
know
it's
the
address
is
the
result
of
this
arithmetic
and.
B
Knowing
that
we
will
not
hold
on
to
things
in
integer
land,
behind
the
back
of
the
gc
for
long
enough
that
it
becomes
a
problem,
I
guess
is
the
the
thing
that
we
have
to
know.
B
C
This
is
a
again
there's:
no
disagreement
in
the
terms
of
the
principle
that
here
of
the
chain
of
the
proposal
that
you
have,
but
just
thought
I'd
ask:
did
you
consider
having
the
l2a
as
resulting
in
a
collected
reference
instead
and
have
an
l2,
not
pc?
Therefore,
some
other
option,
like
that-
I
don't
know
like
if
address
or
a
represents
a
collected
reference
in
most
cases
anyway,
and
so
it's
kind
of
a
reason
for
maybe
considering
keeping
l2a
as
the
one
that's
collected
and
the
other
one
is
the
exception
to
the
roof.
C
A
C
A
Yeah,
meaning
that
maybe
l2a
should
apply
to
non-collected
references,
and
this
numerous
collective
references
mark
brought
up
a
comment
in
the
in
the
discussion.
The
original
discussion
about
whether
or
not
we
should
have
made
a
collective
reference,
an
actual
type
which
are
arguability,
would
be
a
much
bigger
and
more
pervasive
change
for
sure.
A
I'm
not
sure
that's
needed
in
this
particular.
At
this
juncture,
I
don't
think
it's
needed,
but
it's
another
area
to
knew
about.
Maybe.
B
A
So
I
think
I
mean
at
least
between
this
vijay
and
myself.
We
seem
to
be
in
favor
of
the
of
this
particular
proposal.
A
I
don't
think
from
an
implementation
point
of
view.
I
mean
yes,
there
will
be
some
work
neater
on
each
back
end,
so
that
should
be
relatively
minor
and
in
fact
some
of
that
code
might
even
be
able
to
be
shared.
I
mean
you're
just
creating
a
new
collected
reference
register.
A
Well
then,
you
need
to
do
the
moves
as
well,
but
anyway
it's
minor
work
that
needs
to
happen
and
then
there's
probably
a
few
places
in
the
common
code.
They
need
to
learn
about
the
new
opcode
and
the
semantics
of
it.
A
Does
anybody
have
any
objections
or
or
see
any
issues
with
what
has
been
proposed
other
than
what
we've
discussed.
A
A
A
Okay,
take
that
as
a
note,
so,
okay,
thanks
for
taking
us
through
this
devon,
I
think
it's
a
good
bit
of
conceptual
integrity
that
we've
like,
as
we
just
said,
is
a
bit
long
overdue
here
so,
but
we
can
do
this
going
forward.