The docs (III 4.4) give an example for optimizing code based on type
info (which seems to be missing a close paren, by the way):

(eval-when (compile)
  (proclaim '(function tak (fixnum fixnum fixnum) fixnum)))

(defun tak (x y z)
  (declare (fixnum x y z))
  (if (not (< y x))
      z
      (tak (tak (1- x) y z)
       (tak (1- y) z x)
       (tak (1- z) x y))))


ECL 13.4.1 (from HEAD built a few weeks ago) complains "Warning: The
variable name (FIXNUM FIXNUM FIXNUM) is not a symbol."

The resulting c file does not look anything like the example. Did some
behavior change/go away? Even if I add (proclaim '(optimize (speed 3)
(safety 0))), lots of type info doesn't get propagated.

If this is my fault for running things off of HEAD, please tell me to
shut up and I'll do so. Let me know if I can help, too.

Cheers,
Jason

P.S. Here's the C file (or the first part of it, anyway) if I add the
optimize directive to the above:
/*    Compiler: ECL 13.4.1                                          */
/*    Date: 2013/5/16 16:00 (yyyy/mm/dd)                            */
/*    Machine: Linux 3.8.7-201.fc18.x86_64 x86_64                   */
/*    Source: var.lisp                                              */
#include <ecl/ecl-cmp.h>
#include "var.eclh"
/*    function definition for TAK                                   */
/*    optimize speed 3, debug 0, space 0, safety 0                  */
static cl_object L1tak(cl_object v1x, cl_object v2y, cl_object v3z)
{
 cl_object T0;
 const cl_env_ptr cl_env_copy = ecl_process_env();
 cl_object value0;
 cl_fixnum v4x;
 cl_fixnum v5y;
 cl_fixnum v6z;
 v4x = ecl_fixnum(v1x);
 v5y = ecl_fixnum(v2y);
 v6z = ecl_fixnum(v3z);
TTL:
 if ((v5y)<(v4x)) { goto L1; }
 value0 = ecl_make_fixnum(v6z);
 cl_env_copy->nvalues = 1;
 return value0;
L1:;
 {
  cl_fixnum v7;
  T0 = ecl_make_integer((v4x)-1);
  v7 = ecl_fixnum(L1tak(T0, ecl_make_fixnum(v5y), ecl_make_fixnum(v6z)));
  {
   cl_fixnum v8;
   T0 = ecl_make_integer((v5y)-1);
   v8 = ecl_fixnum(L1tak(T0, ecl_make_fixnum(v6z), ecl_make_fixnum(v4x)));
   T0 = ecl_make_integer((v6z)-1);
   v6z = ecl_fixnum(L1tak(T0, ecl_make_fixnum(v4x), ecl_make_fixnum(v5y)));
   v5y = v8;
   v4x = v7;
  }
 }
 goto TTL;
}

------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
Ecls-list mailing list
Ecls-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ecls-list

Reply via email to