[MLton] Constant folding vector expressions
Vesa Karvonen
vesa.a.j.k at gmail.com
Mon Sep 17 10:56:44 PDT 2007
On 9/17/07, Matthew Fluet <fluet at tti-c.org> wrote:
> You want "WordSize.seqIndex ()", the size of sequence (i.e., array and
> vector) indices (and lengths). [...]
Seems to work. Regression tests seem to pass and compiling with
-default-type int64 and -default-type int32 seems to work on my 32-bit
machine.
One thing that makes me wonder is the int type used by the compiler.
It might differ from the sequence index type of the target executable.
OTOH, for this to make a difference, you'd need to have a vector
constant of over 2G elements.
Here is the proposed patch:
Index: mlton/atoms/prim.fun
===================================================================
--- mlton/atoms/prim.fun (revision 6026)
+++ mlton/atoms/prim.fun (working copy)
@@ -1242,6 +1242,9 @@
datatype z = datatype t
datatype z = datatype Const.t
val bool = ApplyResult.Bool
+ fun seqIndexConst i =
+ ApplyResult.Const
+ (Const.word (WordX.fromIntInf (i, WordSize.seqIndex ())))
val intInf = ApplyResult.Const o Const.intInf
val intInfConst = intInf o IntInf.fromInt
val null = ApplyResult.Const Const.null
@@ -1303,6 +1306,10 @@
then null
else ApplyResult.Unknown
| (CPointer_toWord, [Null]) => word (WordX.zero
(WordSize.cpointer ()))
+ | (Vector_length, [WordVector v]) =>
+ seqIndexConst (IntInf.fromInt (WordXVector.length v))
+ | (Vector_sub, [WordVector v, Word i]) =>
+ word (WordXVector.sub (v, WordX.toInt i))
| (Word_add _, [Word w1, Word w2]) => word (WordX.add (w1, w2))
| (Word_addCheck s, [Word w1, Word w2]) => wcheck (op +, s, w1, w2)
| (Word_andb _, [Word w1, Word w2]) => word (WordX.andb (w1, w2))
Index: mlton/atoms/const.sig
===================================================================
--- mlton/atoms/const.sig (revision 6026)
+++ mlton/atoms/const.sig (working copy)
@@ -13,6 +13,7 @@
structure RealX: REAL_X
structure WordX: WORD_X
structure WordXVector: WORD_X_VECTOR
+ sharing WordX = WordXVector.WordX
end
signature CONST =
Any objections to applying it?
-Vesa Karvonen
More information about the MLton
mailing list