►
From YouTube: OMR Architecture Meeting 20220922
Description
Vector and mask IL proposal (@gita-omr)
A
Welcome
everyone
to
the
September,
22nd
Omar
architecture
meeting
today
we
have
one
topic
to
discuss
so
get
a
couple
of
us
we'll
be
talking
about
some
of
the
work
that
she's
been
doing
recently
with
the
vector
and
mask
file.
Op
code
changes,
so
I'll
turn
it
over
to
Gia
and
please
take
us
through
it.
B
So
in
terms
of
background,
the
motivation,
of
course,
is
to
exploit
simply
capabilities
on
various
platforms,
and
we
would
like
to
sorry.
We
would
like
to
support
Vector
operations
Vector
for
various
Vector
lengths,
like
64-bit
120,
to
56,
like
512,
of
course,
maybe
even
bigger
for
different
element,
types
of
those
for
those
Vector
lengths
like
all
the
sort
of
scalar
or
more
types,
starting
from
it
a
to
double.
B
C
B
What
happened
earlier
right?
We
had
we
presented
a
proposal
on
omr
architecture,
meeting
last
November
and
proposed
to
expand
TR
data
types
enum
to
present
all
Vector
types
and-
and
the
key
I
think
was
the
key
part
was
that
we
would
like
to
generate
those
types
at
runtime,
not
like
list
them.
You
know
all
combinations
which
also
possible,
and
some
compilers
do
that,
but
more
like
make
them
sort
of
hidden
and
generate
them
at
runtime
and
encode.
B
So
this
is
the
background.
Sorry,
and
as
soon
as
we
kind
of
more
or
less
sort
of
agreed
and
discussed
the
proposal,
we
started
implementing
Vector
types
and
the
way
it's
we
did
it
and
it
was
like,
maybe
early
this
year
or
spring.
Maybe
first,
we
added
that
Vector
length.
B
Enum,
because
it's
here
right
so
basically
length
is
presented
not
like
in
terms
of
Beats
but
in
terms
of
enorms,
like
sort
of
discrete
values,
right,
128
to
56
512,
and
then
there
is
non-vector
length
supported
and
since
some
platforms
support
only
one
vector
length,
you
can
make
it
platform
specific.
Just
to
save
space.
You
can
still
have
512
for
everybody,
but
to
save
space
so,
for
example,
for
a
lot
of
platforms.
It
just
only
one
vector
length,
128
and
for
x86
is
all
this
lengths
are
supported.
B
Also
up
to
512
is
supported
right
now
and
we
allocated
space
as
we
planned
in
data
types
like
removed,
all
old
Vector
types
and
added
like
a
basically
and
introduce
non-scalar
types
enum,
you
know,
remember,
and
then
the
non-vector
element
types
and
then
computed
non-vector
types
as
number
as
a
product
of
vector
element,
types
and
Vector
length
and
an
increase.
Now
all
types
by
that
value,
num,
Vector
types
so
essentially
allocated
space
between
scalar
types
and
now
all
types
for
Vector
types
that
will
be
generated.
B
B
That
sort
of
will
correspond
to
this
combination
kind
of
encoded
but
yeah.
But
what
was
different
from
The
Proposal
we
didn't
use
like
beat
Beats.
We
just
did
like
kind
of
like
a
flat
Matrix
representation.
Very
simple.
You
know
like
first
listing,
for
example,
all
like
sorting
them
by
length
I
think
we
started
by
length
kind
of
like
a
flat
and
Matrix
just
using
just
basic
arithmetic.
No,
like
note
beats
it's
more
dense.
It
makes
it
more
dense
and
using
separate
beats
and
kind
of
cleaner
I
think
so.
B
So
this
essentially
adding
Vector
types,
and
then
we
move
to
adding
Vector
op
codes
and
in
order
to
add
the
vector,
op
codes,
we
introduce
notion
of
vector
operations,
and
this
is
very
similar
to
opcode
macros
in
a
similar
email.
But
we
created
new
file
with
enums
and
listed
all
like
General
Vector
operations.
B
So,
for
example,
V
apps
takes
absolutely
you
know,
value
for
each
element
and
the
return
select
result
and
has
only
one
child
right
and
there's
no
type,
because
it's
a
vector
of
certain
types,
so
we
cannot,
it's
like
API
will
tell
us,
which
type
is
that
for
specific
op
code
right
for
operation,
We
cannot
put
a
type.
So
we
add
this
very
similar
just
that
it
has
similar
properties,
there's
like
scale
of
codes,
but
it
returns.
B
Well
sorry,
it
also
returns
back
the
result,
and
but
it
has
two
children,
and
then
we
have
vectors
to
like
vector
operation,
but
it
see
it
doesn't
say:
Vector
result,
which
means
it's
scalar,
like
reduction
returns.
Scalar
result.
B
B
And
also
I
need
to
mention
that
there
are
op
codes
that
have
only
one
type.
Like
addition
right,
it
takes
source
and
result
are
the
same,
but,
for
example,
conversion
of
code
has
two
types
like
source
and
result.
So
we
need
to
and
we'll
kind
of
separate
in
this
list.
We
have
that
Mark
rather
saying
which
one
is
first,
two
type
Vector
operation
and
given
all
these
enorms,
we
now
can
calculate
how
many
Vector
op
codes
we're
going
to
have
so
number
one.
B
That's
a
type
operations
is
it's
this
enum,
this
value
rate,
then
two
type
of
calculations.
That's
all
Vector
minus
the
one
that
have
only
one
type
anyways,
it's
number
of
all
Vector
operations,
and
then
we
multiply
number
of
the
ones
that
have
only
one
type
by
number
of
vector
types
and
the
ones
that
have
two
types
like
multiply
twice,
and
this
will
give
us
all
vector
of
codes
right,
all
vector,
opcodes,
and
so,
instead
of
Nam,
all
I
l
of
stitches,
like
old
enum
being
just
number
of
scale
up.
Cozy.
B
Add
all
this
all
these
products.
You
know
all
these
products
for
Vector
of
codes,
which
include,
like
simple,
like
you
know,
like
add
editions
and
like
conversions.
B
C
B
This
value
is
big
enough.
Those
kind
of
type
safety
is
preserved
and
and
then
of
course,
we
have.
This
API
create
Vector
op
code
with
one
type
and
create
Vector
of
code
with
two
types
and
what
is
important
right,
we
all
the
Stables
right
like
a
like.
You
know,
kind
of
properties.
Now
they
don't
have
entries
for
all
Vector
op
codes.
B
They
only
have
entries
for
Vector
operations,
so
we
Define
that
function
get
table
index
which,
for
scalar
op
codes,
will
be
just
that
op
code
itself,
like
usually
how
the
reference
all
the
property
tables,
but
for
Vector
op
codes.
It
will
be
the
return
Vector
operation
and
will
return
sort
of
like
a
correct
index
like
in
in
all
the
tables.
They
will
have
all
this
as
usual
scale
of
codes
and
followed
by
entries
for
Vector
operations.
B
So,
for
example,
like
name
right
for,
if
we
have
like
say
op
code,
something
like
that,
we
add
Vector
128
in
32.
It
will
return
entry
for
the
add,
because
all
of
this,
of
course,
essentially
share
the
same
properties.
B
So
that's
this
type
of
that
get
table
index
sort
of
we
use
for
accessing
all
the
tables
indexed
by
Il,
op
code
opcodes,
you
know
so
so
yeah
I
sort
of
talked
about
all
of
that,
so
there's
a
vector
of
codes
and
yes,
so
and
now
we
are
moving
to
mask
types.
So
all
of
this
is
already
done.
Mask
types
It's
relatively
new
and
again
we
start
with
adding
types
into
data
types
very
similar
to
Vector
types.
A
B
So
it's
important
to
have
a
even
like
say,
platform
platform
doesn't
have
special
like
mask
registers.
It's
important
to
have
mask
type
I,
think
sort
of
logically,
it
kind
of
tells
us
that
it
will
be
operation
on
this
type
of
mask
will
be,
it
will
operate
on
this
type
of
vector
length
and
this
element
type
and
so
even
platform.
For
example.
Power
is
the
that
they
don't
have
a
mask
special
like
mask
registers.
B
They
will
use
mask
types,
but
in
addition,
which
is
a
little
bit
slightly,
complicates
things
even
on
say,
x86,
where
mask
type
dramask
registers,
if
this
adx
512-
but
we
know
that
only
at
runtime
right
so
we'll
have
all
these
mask
types
and
we
have
like
rope,
codes
of
mask
type
and
so
on,
but
only
at
runtime,
we're
gonna
know
we
will
use
actually
mask
register
like
AVX,
512
must
register
or
regular
Vector
register
to
represent
mask
and
representation
will
be
different
and
size
will
be
different.
B
So
it's
a
little
bit
problem
similar
to
modifying
like
address
size
of
address,
type
and
I.
Remember
we
used
to
then
we
kind
of
improved
it,
but
it
was
always
considered
sort
of
a
not
a
great
thing
like
we
when
we
modify
different
like
properties
tables
at
the
compiling
initialization
time
so
which
is
not
like
very
nice.
So
at
the
same
time
it's
a
bit.
You
know
it's
a.
We
need
to
think
if
we
want
to
add
compilation
into
get
size.
So
what
we
did
is
to
first
time
get
size
is
called
for.
B
Mask
type
use
this
red
local
value,
comp
and
query
whether
mask
registers
are
supported
or
not,
but
it's
done
only
once
it's
expensive
operation,
but
it's
done
only
once
using
like
local
static
initialization,
so
that
because
of
that,
we
don't
need
to
change
that.
Api,
which
is
throughout,
like
it's
everywhere
I
think,
would
be
hard
to
change
and
I.
Don't
think
it's
very
expensive
because
done
only
once.
B
So
that's
about
types
again.
We
can
get
to
questions
later
and
and
then
again
like
similar
to
vectors.
As
soon
as
we
have
Vector
type,
we
can
add
Vector.
So
we
have
mask
type
now
we
can
add
mask
of
codes,
but
it's
important
to
distinguish
right.
There
are
masked
op
codes
and
masked
operations,
for
example
like
address
mask,
and
there
are
operations
on
mask
themselves,
for
example,
is
any
value
true
in
a
mask.
So
this
is
this
DM
ad,
it's
a
masked
operation
and
it
returns
Vector
result
and
it
has
three
children.
B
A
third
child
is,
is
a
of
mask
type,
so,
basically
yeah
the
op
code
will
look
like
this
and
it
will
have
three
children,
but
I
mean
true.
Is
you
see
it
doesn't
have
that
property
Vector
mask
because
it's
not
masked
it's
just
given
one
mask
it
checks.
If
any
element
is
true
and
returns,
scalar
value-
it's
like
you
know,
it's
like
Boolean,
essentially
Boolean
value,
true
or
false,
but
then
operational
mask
can
be
masked
itself
like,
for
example,
we
can
have
mm
in
it
true.
B
So
when
checking
if
any
element,
true,
we
will
use
mask
and
only
apply
that
operation
to
elements
that
enabled
by
a
mask.
So
this
this
operation
has
one
shell,
and
this
have
two
children
last
one.
Second
one
will
be
a
mask,
so
this
is
Vector
masked,
but
the
return
still
returns
scale
result
and
then
also
I
sort
of
didn't
have
space.
The
reparations
like
load,
which
return
will
have
like
mask
result
here
like
because
they
return
mask.
B
So
this
new
operations
and.
B
From
ask
masks
and
mask
and
I
also
wanted
to
mention
that,
as
I
mentioned
before,
actually
already
masking
Vector
types
have
one-to-one
correspondence
that
simplifies
like
internal
sort
of
representation.
We
can
use
the
same
enums
like
vector
operations,
the
same
file
because
we
never
for
any
given
opcode.
We
don't
have
to
worry
whether
it's
like
mask
or
vector
sort
of
semantics
of
Hope
code
will
tell
us,
like
the
name.
B
Enum
itself
will
tell
like,
oh
actually,
that
that
value
right
like
mask
will
tell
us
it's
masked
or
not,
but
it
doesn't
have
to
have
like
deal
with
yet
another
type
so
and
we
can
use
the
same
enums
and
kind
of
treat
essentially
treat
mask
operations.
The
same
way
we
treat
Vector
operations,
and
but
we
know
like
from
that
property,
we'll
know
whether
it's
actually
a
mosque,
Returns
Mask
or
not.
B
So
it's
a
bit
maybe
complicated,
but
basically
it
simplifies
implementations
a
little
bit.
The
fact
that
this
you
know
we
only
so
if
we
have
Vector
cells,
this
type
we're
only
gonna
use
mask
of
this
type,
but
not
any
other
mask
for,
but
you
know,
but
doing
some
mask
the
duration
on
this
type.
Only
you
can
use
this
mask.
B
B
It
will
be
like
a
vector
of
like
ones
and
zeros
like
representing
masks
for
each
element
like
if,
if
some
element
of
vector
is
considered
like
set
by
mask
it
will
have
all
ones
in
it
and
all
zeros
on
AVX
512,
it's
like
it's
64-bit
Vector,
it's
just
one
bit
per
element,
so
different
internal
representation,
but
we
assume
that
mask
type
this
type,
it's
it's
an
internal
representation
and
because
of
that,
sometimes
we
need
to
convert
to
existing
types.
So
because
of
that
we
adding
this
new
OP
codes
or
operations.
B
So
this
work-
all
of
this-
that
I
talked
about,
is
done
in
the
spr's
and
this
one
already
merged,
and
this
is
under
review
and
but
there's
still
a
bit
of
remaining
work
like
a
for
example.
Those
we
already
modified
Trill
to
recognize
to
recognize
like
a
Vector
of
codes,
and
it
will
I
think
it
will
recognize
my
scope
codes
automatically,
but
we
didn't
handle
yet
like
those
two
types
of
codes
like
they
will
look
like
this
right.
For
example,
if
it's
conversion
it
might
be.
B
C
B
Already
can
see
that
in
a
trace
file,
but
the
trill
also
has
to
recognize
this
and
we'll
be
adding
more
up
codes.
I
think
on
demand.
So
now
to
me,
maybe
perhaps
make
it
a
little
bit
more
clear,
like
here's,
a
summary
of
all
new
vector
and
mask
related
op
codes,
so
I
would
say
more
like
operations,
and
so
there
are
one
type
non-masked
one
type
masks,
masks
and
two
type
operations.
B
So
one
type
known
mask
is
like
those
regular
like
add
and
Compares
loads
Max
mean
and
so
then
reduction.
They
return
vectors.
Then
reductions
return
scalar,
then
regular
dragster,
yes,
return
written.
We
already
had
before
the
set
elements,
plus
basically
names
I,
think
speak
for
themselves,
more
or
less,
and
then.
B
One
type
of
yeah,
and
also
one
type,
include
the
mask:
operations
on
masks
like
a
menu
through
loading,
mask
direct
bloating,
mask
indirect
App,
Store
and
store
I.
Of
course
we
need
Emerick,
load
and
Rec
store,
because
we
might
use
different
registers
for
mask
types
right
and
all
and
those
conversion
of
codes
that
I
mentioned
and
then
practically
all
of
that,
but
masked
version
not
all
of
them
have
mask
version
but,
for
example,
still
one
type
but
mask
like,
for
example,
the
apps
and
VM
apps,
like
we
add
corresponding
VM
ad.
C
So
maybe
I
missed
this,
but
when
you
were
talking
about
the
one
is
to
one
correspondence
between.
C
B
We
could
that's
true,
that's
true.
We
could
but
I
think
sort
of
that's
okay.
Why
did
you
decide
it's
a
good
question?
Why
I'm,
asking
today
to
to
be
honest,
it
sort
of
was
prompted
by
Vector
API
Library,
which
most
of
that
work
actually
was
prompted
by
Vector
API
library
in
Java,
and
it
has
that
correspondence.
It
is
true
that,
strictly
speaking,
you
don't
need
element
type
but
yeah.
It's
a
good
thing
to
remember
why
we
decided
to
add
element
type.
B
It's
it's
sort
of.
We
I
think
we
could
have
had
just
mask
one.
No,
no,
no
I'm!
Sorry,
sorry!
We
have
to
know
right.
The
128
would
not
be
enough
right
because
we
need
to
know
that
there
are
four
elements
like
the
mask
is
per
element
right.
So
it's
true
false
per
element.
So
this
one
has
four
elements,
and
this
mask
also
has
four
elements.
So
for
Simplicity,
it's
like
much
easier
instead
of
saying
like
Moscow,
four
right
just
to
have
like
full
Vector
type.
B
C
B
Yeah,
strictly
speaking,
it's
I
think
it
just
discuss
that
I
decided
to
do
it
that
way,
sort
of
to
make
them
similar
to
like
it
kind
of
tells
you
on
which
Vector
you
I
would
say,
you're
right.
It's
a
little
bit
redundant
right
now,
but
provides
additional
information
on
which
factor
it.
It
is
working
on
to
which
Vector
that
mask
is
applied
so
kind
of
yeah.
We
don't
know
operation
yet
where
we
need
to
know
actual
type
element
type,
but
so
there's
some
element
of
redundancy,
but
I
think
you
definitely
want
to
know
yeah.
B
You
definitely
want
to
know
Vector
length
like,
for
example,
on
Power
and
Z.
Its
mask
is
represented
using
Vector
registers,
and
we
need
to
know
the
length
we
don't
know.
We
don't
have
example
yet
where
we
need
to
know
the
element
type
but
kind
of
for
completeness
edit
type
and
so
for
uniformity
kind
of
like
with
Vector
types,
but.
C
B
B
D
I'm
I'm
in
a
similar
state,
but
also
have
a
question
on
a
different
part.
I
was
gonna.
Ask
about
the
the
choice
to
use
to
to
kind
of
Define
what
a
mask
type
is
based
on
what
the
hardware
has
available
to
it
and
kind
of
emulating.
What
we
do
with
address.
D
I
wondered
if
you
also
considered
and
and
rejected
kind
of
the
same
approach
that
you
do
with
the
vector
length
right
like
so
having
different
mask
types,
but
you
don't
necessarily
have
all
of
those
different
types
present
in
the
in
the
set
of
data
types
in
Iran.
D
So
you'd
have
like
a
a
mask
type
for
for,
like
a
bit
field
mask
and
a
bit
type
for
a
byte
array
mask
and
then
I
know,
you'd
end
up
with
more
opcodes
I
guess,
because
then
every
alt
code
would
have
to
have
a
bit
field
in
a
byte
array
variant,
but
you'd
only
need
to
Define
one
of
those
sets
in
in
the
in
a
run.
If
you
know
what
I
mean
yeah.
D
Yeah
yeah,
which
were
then
sort
of
be
a
nice,
possibly
a
nicer
way
to
handle
it
if
the
third
type
ever
kind
of
materialized
from
for
some
other
platform
right
now,
I
assume
all
of
the
vector
masked
op
codes
have
to
have
a
conditional
in
them
somewhere
to
say,
am
I
this
kind
of
mask
or
that
kind
of
mask.
B
I
think
definitely
considered
definitely
thought
about
it,
but
I
think
the
issue
was
with,
like,
unfortunately,
I
didn't
show
it
here,
but
here
like,
for
example,
if
it
was
like
M
load,
M
load,
we
need
to
put
the
type
that
it's
a
mask
right
so
and
we
don't
know
the
table
contains
type
and
we
don't
want
to
modify.
You
know
like
we
need
to
put
something
here
that
it's
like
similar
to,
for
example.
Here
we
have.
D
B
Yeah
yeah,
that's
I,
guess
that's
what
the
kind
of
I
felt
like.
Maybe
it
would
be
too
many
yeah
and
then
yeah
have
them,
but
I
guess
try
to
maybe
wrongly
or
not
I,
don't
know,
but
I
sort
of
didn't
want
to
I
guess
to
expand
number
of
operations
for
every
internal
representation,
because
there
can
be
many
representations
right
like
so
to
have
yeah
I
guess:
try
to
avoid
operation
for
every
month,
internal
mask
representation,
I,
would
say
yeah.
B
No
is
this
a
different
you
see,
operations
are
all
defined,
aesthetically,
all
of
that
aesthetically
their
size
and
element
type
like
a
determined
runtime,
and
can
we
have
various
you
know
at
the
same
round.
You
can
have
VM
head
of
different
lengths
and
different
elements,
but
these
operations
are
in
a
static
or
a
similar
to
op
codes
and.
E
D
B
Vector
there's.
B
It's
basic
Vector
add
like
let's
maybe
go
to
back
to
non-mask
known
mask
right.
We
have
basic
what
we
call
operation,
it's
kind
of
a
general
add,
and
then
we
have
this
create
Vector
opcode,
given
operation
and
Vector
type.
So
we
create
we
allocated
space
for
all
the
soap
codes.
You
see
now
L
types,
but
we
we
only
create
them
at
runtime,
but
we
don't
need
to
know
like
we
don't
have.
We
don't
need
like
compilation
for
that.
B
B
So
it's
a
bit
different,
yeah,
I,
I,
think
I,
see
what
you
mean
like
vector
types
has
variable
all
this
Optical
like
operations
or
they
have
variable
length
and
element
type,
but
we
know
it
after
we
created
it
using
the
swap
code.
All
this
quick.
We
have
queries
on
this
op
code.
We
can
anyways,
we
we
sort
of
when
we
create
IL.
B
D
B
D
B
There
is
only
one
like
there
is
no
really
mask
register.
There
will
be
Vector
register,
but
logically,
we'll
use
like
masked
op
codes
and
mask
type,
because
I
think
it's
nice
to
have
IELTS
the
same
kind
of
consistent.
You
know
and
mask
operations
will
have
mask
type,
even
though
underneath
it
actually
will
be
Vector
register
and
we
know
its
length
and
so
we'll
return
16.
B
C
B
Will
be
with
mask
type
but
a
little
bit
more
complicated
yeah
on
Intel,
because
it's
not
we
don't
know
at
build
time
right
when
we
build
it,
we
don't
know
how
we
can
represent
mask.
B
D
B
Will
use,
depending
on
AVX
support,
we'll
do
whatever
is
needed
here
and
Power
and
Z,
for
example,
we'll
use
actually
Wilma
pattern
to
kind
of
we'll
use.
Vector
register,
so
they'll
behave
as
this
once.
B
We
considered
other
options.
Yeah
I
think
we
sort
of
considered
like
what
you
were
suggest
you
suggested
but
decided
to
keep
it
kind
of
reduced,
yeah
sort
of
keep
like
IL
kind
of
on
a
logical
level
like
and
actual
representation
on
a
cogent
level.
C
B
C
This
isn't
about
mask.
C
C
B
Again,
that
was
prompted
by
Vector
API
library
in
Java,
and
they
use
a
shop
code
and
it's
actually
or
for
for
float
and
double
I
I
think
it's
some
kind
of
like
not
sure
exactly
but
I
sort
of
added
it
through
completely
completeness
here
yeah
there
is
such
operation
like
or
fluid
and
double,
but
if
we
find
it's
not
needed
like
we'll
remove
it.
D
B
A
C
Have
a
question:
yeah,
hi,
hi,
so
I
think
thank
you
for
the
presentation
and
I
have
just
a
question:
how
do
do
you
have
any
guidelines,
or
maybe
patch
notes
how
to
update
how
the
projects
that
consumer
should
adapt
to
using
the
code
you
introduced
because
I
think
there's
like
there's
a
discussion
and
some
issues,
I,
think
67
or
not
09,
specifically,
that
it
kind
of
the
introduction
of
these
types
results
in
some
sort
of
breaking
compatibility.
Maybe.
B
B
The
intention
was
to
change
all
the
names,
any
anything
that
could
cause
functional
problem
sort
of
I
change,
the
names
so
that
it
will
break
the
build
and
bring
the
attention
to
the
attention
that
something
needs
to
be
changed
because
you're
right,
like
basically,
we
had
like
all
Vector
op
codes
somewhere
here
we
moved
them
down,
I
think
they
were
before
like
aggregate.
Maybe
so
order
has
changed.
A
number
of
types
have
changed,
and
so
some
tables
that
indexed
by
this
enum
needs
to
be
need
to
be
adjusted
and
I.
C
E
To
to
follow
up
actually
and
gogi's
point
I
think
the
the
issue
he
was
referring
to
that.
That
I
was
one
that
I
had
introduced
to
to
Omar
on
a
similar
issue
and
I.
Think
it's
actually
it's
not
a
direct
result
of
the
of
the
vector
and
the
mask
work.
Exactly
it's.
It's
more.
The
the
vector
in
the
mass
work
exposed
a
sort
of
fragility
in
in
some
of
the
places
that
the
data
types
enum
is
being
used,
at
least
that
that's
the
way
it
came
off.
E
That's
the
that's
the
that
was
the
the
symptom
in
our
in
our
case
where
we
we
also
began
hitting
this
assert
on
a
mask
data
type,
but
it's
only
as
we're
walking
through
the
enum
right.
So
there's
one
place
in
the
I
think
only
one
place
in
the
in
the
compiler,
where
we
start
when
we're
looking
for
a
conversion
between
between
types.
E
E
Code
yeah,
this
is
in
it's
in
omr.
It's
in
what
is
this
simplifier
handlers?
Simpler
helpers,
I
should
say.
B
Well,
yeah,
maybe
maybe
you
like
open
an
issue
like
it's
about
probably
started
happening
with
this
more
recent
this
one.
Probably
this
was
adding.
Oh
sorry,
I
keep
forgetting
this
one
mask
types.
Probably
since
this
one
yeah.
B
E
Yeah
so
there
was
originally.
There
was
a
kind
of
an
issue
with
this
that
we
we
introduced
our
kind
of
a
workaround
inside
of
that
that
Loop
this
is.
This
is
separate
that
was
separate
from
the
vector
and
and
mass
work
that
wasn't
part
of
the
problem
in
that
case,
but
then
you're
right
once
the
mask
types
were
introduced,
then
then
we
sort
of
began
to
hit
the
same
problem
again
for
a
different
reason.
Right.
Oh.
B
So
yeah,
like
Alexa,
has
been
there
for
a
while
and
I
I.
Don't
think
they
caused
any
major
problems,
although
you
I
think
you
mentioned,
there
was
something
but
Moscow,
relatively
new,
we'll
see
like
we
sort
of
still
kind
of
I
would
say
experimenting
with
that
with
those,
especially
those
conversions
are
kind
of
interesting
right
and
the
world
is
starting
like
like
prototyping,
like
you
know,
Cogen
and
openg9.
For
those.
A
I'll,
give
you
Kevin
I,
didn't
see,
Sunday's
comments
that
she
added
last
week
in
into
the
agenda
about
wanting
to
discuss
that
issue
6709.
Is
that
something
that
you
wanna
you
wanna
bring
up?
Now
you
think
you
have
the
Right
audience
to
to
discuss
that
too.
Here.
E
E
If
yeah
I
can
I
can
give
a
little
bit
more
a
little
bit
more
detail,
and
that
way
we
can.
You
know
if
folks
have
have
feedback
about
how
that
how
you
want
to
go
about
it,
because
there's
basically
yeah
I
can
do
that
sure.
Thanks.
A
Are
you,
are
you
yeah
I.
E
Okay,
can
you
all
see
that
yep,
okay
yeah?
So
the
the
the
issue
that
that
we
ran?
There's
there's
kind
of
two
issues,
the
first,
the
first
of
which
was
we
had.
E
We
had
this
kind
of
work
around
added,
so
the
the
first
issue
was
that
in
in
this,
so
here's
this
function,
decode
conversion,
op
code,
it's
one
of
the
simplifier
helpers
and-
and
you
can
see
actually
here
that
in
the
in
the
commented
sort
of
notes
that
this
is
only
meant
to
be
used
with
this
conversion.
E
Map
table,
which
seems
to
be
seems
to
be
the
case
that
that
seems
to
be
how
it
is
used
that
table
is,
is
here
in
omr,
il
apps,
and
you
can
see
that
this
basically
covers,
like
the
the
what
we
would
Now
call
the
scalar
types,
but
and
in
any
case,
what
what
what
we
end
up
doing
here
is
in
this.
This
Loop
right
we're
walking
through
each
of
the
values
in
the
in
the
data
types
enum.
E
Probably
this
this
value
is
no
longer
the
right
one.
So
part
of
the
you
know,
it's
probably
it's
to
me
a
little
bit
of
an
open
question.
How
we
want
to
specify
this
I
was
thinking.
I
mean
one
way
of
one
way
of
changing.
E
This
would
be
to
say
that
we
take
that
we
turn
this
into
scalar
types
instead
of
number
of
all
types,
I,
don't
know
if
that's
accurate
for
in
all
cases,
though,
so
that's
something
that
you
know
folks
would
have
to
weigh
in
on,
because
it
because
if
this
is
only
meant
to
talk
about
the
types
that
are
dealt
with
in
the
conversion
map
table
right,
we
don't
want
this
to
walk
through
the
vector
and
the
mass
types
for
example
right.
E
So
so
so
that's
actually
that's
sort
of
the
most
recent
issue
is
this.
We
started
hitting
here
when
we,
when
we
get
into
get
proper
conversion
at
a
certain
point.
This
the
the
eye,
has
incremented
past
the
types
that
are
relevant
right
in
this
in
this
function
and
we
go
try
to
take
that
eye
and
think
of
it
as
a
source
data
type
and
go
to
get
proper
conversion.
E
Right
in
get
data
type
conversion,
presumably
for
the
case
of
of
other
callers,
to
this
function
for
the
vectors.
So
we
kind
of
that
we're
kind
of
okay
with
with
the
vector
types
here,
but
if
you
don't
have
a
some
other
override
of
this
function
or
whatever
you're
going
to
you're
going
to
hit
this
a
search
right
as
soon
as
you
get
past
the
number
of
omr
types,
which
is
to
say
that
basically
past
the
scalar
types
so
so,
most
recently
when
the
mask
types
were
introduced.
E
This
is
where
we
started
hitting
this
assert.
Prior
to
that
we
were
hitting
this
assert
for
a
different
reason,
which
was
that
the?
If,
if
you
don't,
have
a
Project,
Specific
definition
of
additional
data
types
in
this
data
types
in
an
over
in
a
project
project
level,
data
types
enum.hp.
E
You
would
actually
also
hit
that
assert.
When
you
are
again
walking
through
the
enum
of
data
types,
you
get
to
number
of
omr
types
and
it
will.
The
same
thing
would
happen
right.
So
that
was
actually
how
this
this
came
to
this
piece
of
code
here
came
to
be
where
we,
where
it's
kind
of
a
basically
a
workaround
right
for
the
fact
that
number
of
omr
types
is
not
a
valid
source
data
type.
E
I,
don't
actually
know
if
this
I
sort
of
began
to
wonder
if
this
is
actually
even
correct
for
other
projects
that
do
Define
Project
Specific
data
types.
I'm,
not
that's
another
question
that
other
folks
would
have
to
weigh
in
on.
If,
if
that,
if
this
is
okay
and
doesn't
have
any
issues
for
projects
that
do
Define
their
additional
data
types
Beyond,
those
that
are
provided
in
omr,
then
you
know
making
this
number
of
all
types
in
making
this
just
be.
E
For
example,
the
scalar
types
might
be
all
that's
needed
to
be
okay
to
kind
of
fix
this.
This
this
one
kind
of
strange
case
right
where
we're
walking
through
all
of
the
data
types
in
the
Edom.
But
that's
that's.
Basically
what
I
wanted
to
sort
of
present
to
folks
to
to
think
about
with
us
as
we
sort
of
try
to
come
up
with
it
with
the
solution
to
that.
B
E
C
Here,
because,
here
that
we
want
to
say,
the
situation
is
for
Downstream
projects,
not
every
project
has
its
own
extended
data
types
like
for
opengli.
C
We
know
yes,
there's
plenty
of
extended
tape
types,
but
for
our
own
project
we
don't
have
any
additional
data
types
that
means
in
inside
the
in
the
data
type
header,
the
ending
data
type
would
be
like
Nam
omr
types
following
that
would
be
a
dummy
header
for
the
downstream
project
to
add
their
extended
type
types
and
again
ending
that
header
there's
another
name
them
scatter
type,
or
something
like
that.
C
So
there's
a
gap
here
for
if,
for
the
case,
the
projects
had
its
own
extended
day
types
seems
like
not
the
issue,
but
for
projects
without
their
only
extended
data
types.
Then
that's
a
issue.
A
Yeah
I
mean
I
think
that
one
of
the
things
that
this
is
shining
a
light
on
is
we
need
to
who
we
need
to
make
sure
that
we
understand
what
some
of
these
special
enum
values
are
really
meaning
and
and
the
code
that's
using
so,
for
example,
decode
conversion,
op
code.
What
exactly
is
decode
conversion
op
code
supposed
to
be
doing?
Should
it
be
considering
the
vector
types?
A
Should
it
only
be
considering
Vector
types
should
I
only
care
about
the
omr
Primitive
types,
that
sort
of
thing
and
to
be
honest
with
you,
I,
don't
I
think
that
what
we
have
to
do
is
to
consider
consider
these
pieces
of
code
to
try
and
yeah
and
put
this
put
the
right
semantics
around
them,
so
that
the
code
can
be
written
properly.
That's
one
thing.
A
The
other
thing
is
to
make
sure
that
the
enum
values
themselves
make
sense,
and
people
understand
that
when
they
use
something
like
num
all
types,
they
know
exactly
what
it
is
that
they're
getting
so
I
think
in
this
particular
case,
just
looking
at
decode
conversion
op
code.
If
it's
there
are
conversion
off
codes
for
Vector,
there's
conversion.
Op
codes
gated
just
talked
about
for
for
the
masking
Vector
off
codes
as
well
yeah.
A
One
might
realize
that
these
should
be
part
of
this
loop
as
well,
and
obviously
that
they
may
be
getting
excluded
from
that,
and
that
might
mean
that
the
table
that's
being
consulted
here
needs
to
be
expanded
as
well
to
capture
those
new
vector
conversion,
op
codes
right
so.
A
B
D
E
C
E
C
Maybe
we
can
just
inside
that
tummy
header
fire
are
defined,
Omar
types
equal
to
scatter
types,
maybe,
and
for
the
Downstream
project
they
can
free
to
extend
on
their
own.
A
Yeah
I
I
mean
thanks
for
raising
this
Kevin
I
think
that
there
is
something
here
that
we
need
to
clarify
for
sure.
Are
there
other
places
that
you're
aware
of
that
you've
encountered
that?
Maybe
that
we
might
need
to
consider
as
well
I.
E
I
believe
this
is
the
only
one
of
this
type
of
this
kind
that
I've
that
I've
that
I've
seen
in
anyway,
of
course,
it's
possible
that
there
are
others
that
I
haven't
encountered,
but
it
this
is
the
only
the
only
place
where,
where
this
is
kind
of,
seems
to
be
kind
of
this
persistently
kind
of
data
types
being
prone
to
break
okay,
yeah.
E
To
I
will
note,
by
the
way,
just
to
throw
this
out
there
as
well
that
that
the
this
decode
conversion
op
code,
because
I
I
had
the
same
thought
that
you
mentioned
about
you
know
the
fact
that
there
are
conversions
between
vectors
and
masks
and
the
other,
the
other
types,
not
just
the
scalar
types
right
at
the
moment.
At
least
this
this
function,
this
helper
is
only
getting
used
in
the
ins.
E
Demote,
simplifier
I
think
yeah,
two
places
there
inside
of
the
demote
simplifier,
which
is
itself
if
I
remember
correctly,
it's
that
itself
is
a
helper
to
the
yeah
to
some
of
these
integer
type,
simplifiers.
E
D
E
At
this
point,
at
least
it
isn't,
it
doesn't
appear
to
be
sort
of
suited
for
for
that
use,
although
you
may
want
to
leave
the
door
open
to
be
able
to
use
it
in
that
context,
potentially
in
the
future.
So
I
could
see
that
too.
A
Right
I
mean
again:
that's
it's
partly
a
documentation,
responsibility
here
to
make
sure
that
the
naming
of
the
function
and
its
operation
are
clearly
described.
Yeah.
A
So
I'm
trying
to
think
if
this
should
be.
If
we
should
address
this
as
part
of
some
of
the
some
of
the
vector
work,
that's
already
ongoing
because
it
seems
to
have
seems
to
have
introduced
this
problem
now
or
if
this
is
something
that
we
should
just
consider
separately
altogether
and
and
let's
say,
use
the
issue
that
you've
already
created
to
come
up
with
a
solution
for
this.
E
Yeah
yeah
and
I
was
what
I
was
going
to
say
related
to.
That,
too
is
I
mean
they're.
The
part
of
the
problem
was
reintroduced
with
the
work
on
the
when
the
mass
types
you
know
were
introduced,
but
but
this
issue
with
the
number
of
omr
types
pre-exists,
you
know,
predates
the
anything
to
do
with
the
vectors
right
this
we
started
hitting
this
simply
because
we
started
using
using
these
these
data
types
files,
basically
right,
yeah.
E
B
C
D
E
I
know
that
you
know
with
like
the
the
IL
opcodes
enum
kind
of
instead
of
having
some
of
these
like
number
of
omr.
In
that
case,
app
codes,
IL,
apps,
I
believe
the
way
it's
done
there
is
to
is
to
say
you
know.
First,
first
omr
op
equals
you
know
no
type
or
whatever
last
omr
type
equals
Aggregate.
And
then,
if
you
want
to
know
the
number
of
them,
you
can
kind
of
calculate
it
right.
Yeah.
B
C
B
B
Have
this
one
like
not
all
types
rectified
here,
because
then
it's
sort
of
like
it
kind
of
like
defines
a
scope
that
either
the
size
of
the
inner
yeah,
but
it
could
be
that
once
yeah
we
can
the
ones
that
are
not
needed
for
these
calculations
or
future
types.
They
can
be
just
some
separate
static.
Final
variable.
D
E
E
D
E
I,
don't
know
I
mean
you
know,
I,
don't
know
if
the,
if
the
presence,
so
if
sort
of
doing
a
little
bit
of
both
is
too
complicated
but
I
don't
know
if
the
number
of
scalar
types
in
itself
presents
any
issues
elsewhere,
I
guess
it
leaves
us
in
the
same
position
so
that
later
on
it
might,
but
at
the
moment
I
don't
know
that
it
does
such
that
we
could
still
have
this
be
an
enum
value.
The
way
it
is
now
and
sort
of.
C
D
A
Like
the
way
that
we've
worked
around
that
in
other
enumerations
in
order
to
count
the
number
of
Downstream
contributions
or
even
architecture,
contributions
to
an
enum
we'd
have
something.
Let's
say
in
this
particular
one
you'd
have
at
the
beginning
of
the
enum.
You'd
have
like
first
scalar
type
in
this
enum
and
then
you'd
have
all
the
omr
ones
and
then
you'd
have
your
pound
include
like
you.
D
I
think
most
of
that
craziness
would
need
to
be,
and
it
would
only
need
to
be
in
the
OR
Phenom
right,
like
it
wouldn't
be
passed
on,
like
you'd
have
Downstream
just
just
adding
more
things
into
the
enum
and
all
the
complexity
of
figuring
out.
What
the
right
boundary
values
are
would
be
in
here,
yeah
I,
think
so
yeah.
You
can
paint
and
not
passed
along
right.
E
C
E
Yeah,
what
I
was
going
to
say
is
I,
think
I
think
actually
cleaning
up
the
the
enum,
and
then
we
will
have
to
consider
somehow
how
we,
you
know
what
we
want.
The
scope
of
this
function
really
to
be,
and
so
on
this
this
needs
to
be
addressed
somehow,
but
if
we
have
the
loop
rather
that
you
know
sort
of
cleaned
up
so
that
we
can
properly
say,
then
we
can
specify
what
I
mean.
What
I
mean
to
say
is.
E
If
we
have
cleaned
up
the
data
type
CM,
then
we
can
specify
exactly
what
we
mean
in
here
such
that
we're
not
walking
over
the
edge
into
the
into
the
types
that
we
don't
want
here.
I
guess
right
so.
E
A
C
A
E
And
Gita
I
may
enlist
your
help
somewhere
along
it
related
to
the
mask
and
scalar.
A
Yeah,
this
is
also
eventually
leading
into
a
discussion
that
I
wanted
to
have
at
some
point
as
part
of
this
architecture
meeting
not
today,
but
a
discussion
around
how
we
can
better
test
Downstream
projects
that
are
consuming
omr
so
that
they,
so
these
kinds
of
breakages
can
be
discovered
sooner
or
or
or
we
have
immediate
feedback
that
there
is
going
to
be
a
problem
Downstream
that
we
need
to
fix
in
omr.
A
I
think
that
openj9
is
the
biggest
consumer
at
the
moment
and
it
gets
a
lot
of
testing.
But
there
clearly
are
up-and-coming
projects
that
need.
We
need
to
make
sure
that
they
don't
break
and
I'm,
not
sure.
If
all
my
releases
are
the
only
way
to
to
work
around
that,
but
but
hopefully,
with
a
bit
of
discussion,
we
can
come
up
with
some
ideas
and
some
solutions.
It'll
be
satisfactory
for
Downstream
projects,
so
I'll
work
one
of
those
under
the
agenda
in
the
in
the
coming
weeks.
D
Yeah,
so
it's
not
I
mean
it's
not
a
complete
answer
to
your
question,
but
I
guess
one.
One
interesting
question
is:
why
didn't
why
didn't
the
jit
Builder
testing
or
the
even
the
compiler
testing,
which
defines
a
compiler
a
downstream
compiler
widen
those
ones
find
this
problem
because
they
don't
Define
their
own
types
either.
A
C
It
was
not
a
sec
fault,
it
was
an
assert
thrown
by
Il,
Optimizer,
I,
think
or
something
it
was
essentially
saying
that
mask
1,
8
128
type
that
I
was
not
using,
is
outside
of
bad.
It
was
marked
as
bad
IL
operation.
Okay,.
C
My
sequence
of
Il
operations
that
triggered
that
was
unsigned
conversion
of
int
8
type
into
in
32
type
into
N64
type
somewhere
there
I
don't
have
exact
like
I,
cannot
pointed
exactly
down,
but
it
was
as
simple.
There
was
like
One
op
code
that
translated
into
three
leaves
of
Isle
Builder.
D
C
C
I'm
trying
to
keep
it
as
intact
as
possible.
I
have
two
to
three
calls
to
just
that:
I
introduced
to
the
API
but
I'm
trying
to
do
it
as
a
downstream
project
that,
by
linking
way,
I'm
actually
modifying
the
jit
Builder
Target,
but
through
cement
system,
not
by
adding
files
to
omr.
D
Yeah
no
I
get
it
I.
Just
that's
why
the
the
model,
the
model
that
you're
using,
is
not
the
anticipated
model.
Let's
put
it
that
way,
so
we
have
to
figure
that
out
I
think
too,
and
that
that
might
be
also
playing
into
the
problem
that
you're
seeing
but
the
masked
off
codes.
E
One
thing
I
was
going
to
ask
about
the
to
to
your
question:
Mark
about
the
shipbuilder
testing
is:
is
there
any
I
haven't
looked
so
I,
don't
know,
but
is
there
a
does?
Jetbuilder
have
its
own
version
of
get
data
type
conversion
by
any
chance.
E
I
believe
so
is
that
I
know
that
the
reason
I
mentioned
that
is
because
I
I
did
I,
did
look
at
at
j9
just
out
of
curiosity,
because
when
I
encountered,
the
problem
I
was
like.
Surely
someone
has
either
encountered
this
or
not
encountered
it
for
some
reason
and
what.
E
A
Okay,
well
I
mean
we
can
do
a
bit
of
Investigation
Mark
into
why
what
the
behavior
is
of
building
jit
Builder
as
part
of
our
PR
testing
or
our
sorry,
our
CI
testing,
to
see
why
this
particular
problem
didn't
manifest
itself.
There
might
give
us
a
bit
more
Insight.
Instead,
what
we
can
do
to
better
test
this.
D
E
A
All
right
any
more
discussion
on
this
point
or
any
further
questions
for
Gita.
A
Okay,
if
not
thank
you
Guida
for
taking
us
through
that,
and
thank
you
Kevin
for
talking
us
through
that
problem.
Our
next
architecture
meeting
will
be
in
two
weeks,
so
thank
you.
Everyone
for
attending
we'll
adjourn
now.
Thank
you.
Thank
you.
Bye.