[m-rev.] diff: compile time evaluation for all modes of xor

Julien Fischer jfischer at opturion.com
Fri May 18 23:14:46 AEST 2018


Compile time evaluation for all modes of xor.

compiler/const_prop.m:
     Do compile time of evaluation for all modes of xor for int and uint.

Julien.

diff --git a/compiler/const_prop.m b/compiler/const_prop.m
index 48cc282..13c6056 100644
--- a/compiler/const_prop.m
+++ b/compiler/const_prop.m
@@ -553,6 +553,20 @@ evaluate_det_call_int_3(Globals, ProcName, ModeNum, X, Y, Z,
          Y ^ arg_inst = bound(_, _, [bound_functor(int_const(YVal), [])]),
          OutputArg = Z,
          OutputArgVal = xor(XVal, YVal)
+    ;
+        ProcName = "xor",
+        ModeNum = 1,
+        X ^ arg_inst = bound(_, _, [bound_functor(int_const(XVal), [])]),
+        Z ^ arg_inst = bound(_, _, [bound_functor(int_const(ZVal), [])]),
+        OutputArg = Y,
+        OutputArgVal = xor(XVal, ZVal)
+    ;
+        ProcName = "xor",
+        ModeNum = 2,
+        Y ^ arg_inst = bound(_, _, [bound_functor(int_const(YVal), [])]),
+        Z ^ arg_inst = bound(_, _, [bound_functor(int_const(ZVal), [])]),
+        OutputArg = X,
+        OutputArgVal = xor(YVal, ZVal)
      ).

  :- pred evaluate_det_call_uint_3(globals::in, string::in, int::in,
@@ -721,6 +735,20 @@ evaluate_det_call_uint_3(Globals, ProcName, ModeNum, X, Y, Z,
          Y ^ arg_inst = bound(_, _, [bound_functor(uint_const(YVal), [])]),
          OutputArg = Z,
          OutputArgVal = xor(XVal, YVal)
+    ;
+        ProcName = "xor",
+        ModeNum = 1,
+        X ^ arg_inst = bound(_, _, [bound_functor(uint_const(XVal), [])]),
+        Z ^ arg_inst = bound(_, _, [bound_functor(uint_const(ZVal), [])]),
+        OutputArg = Y,
+        OutputArgVal = xor(XVal, ZVal)
+    ;
+        ProcName = "xor",
+        ModeNum = 2,
+        Y ^ arg_inst = bound(_, _, [bound_functor(uint_const(YVal), [])]),
+        Z ^ arg_inst = bound(_, _, [bound_functor(uint_const(ZVal), [])]),
+        OutputArg = X,
+        OutputArgVal = xor(YVal, ZVal)
      ).

  :- pred evaluate_det_call_float_3(globals::in, string::in, int::in,


More information about the reviews mailing list