►
From YouTube: OMR Architecture Meeting 20200227
Description
Agenda:
* Re-architect Compiler Memory Infrastructure (#4783) [ @dsouzai ]
B
C
C
C
Okay,
if
we,
if
I
change
it
to
just
use
the
one
alligator
that
the
comp
object
has
I,
don't
know
that
affect
the
performance
or
not.
So
that's
something
that
didn't
think
of
any
reason
why
we
would
have
passed
it
by
value
in
the
first
place.
No,
no
I,
don't
I
I
was
genuinely
shocked,
I
I
thought
it
was
done
and
then
the
compilers
are
complaining.
C
By
value
we
never
needed
we
weren't
using
a
scale
before,
but
we
never
a
high
PR
alligator.
We
were
doing
shared
alligator
directly
so
that
we
then
looped
wrap
it
up
and
the
comp
commentator
call
which
returns
it
by
the
value
which
was
extremely
frustrating
because
it
required
a
lot
more
changes
that
I
had
to
do
that
necessary.
C
Second,
one
is
change,
even
even
if
we
don't
go
down
this
road,
it's
just
nicer
to
pass
by
reference.
Second,
one
is
pass
all
dirty
alligators
by
reference.
Third,
one
would
be
a
bit
typed
alligator
to
actually
use
references.
It'll
just
make
life
easier.
If
we
go
down
the
road,
because
if
we
ever
change
the
even
if
we
don't
go
down
this
way-
and
we
say
you
know
what
we
want
to
make
things
better-
garetty's
it'd
be
nice.
C
If
the
alligators
were
all
or
just
more
references
and
again
like
the
scary
part,
was
it
built
it
just
when
I
ran
it
would
crash,
because
all
right,
but
can
I
change
tonight
on
we
cater
to
take
a
reference.
It
way
it
had
a
reference
to
an
alligator,
the
longest
access
died.
So
creative
of
that
is
what
we
don't
want
to
happen.
C
All
of
the
complexities
I
ran
into
we're
all
open.
J9
Omar
was
surprisingly
to
the
easy
and
clean
and
they're,
mostly
all
the
issues
that
mark
got
into.
They
all
came
from
the
fact
that
j9
used
a
nine
backing
alligator
as
it
like
the
PM
that
provides
it
provides.
It
provides
the
chain
I'm
every
segment,
but
this
whole
mechanism
was
everything
is
a
TR
memory,
segmented,
so
I
listed
out
the
decisions
I
had
to
take.
C
As
a
consequence
of
it
I
for
the
regenerate
memory
segments
approach,
a
v8
it
from
how
marked
it
is,
but
essentially
mark
land,
it's
the
same
problem
when
I
was
talking
to
I,
just
sort
of
kept
it
as
dumb
as
possible,
just
extended
it
extended
here
memory
segments
and
then
and
then
essentially
the
consequences
that
the
Java
core
will
say.
Oh
you
used
up
the
entire
memory
segments,
but
really
you
bite
ro,
but
it's
16
minute
segments
you'll
be
off
by
16,
Meg's
I,
don't
think
it's
terrible.
C
Precisely
for
that,
because
of
the
proof
of
concept,
I
was
taking
a
bunch
of
little
just
decisions
and
I
was
like
I
know
this
won't
fly
and
any
real
design,
but
just
to
show
that
it
works.
You
know,
I,
don't
want
to
get
bogged
down
in
all
these
tiny
details
that
come
up,
say
right
mistake.
I
made
there
were
a
couple
of
other
enforcement
decisions
like.
C
They
construct
the
destructors
had
to
know
like
if
the
API
says
it
has
to
be
a
TR
memory
segment,
but
in
j9
it
kind
of
had
to
know
that
it
was
actually
the
child
type
and
again
it
was
encapsulated
in
one
file.
But
it's
still
sort
of
unfortunate
same
with
the
raw
alligator.
It
had
to
know
that
the
alligator
you're
passing
in
to
copy
construct
from
even
though
the
type
of
the
API
type
will
actually
be
a
very
specific
type,
and
you
better
get
that
right.
When
you're
compiling.
C
What
the
old
approach
did
was
that
it
would
say,
do
I
have
an
existing
segment,
that
I
can
reuse
or
to
fulfill.
Sorry,
do
I
have
an
existing
segment
that
I
can
use
to
fulfill
the
request
of
being
made
right
now
and
if
there
wasn't
it,
which
is
returned
knowledge
that
it
was
null,
would
allocate
a
new
segment
that
doesn't
work
with
references.
So
I've
talked
to
Leo.
It
returns
an
iterator
right
now,
which
is
not
something
I
like
because
the.
D
C
Fine
in
this
world,
because
in
this
particular
case,
because
it's
only
being
called
there
and
pushed
it
locked,
but
if
anyone
else
inside
there
will
see
use
it
without
knowing
the
iterator
could
be
invalidated
because
the
persistent
alligator
is
global
and
it's
not
I,
guess
something
that
you
have
to
be
careful
of.
So
that's
those
are
the
decisions.
I
have
to
go
through
to
make
this
work,
but
it
does
actually
work
shockingly
expecting
to
see
no
crashes
but
I.
C
B
C
D
B
Are
problems
of
this
approach?
I
could
do
it
if
it
would
they
make
sense
if.
C
B
C
C
There
are
in
expect
remember
how,
when
I
first
described
the
design
we're
talking
about
having
multiple
delegation
levels,
this
one
we
have
the
same
number
of
delegation
levels.
The
segment
sizes
are
the
same.
How
you
choose
to
free
back
to
the
VM
is
the
same.
Nothing
has
actually
changed
in
any
way,
so
I
expect
performance
to
be
the
same.
C
C
B
C
Of
hot
compile-
and
there
was
no
bugs
so
thinking
it's
fine,
but
never
done
so
I
can
try
that
out
assistant
experiment
to
see
what
happens.
The
thing
I
didn't
do
in
this
proof.
Concept
was
I,
didn't
do
what
mark
needed
at
what
trill
needs,
and
the
reason
is
because
I,
like
I,
don't
know
which
approach
will
be
take.
C
It
would
be
that
you
want
a
standard
class
that
recaps
weights
all
these
layers
or
would
be
that
the
the
type
Dictionary
and
the
method
filter
will
take
in
an
alligator
I,
don't
know
what
the
velocity
was
so
I
was,
like.
You
know
what
I
just
sort
of
said.
Okay,
if
we
switch
this
model,
it'll
work,
how
I
mean
to
fix
that
problem
can
be
done
in
multiple
ways
just
the
way
it
stands
right
now
like.
If
you
passed
in
an
alligator,
it
would
also
work
right
now.
It
would
be
the
same
thing.
C
C
So
when
Leo
me
and
David
were
first
talking,
we
sort
of
figured
that
we
would
implement
the
debug
segment
provider
as
instead
of
using
the
malloc
raw
alligator,
would
use
the
debug
raw
alligator
to
allocate
because
after
time,
APIs
actually
because
that
doesn't
work,
because
when
you
deallocate,
you
don't
want
to
m1
map,
you
want
to
M
protect
and
you
want
to
deallocate
sub
earlier,
so
that
wouldn't
work
with
the
existing
set
up.
So
I
sort
of
said
well,
just
the
debug
statement.
C
It
didn't
it
didn't,
have
a
backing
provider,
it
just
did
the
work
directly,
so
I
can
put
up
an
updated
diagram
of
how
this
looks,
which
holds
map
one
to
one
exactly
with
the
existing
infrastructure.
But
it's
easier
to
reason
about
in
terms
of
names,
and
you
can
rename
a
bunch
of
the
stuff
to
keep
the
name.
I
get
the
name
the
same
because
again,
I
sort
of
just
said:
well,
simplify
all
the
field
names
and
all
that
stuff.
C
But
realistically
all
the
field
names
could
just
be
changed
to
segments
alligator
everywhere
and
it
doesn't
matter
what
the
type
is.
The
knife
is,
always
all
the
fields
are
all
tier
ii,
alligator
reference
so
and
in
fact
it
was
actually
very
easy
for
me
to
construct
some
of
these
things
because
they
all
took
a
reference
of
saving
alligators.
So
if,
like
literally
build
things
around
I
thought
they
broke.
B
C
By
reference
that
has
to
be
done
for
us,
but
right
now
it
I
thought
it
would
be
common
to
both,
so
it
would
be
coming
the
boat
there,
I
mean
I,
think
I,
don't
know
how
you
guys
feel
about
this
I,
don't
know
if
it's
worth
the
effort
to
change
all
those
things,
references
if
you're
not
going
to
use
it
in
any
way.
I,
don't
know
how
you
can
feel
about
it.
A
C
It
still
work
you
think
going
through
this
because
there's
a
lot
of
places
and
it
will
be
a
dependent
change
like
you
change,
if
you
change,
for
example,
the
return
type
of
comparing
a
locator
that
breaks
a
whole
bunch
of
code,
but
you
have
to
change
at
the
same
time.
The
majority
I
believe
is
in
or
more
but
there's
like
one
place
in
open
j9
and
there
might
be
others
in
extending
projects.
C
But
in
order
to
be
the
raw
alligator
I
personally
instantiate
a
raw
alligator
on
the
other
local
then
use
that
raw
alligator
to
that
one
hit
another
wild
Gator,
which
is
a
pointer
and
then
have
that
pointer,
be
the
reference,
because
now
it
lives
that
ethically
otherwise
it
would
be
on
the
stag
to
die
well
as
before
it
didn't
matter,
because
you
did
just
pass
them
around
so
the
liking.
The
one
thing
I
said
that
we
have
to
do
here
is
what
better
understand
life
divers.
C
C
Sure
why?
But
if
it's
not
because
it'll
create
a
new
one
right,
like
I
thought
it
didn't
matter
at
first,
but
it
does
because
if
you
look
at
the
ps/2
alligator,
it
has
like
it
resets
the
punching
I
think
it
does
we
bucket
bucket
emily
and
every
time
you
create
a
new
rock,
I'm
paula
catering,
you
bucket,
and
that
might
have
changed
the
performance
characteristics
like
if
we
switch
to
only
using
one,
the
various
buckets
at
home
versus
the
one.
I
don't
know
what
the
consequences
that
is,
so
that's
why
to
do
it.
C
D
D
B
B
B
Yeah
I'm
just
sort
of
thing
as
a
we
can,
we
get
potentially
staged
like
if
we
can
do
a
lot
of
the
stuff
completely
independently
of
actually
somebody
doing
the
entire
thing.
We
can
give
ya
some
of
this
workouts,
like
the
changing
of
this
values,
to
references
for
example.
So,
but
just
something
we
have
an
idea
in
our
mind
and
throw
it
when
would
be
a
great
time
to
do
performance,
analysis,
sure,
I,.
C
One
of
the
things
I
wanted
to
get
out
of
this
was
that
this
right
now
is
the
one-to-one
mapping
exactly
the
way
things
are,
as
I
said,
I
wasn't
sure
it.
There
was
a
desire
to
change
that
a
bit
or
not
like
in
terms
of
right.
Now,
every
single
alligator
will
do
exactly
what
if
they're
one-to-one
mapping
does,
whereas
before
we
were
saying
you
know,
we
could
let
this
so
that
every
alligator
has
its
own
policy.
Maybe
doesn't
make
sense
to
do
that
because
you're
delegating
too
much,
maybe
some
policy
should
be
merged.
C
B
What
any
easier
to
do
that,
sir?
Is
it
easier
and
less
error-prone
to
do
the
one
to
one
mapping
first
and
then,
once
you
get
there,
that
your
changes
because
worried
about
changing
too
many
things
at
once,
yeah
actually
just
kind
of
goes
back
to
the
previous
thing
about
the
transition
plan,
because
the
one
thing
that
I
would
really
not
like
is
if
we
started
on
this
path
and
that
we
gave
up
on
it.
So
we
would
have
yet
another
set
of
memory
allocation.
B
D
C
B
At
the
very
least,
you
should
have
an
issue
open,
I,
guess
an
open
j9.
So
you
can
have
some
kind
of
a
discussion
there.
C
B
D
Work
out
what
what
doesn't
look
it
out
open,
J,
no
I
think
you
should
discuss
what
the
transition
plan
would
be.
What
the
effect
would
be.
The
open
j9
not
moving
to
the
new
reason
line.
They
could
make
that
choice.
They
can't
make
that
choice,
then
open
j9
compiler.
Our
community
needs
to
make
that
choice.
I
mean.
C
D
C
They
can
take
like
one
or
two
things
from
Walmart
and
move
it
to
App
Engine
in
right,
as
it
isn't
in
fact
we're
pretty
small
I
think
it
did
to
adopt.
It
now
hope
I
won't
throw
that
noise
in
terms
of
what
you
want
to
do
with
trilogy
builder
will
be
pretty
massive
because
you
wouldn't
be
able
to.
You
would
have
to
then
implement
the
alligator
that
trill
in
the
new
builder
1
yep.
C
C
A
C
C
Here's
base,
if
you
look
at
it
I
have
explicitly
you
know,
include
all
more
tests
whatever
at
j9
test,
whatever
only
because
I
I
don't
fully
understand
how
to
build
an
accessible
class
from
scratch.
I'll
say
you
know
what
I
don't
want
to
copy
an
existing
template
and
in
return
all
I
try
to
minimize
Union
doesn't
know.
D
C
Alligator
interface,
I,
don't
think
it
might
be
sore.
So
I
was
thinking
about
this
and
I.
Don't
know
how
like,
if
we're
gonna
make
anything
sensible.
The
only
thing
that
can
be
accessible
is
the
api
card.
One,
that's
the
after
I've
done
I.
Think
else
ask
that
should
be
the
only
reason
for
that
is
in
j9.
We
have
extra
queries
of
you
know
how
much
distance
technical
assistant
member,
maybe
I,
hated
how
much
region
memory
and
refer
segment
size.
So
I
just
put
all
that
in
Walmart.
One.
D
D
A
C
Does
think
where
it
creates
a
second
abstract
class
below
it,
sort
of
what
length
look
did
with
Sigma
providers
and
alligators,
where
Sigma
provider
only
had
requests
and
release,
and
it's
like
an
alligator
at
the
remaining.
No
thank
him
again.
The
reason
I
didn't
go
into
all
this
is
because
I
was
like
these
are
things
to
discuss
with
actual
design
of
the
real
way.
A
C
A
A
A
C
C
C
Could
the
way
you
would
do
it
is
either
the
way
I
put
in
the
comment
which
is
create
another
classroom,
same
name,
j9
and
Walmart
or
more.
You
can
hold
it
one
way
and
generate
a
proposal
other
way,
or
we
extend
us
that
we
pass
in
and
allocated
to
it
and
that
little,
but
that
could
work
in
the
current
approach.
Also,
the
same
thing
works
both
ways.
This
is
the
current
one
we
could
create.
C
C
A
system
segment
provider
there
is
a
whole
Martha,
Sigma
provider.
There's
a
Jane
I
think
the
providers
they
have
different
instructors
because
they're
not
accessible
we're.
Sorry.
Where
are
they
getting?
They
are
just
created
on
like
in
in
there
like
in
the
pencil
there
itself
is
about
getting
it
from
anywhere
else
yeah.
A
D
C
But
when
you
were
making
it
work
with
j9,
as
we
include
compiler
memory,
headers
and
a
whole
bunch
of
stuff
anyways,
that
particular
scenario:
wouldn't
it
be
okay
to
faster
than
alligator.
The
Jana
in
case
is
different.
Yes,
you're
right,
so
I
think
it's
only
that
we
we
have
the
default
one,
and
then
he
I
guess
the
only
problem.
C
C
D
D
The
general
strategy
there's
I'm,
trying
to
turn
JIT
builder
into
a
compositor
constructor
of
its
own,
which
can
which
operates
above
the
owner
compilers.
The
olmeyer
compiler
becomes
kind
of
a
back-end
or
JIT
builder,
but
you
can
actually
work
with
Jin
builder
itself
and
manipulate
the
JIT
builder
services
huemul
as
an
intermediate
representation.
D
In
that
scenario,
the
output
of
that
process
could
be
to
stay
persistent
form
of
the
jiggler
il
and
not
actually
even
invoke
the
Omar
compiler
editor,
so
so
that
that
might
not
intersect
with
what
you're
talking
about,
because
the
place
where
the
place
where
you
need
the
compilers
memory.
Allocator
is
in
the
Omar
builder
implementation
files,
which
wouldn't
have
in
that
scenario,
but
I.
D
A
A
I
can
put
pieces
together
of
what
he's
thinking.
So,
if
the
OM,
our
compiler
right
now,
is
just
as
a
back-end
right
the
so
when
JIT
builder
is
in
a
mode
where
it
uses
me
one
more
compiler,
it
would
have
to
provide
the
allocator
the
OM
our
compiler
will
use
now
that
allocator
does
not
need
to
be
the
same
as
the
one
that
JIT
builder
is
going
to
use.
So
JIT
builder
can
have
its
own
separate
way
of
providing
custom
allocation
mechanisms
to
the
user,
or
it
cannot
that
doesn't
really
matter.
A
B
C
A
D
Less
exists,
yeah
I
mean
in
in
general,
like
not
using.
You
want
more
compiler
as
a
back-end
means
not
using
the
Omar
compiler
memory.
Raishin
infrastructure
here,
yeah
right,
so
at
that
point
you
could,
it
could
be,
doesn't
have
to
be
in
the
prototype
that
I've
written
is
you're
just
allocating
stuff
with
C++,
new
and
silly
and
wherever
you
want
right,
it's
not
even
using
special
allocators
to
do
things
right.
It's
more.
D
The
use
of
the
Omar
compiler
allocator
framework
introduced
itself
when
the
Omar
compiler
becomes
a
central
part
of
the
story
and
not
it
should
not
impose
itself
on
the
rest
of
the
story.
It's
fine,
my
basic
position
there
but
I
think
I,
don't
think
that's
very
hard,
like
a
having
thought
a
little
bit
more
about
it.
While
I
was
talking,
I,
don't
think
that's
actually
a
big
issue.
So
nice
thing
is
design.
A
C
A
D
B
C
D
D
Maybe
some
issues
with
those
public
API
is
and
not
all
of
them
are
stable
at
cetera,
but
they
have
a
notion
of
a
public
API,
a
compiler
right
now
we
don't
have.
We
haven't
documented
any
real
notion
of
a
public
API
for
people
to
build
compilers
using
our
english
program
principle.
Everything
is
it's
open
season
on
api's
and
classes
inside
the
compiler,
which
is
nice
from
a
flexibility
standpoint,
but
not
great
from
a
what
am
I
allowed
to
do.
What
should
I
do?
How
can
I
do
this?
The
right.
D
D
If
I'm
going
to
write
a
compiler
using
the
Omar
compiler,
and
why
is
that?
What
are
the
things
I
have
to
change?
What
are
the
things?
I
did
what's
one
of
the
public
integration
points
that
I
need
to
hit,
and
if
that
story
is
well,
you
go
inside
a
system
provider
and
you
go
wrong
allocator,
but
don't
do
this
that
thing
and
torque
with
that
thing,
if
you
want
like
it,
if
it's
a
complicated
story
like
that,
then
no
one's
gonna
come
yeah.
D
If
we
can
start
to
build
up
some
documentation
and
and
and
real
actual
like
raw
allocator,
has
this
API
implement
this
and
poof
your
compiler
will
be
able
to
allocate
memory,
you
know,
etc,
etc.
For
the
set
of
classes
that
you
need
to
implement,
then
all
of
a
sudden
you've
got
an
API
that
people
can
actually
look
at
me
to
vote
and
have
some
hope
of
being
able
to
in
like
interact
with.
D
We
need
to
need
to
do
better
on
this
as
a
general
rule,
where
we've
done
a
lot
of
work
to
make
things
accessible
and
so
that
you
can
actually
implement
compilers
on
top
of
the
Omar
compiler
framework,
but
I
think
it's
still
kind
of
very
difficult
for
someone
to
learn
how
to
do
that
without
sitting
in
on
the
floor
of
this
building
and
soaking
in
it
for
a
year
or
two
in
our
team,
which
is
not
great
to
do
that.
Then.
D
D
C
C
C
Maybe
there
maybe
it
wasn't
that
time,
yeah
well,
maybe
I
just
really
think
at
the
time
we
were
talking,
I,
don't
think
I'd
even
got
around
to
building
it
right.
Okay,
but
I
saw
the
copy,
constructor
and
I
was
thinking
about
it
going
and
for
only
ever
dealing
with
a
API
raw
alligator.
There
are
friends.
How
is
the
compiler
supposed
to
know
which
copycats
are
yeah,
but
maybe
we
don't
need
that
copy
of
instructor
anymore
yeah.