/[cmucl]/src/compiler/ir1opt.lisp
ViewVC logotype

Log of /src/compiler/ir1opt.lisp

Parent Directory Parent Directory | Revision Log Revision Log


Links to HEAD: (view) (annotate)
Links to snapshot-2011-03: (view) (annotate)
Sticky Tag:

Revision 1.89 - (view) (annotate) - [select for diffs]
Mon Apr 19 15:08:20 2010 UTC (3 years, 11 months ago) by rtoy
Branch: MAIN
CVS Tags: GIT-CONVERSION, HEAD, RELEASE_20b, cross-sol-x86-2010-12-20, cross-sol-x86-base, cross-sol-x86-merged, cross-sparc-branch-base, release-20b-pre1, release-20b-pre2, snapshot-2010-05, snapshot-2010-06, snapshot-2010-07, snapshot-2010-08, snapshot-2010-11, snapshot-2010-12, snapshot-2011-01, snapshot-2011-02, snapshot-2011-03, snapshot-2011-04, snapshot-2011-06, snapshot-2011-07, snapshot-2011-09, sparc-tramp-assem-2010-07-19, sparc-tramp-assem-base
Branch point for: RELEASE-20B-BRANCH, cross-sol-x86-branch, cross-sparc-branch, sparc-tramp-assem-branch
Changes since 1.88: +4 -4 lines
Diff to previous 1.88
Remove _N"" reader macro from docstrings when possible.

Revision 1.88 - (view) (annotate) - [select for diffs]
Fri Mar 19 15:19:00 2010 UTC (4 years ago) by rtoy
Branch: MAIN
CVS Tags: post-merge-intl-branch, snapshot-2010-04
Changes since 1.87: +9 -8 lines
Diff to previous 1.87
Merge intl-branch 2010-03-18 to HEAD.  To build, you need to use
boot-2010-02-1 as the bootstrap file.  You should probably also use
the new -P option for build.sh to generate and update the po files
while building.

Revision 1.87 - (view) (annotate) - [select for diffs]
Fri Dec 5 01:39:27 2008 UTC (5 years, 4 months ago) by rtoy
Branch: MAIN
CVS Tags: RELEASE_19f, RELEASE_20a, amd64-dd-start, intl-2-branch-base, intl-branch-base, label-2009-03-16, label-2009-03-25, merge-with-19f, merged-unicode-utf16-extfmt-2009-06-11, portable-clx-base, portable-clx-import-2009-06-16, pre-merge-intl-branch, release-19f-base, release-19f-pre1, release-20a-base, release-20a-pre1, snapshot-2008-12, snapshot-2009-01, snapshot-2009-02, snapshot-2009-04, snapshot-2009-05, snapshot-2009-07, snapshot-2009-08, snapshot-2009-11, snapshot-2009-12, snapshot-2010-01, snapshot-2010-02, snapshot-2010-03, unicode-string-buffer-base, unicode-string-buffer-impl-base
Branch point for: RELEASE-19F-BRANCH, RELEASE-20A-BRANCH, amd64-dd-branch, intl-2-branch, intl-branch, portable-clx-branch, unicode-string-buffer-branch, unicode-string-buffer-impl-branch
Changes since 1.86: +14 -17 lines
Diff to previous 1.86
Fix Trac #25.

Don't set continuation-dest to continuation-next in FLUSH-DEAD-CODE
when safety is 3.  Just don't do anything.  The generated code remains but
doesn't deliver the result anywhere, but that's ok in SAFE mode.

Revision 1.86 - (view) (annotate) - [select for diffs]
Mon Dec 3 16:15:25 2007 UTC (6 years, 4 months ago) by rtoy
Branch: MAIN
CVS Tags: merge-sse2-packed, release-19e, release-19e-base, release-19e-pre1, release-19e-pre2, snapshot-2007-12, snapshot-2008-01, snapshot-2008-02, snapshot-2008-03, snapshot-2008-04, snapshot-2008-05, snapshot-2008-06, snapshot-2008-07, snapshot-2008-08, snapshot-2008-09, snapshot-2008-10, snapshot-2008-11, sse2-base, sse2-checkpoint-2008-10-01, sse2-merge-with-2008-10, sse2-merge-with-2008-11, sse2-packed-2008-11-12, sse2-packed-base, unicode-utf16-base, unicode-utf16-extfmts-pre-sync-2008-11, unicode-utf16-string-support, unicode-utf16-sync-2008-07, unicode-utf16-sync-2008-09, unicode-utf16-sync-2008-11
Branch point for: release-19e-branch, sse2-branch, sse2-packed-branch, unicode-utf16-branch, unicode-utf16-extfmt-branch
Changes since 1.85: +3 -4 lines
Diff to previous 1.85
From Helmut Eller, cmucl-imp, 2007/11/29:

    the following example gets miscompiled:

    (defun foo ()
      (let ((<= (symbol-function 'list)))
	(lambda (x y)
	  (funcall <= x y))))

    (assert (equal (funcall (foo) 'a 'b) '(a b)))

    It seems to me that the compiler inappropriately applies a source
    transformation because the local variable happens to have a function
    type.  (This happens also for symbols other than <=, e.g. char= .)

    The following patch fixes that.  It seems to me, that we can use the
    secondary return of VALIDATE-CALL-TYPE (info) to decide whether we
    deal with a global variable, because VALIDATE-CALL-TYPE indirectly
    calls RECOGNIZE-KNOWN-CALL which does the proper checks for a global
    variable.

Revision 1.85 - (view) (annotate) - [select for diffs]
Wed Nov 9 01:48:22 2005 UTC (8 years, 5 months ago) by rtoy
Branch: MAIN
CVS Tags: double-double-array-base, double-double-array-checkpoint, double-double-base, double-double-init-%make-sparc, double-double-init-checkpoint-1, double-double-init-ppc, double-double-init-sparc, double-double-init-sparc-2, double-double-init-x86, double-double-irrat-end, double-double-irrat-start, double-double-reader-base, double-double-reader-checkpoint-1, double-double-sparc-checkpoint-1, pre-telent-clx, release-19d, release-19d-base, release-19d-pre1, release-19d-pre2, snapshot-2005-12, snapshot-2006-01, snapshot-2006-02, snapshot-2006-03, snapshot-2006-04, snapshot-2006-05, snapshot-2006-06, snapshot-2006-07, snapshot-2006-08, snapshot-2006-09, snapshot-2006-10, snapshot-2006-11, snapshot-2006-12, snapshot-2007-01, snapshot-2007-02, snapshot-2007-03, snapshot-2007-04, snapshot-2007-05, snapshot-2007-06, snapshot-2007-07, snapshot-2007-08, snapshot-2007-09, snapshot-2007-10, snapshot-2007-11
Branch point for: double-double-array-branch, double-double-branch, double-double-reader-branch, release-19d-branch
Changes since 1.84: +8 -11 lines
Diff to previous 1.84
Change how the important-result stuff is implemented.  We no longer
use an IR1 attribute but allow arbitrary functions to determine if the
result is used or not.  This allows us to handle SORT and ADJUST-ARRAY
depending on the args.

Use 19c/boot-2005-11-1.lisp to bootstrap this change.

compiler/knownfun.lisp:
o Remove IMPORTANT-RESULT attribute.
o Add new slot to function-info the hold the function to indicate if
  the result is not used.
o Adjust %defknown with a new keyword arg :result-not-used for the new
  slot.
o Add functions for the result-not-used arg for
  o SORT-RESULT-NOT-USED-P: non-NIL if the sequence might be a list.
  o ADJUST-ARRAY-RESULT-NOT-USED-P: non-NIL if the array is not known
    to be adjustable.
  o FUNCTION-RESULT-NOT-USED-P:  non-NIL if function result must be
    used (for functions like nreverse).

compiler/ir1opt.lisp:
o Remove now unused function CHECK-IMPORTANT-RESULT
o Add check in IR1-OPTIMIZE-COMBINATION to see if function result
  should be used.

compiler/fndb.lisp:
o Remove IMPORTANT-RESULT attribute and replace with :result-not-used.

Revision 1.84 - (view) (annotate) - [select for diffs]
Wed Oct 19 13:44:01 2005 UTC (8 years, 5 months ago) by rtoy
Branch: MAIN
CVS Tags: snapshot-2005-11
Changes since 1.83: +23 -1 lines
Diff to previous 1.83
Port SBCL'S support for detecting when destructive functions (such as
nreverse) modify constant args and for warning when the result of
destructive functions is not used.

Detecting modification of constant args is done by adding a new IR1
transformation that checks that a function is not destructively
modifying constants or literals.

A new IR1 attribute, important-result, is used to determine if the
result of a function should be used instead of discarded.  (Note:
this means some functions are not detected.  This should probably be
implemented as another transform so the compiler can detect those cases.)

code/error.lisp:
o Add new condition CONSTANT-MODIFIED.

compiler/fndb.lisp:
o Note destructive functions that should not modify constant args
o Note destructive functions whose results should be used.

compiler/ir1opt.lisp:
o Add new function CHECK-IMPORTANT-RESULT to check if the result is
  used.
o Update IR1-OPTIMIZE-COMBINATION to check if a function destructively
  modifies constant args or if the result of a destructive function is
  not used.

compiler/knownfun.lisp:
o Add new IR1 attribute, IMPORTANT-RESULT, to indicate that the result
  of a function should be used.
o Add new FUNCTION-INFO slot, DESTROYED-CONSTANT-ARGS.  This holds a
  function for computing the constant or literal arguments which are
  destructively modified by the function.
o Add support functions for DESTROYED-CONSTANT-ARGS functions.

Revision 1.83 - (view) (annotate) - [select for diffs]
Mon Aug 30 14:55:38 2004 UTC (9 years, 7 months ago) by rtoy
Branch: MAIN
CVS Tags: ppc_gencgc_snap_2005-05-14, release-19b-base, release-19b-pre1, release-19b-pre2, release-19c, release-19c-base, release-19c-pre1, snapshot-2004-09, snapshot-2004-10, snapshot-2004-11, snapshot-2004-12, snapshot-2005-01, snapshot-2005-02, snapshot-2005-03, snapshot-2005-04, snapshot-2005-05, snapshot-2005-06, snapshot-2005-07, snapshot-2005-08, snapshot-2005-09, snapshot-2005-10
Branch point for: ppc_gencgc_branch, release-19b-branch, release-19c-branch
Changes since 1.82: +7 -2 lines
Diff to previous 1.82
Apply patch from Jan Rychter that implements return-from-frame
(debug-return).  No bootstrap file or cross-compile needed.
Return-from-frame only works when debug = 3.

Revision 1.82 - (view) (annotate) - [select for diffs]
Sun Oct 26 17:31:25 2003 UTC (10 years, 5 months ago) by gerd
Branch: MAIN
CVS Tags: amd64-merge-start, mod-arith-base, prm-before-macosx-merge-tag, release-19a, release-19a-base, release-19a-pre1, release-19a-pre2, release-19a-pre3, snapshot-2003-11, snapshot-2003-12, snapshot-2004-04, snapshot-2004-05, snapshot-2004-06, snapshot-2004-07, snapshot-2004-08
Branch point for: mod-arith-branch, release-19a-branch
Changes since 1.81: +23 -24 lines
Diff to previous 1.81
	* src/compiler/eval-comp.lisp (compile-for-eval): Delete
	unreachable blocks, similar to ir1-optimize, which we don't call.
	This simplifies things by reducing the differences between
	"normal" compilation and compiling for interpretation.

	* src/compiler/ir1util.lisp (block-unreachable-p): New function.
	(delete-lambda): Mark return blocks for deletion again.

	* src/compiler/ir1opt.lisp (ir1-optimize): Use block-unreachable-p.
	Delete unreachable blocks after the loop.

Revision 1.81 - (view) (annotate) - [select for diffs]
Mon Oct 13 09:57:10 2003 UTC (10 years, 6 months ago) by gerd
Branch: MAIN
Changes since 1.80: +14 -11 lines
Diff to previous 1.80
	(compile nil
	    '(lambda (a c)
		(if nil (unwind-protect (max 521739 (unwind-protect c)))
		  (logandc2 3942 a))))
	 => nil is not of type ref

	* src/compiler/ir1opt.lisp (find-result-type): Ignore uses
	whose home lambda or block is deleted.  From SBCL.

Revision 1.80 - (view) (annotate) - [select for diffs]
Sat Oct 11 11:58:28 2003 UTC (10 years, 6 months ago) by gerd
Branch: MAIN
Changes since 1.79: +4 -2 lines
Diff to previous 1.79
	ANSI test misc.14
	 => case failure in continuation-proven-type

	* src/compiler/ir1opt.lisp (continuation-proven-type):
	Return *empty-type* for unused continuations.

Revision 1.79 - (view) (annotate) - [select for diffs]
Mon Oct 6 12:39:58 2003 UTC (10 years, 6 months ago) by gerd
Branch: MAIN
Changes since 1.78: +3 -1 lines
Diff to previous 1.78
	FIXME: Dead code elimination sometimes leaves spurious references
	to unused lambda-vars.  Unused vars are not packed, and so have a
	tn but a null tn-offset.  Some of these cases have been fixed, but
	not all of them, and since it's not sure if/when all of them will
	be fixed, add a hack for these cases.

	* src/compiler/debug-dump.lisp (dump-1-variable): If the
	tn-offset of a tn is null, set the tn to nil.

	(compile nil
          '(lambda (a b)
             (declare (optimize (speed 3) (debug 1)))
             (let ((v7
                    (let ((v2 (block b5 (return-from b5 (if t b -4)))))
                         a)))
                  -65667836)))
	 => error nil is not integer, in dump-1-variable.

	This is caused by an exit from the return-from being deleted,
	while leaving the exit's value untouched, which leads to a
	remaining reference to lambda-var b, which is unused and therefore
	not being packed.

	* src/compiler/ir1opt.lisp (maybe-delete-exit): When no node
	receives the value of the exit, flush the dest of the exit's
	value.

Revision 1.78 - (view) (annotate) - [select for diffs]
Sun Oct 5 12:34:35 2003 UTC (10 years, 6 months ago) by gerd
Branch: MAIN
Changes since 1.77: +6 -4 lines
Diff to previous 1.77
	(compile nil
	 '(lambda (a b c)
		  (declare (notinline logandc2 not))
		  (declare (optimize (safety 3)))
		  (declare (optimize (speed 0)))
		  (declare (optimize (debug 0)))
		  (let ((v10
			 (let ((v5 (if (not nil) -4 (logandc2 68392 c))))
			      c)))
		       a)))
	 => assertion failure, (not (block-delete-p block))

	* src/compiler/ir1opt.lisp (recognize-known-call): Treat
	:inline and :maybe-inline like :notinline if byte-compiling
	or converting for interpreter.  Reported by Paul Dietz.

Revision 1.77 - (view) (annotate) - [select for diffs]
Tue Apr 29 11:58:16 2003 UTC (10 years, 11 months ago) by gerd
Branch: MAIN
CVS Tags: dynamic-extent-base, lisp-executable-base, snapshot-2003-10, sparc_gencgc, sparc_gencgc_merge
Branch point for: dynamic-extent, lisp-executable, sparc_gencgc_branch
Changes since 1.76: +45 -58 lines
Diff to previous 1.76
	Fix for various ANSI test cases that fail when compiled because
	argument type checks are constant-folded away.

	* src/compiler/ir1opt.lisp (constant-fold-call): In safe code,
	don't constant-fold a call if one of its arguments requires
	a type check.

	* src/compiler/checkgen.lisp (probable-type-check-p): Return
	true for :error type-checks if safety = 3.

	Fix ENDP.* test failures when running tests compiled.  From SBCL,
	basically.

	* src/compiler/ir1opt.lisp (ir1-optimize, ir1-optimize-if):
	Don't eliminate if-tests requiring type checks.

	* src/compiler/checkgen.lisp (continuation-check-types):
	Add parameter force-hairy.
	(generate-type-checks): Call continuation-check-types with
	force-hairy true for :error continuations in safe code.

Revision 1.76 - (view) (annotate) - [select for diffs]
Sat Apr 26 18:39:30 2003 UTC (10 years, 11 months ago) by gerd
Branch: MAIN
CVS Tags: remove_negative_zero_not_zero
Changes since 1.75: +18 -6 lines
Diff to previous 1.75
	Fix for compiled test cases of the form (PROGN (FBOUNDP 42) T),
	which don't signal an error in safe code because such calls are
	flushed when the called function is FLUSHABLE and the value of the
	call is not used.

	* src/compiler/ir1opt.lisp (flush-dead-code):
	Suppress flushing of flushable known functions if safety = 3.

Revision 1.75 - (view) (annotate) - [select for diffs]
Thu Apr 24 13:59:34 2003 UTC (10 years, 11 months ago) by gerd
Branch: MAIN
Changes since 1.74: +3 -2 lines
Diff to previous 1.74
	ANSI test fixes, interpreted code.

	* src/compiler/ir1opt.lisp (recognize-known-call): Don't inline if
	*converting-for-interpreter*.  This suppresses inlining when
	generating IR1 for interpretation because no type-checking IR1 is
	generated in this case, and the interpreter, internal-apply-loop
	for instance, doesn't do type checks is some other way either.

Revision 1.74 - (view) (annotate) - [select for diffs]
Sun Mar 4 20:12:17 2001 UTC (13 years, 1 month ago) by pw
Branch: MAIN
CVS Tags: LINKAGE_TABLE, PRE_LINKAGE_TABLE, UNICODE-BASE, cold-pcl-base, release-18e, release-18e-base, release-18e-pre1, release-18e-pre2
Branch point for: UNICODE-BRANCH, cold-pcl, release-18e-branch
Changes since 1.73: +3 -3 lines
Diff to previous 1.73
Change most PROCLAIMs to DECLAIMs.

Revision 1.73 - (view) (annotate) - [select for diffs]
Tue Sep 26 16:40:11 2000 UTC (13 years, 6 months ago) by dtc
Branch: MAIN
Changes since 1.72: +5 -6 lines
Diff to previous 1.72
o After propagate-let-args, delete the let when none of the variables
  are referenced, rather than also checking that none are set. Problems
  related to lambda-vars without a home may have been resolved now.

Revision 1.72 - (view) (annotate) - [select for diffs]
Wed Aug 9 12:56:39 2000 UTC (13 years, 8 months ago) by dtc
Branch: MAIN
Changes since 1.71: +50 -3 lines
Diff to previous 1.71
Add the ability to delay IR1 transforms, giving type and constraint
propagation a chance before transforming to less amiable forms.
A transform may now choose to be delayed by calling delay-transform
giving a reason. The two supported reasons are :optimize to delay
until IR1 optimization has completed, and :constraint to delay until
after constraint propagation.

Revision 1.71 - (view) (annotate) - [select for diffs]
Fri Jul 7 09:33:01 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
Changes since 1.70: +6 -6 lines
Diff to previous 1.70
Flush unnecessary function proclaim's some of which had incorrect
return values, and replace them with function argument declarations
which the compiler move carefully checks.

Revision 1.70 - (view) (annotate) - [select for diffs]
Thu Jul 6 18:37:01 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
Changes since 1.69: +21 -9 lines
Diff to previous 1.69
Reworking of the values-type system to overcome a number of inconsistencies
causing problems:

o Redefine coerce-to-values to convert a single value type into (values type),
  rather than the former definition (values type &rest t). A single value
  type such as fixnum is now equivalent to (values fixnum). Values-type-union
  and values-type-intersection will canonicalise values types with a
  single value such as (values fixnum) back to a single value type
  such as fixnum.

o Now when the compiler makes assertions for the first value of
  continuations that may be generating multiple values it asserts the
  type as (values type &rest t), or as (value &optional type &rest t) if
  it is not sure that the continuation does generate a value.

o Enhance the type check generation to better handle the now common
  values types with optional and rest arguments. Add the new function
  Values-types-asserted which converts asserted optional and rest
  arguments to required arguments that have been proven to be delivered,
  Thus an assertion such as (values &optional fixnum &rest t) will
  generate a fixnum type check if the proven type if (values t).

o The compiler is now far more likely to pickup attempts to use an
  assertion to select a subset of values. For example
  (the (values fixnum) (values x y)) will generated a compiler warning.

o Update single values type assertions where appropriate to clarify that
  the received values may be optional or that multiple values may be
  received. For example, a macro argument which had been asserted to be
  a list via (the list ,...) would now be asserted to be
  (the (values &optional list &rest t)) etc.

o Have the IR1 translator for THE convert single value types into
  (values &optional type &rest t) so that code such as
  (the fixnum (values x y)) will still work acceptably. This does not
  restrict the possible type assertions as the values types may be used
  and are not modified.

Revision 1.69 - (view) (annotate) - [select for diffs]
Thu Jul 6 18:06:01 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
Changes since 1.68: +44 -12 lines
Diff to previous 1.68
Enhance ir1-optimize-mv-bind to propagate the type of optional or rest
value types, using the new support function values-types-defaulted.

Revision 1.68 - (view) (annotate) - [select for diffs]
Thu Jul 6 04:41:18 2000 UTC (13 years, 9 months ago) by dtc
Branch: MAIN
Changes since 1.67: +54 -18 lines
Diff to previous 1.67
o Skip substitute-single-use-continuation if CONT's assertion is
  incompatbile with the proven type of ARG, such as when ARG
  returns multiple values and CONT has a single value assertion.

o After propagate-let-args, only delete the let when none of
  the variables are set, otherwise an unreferenced variable that is set
  can end up without a home which would be unexpected by later stages
  of the compiler.

o Correct and enhance the values deftransform to adjust the node continuation
  asserted type which may otherwise be inconsistent with the new single value
  type, and set the node derived type to the received single-value-type.

Revision 1.67 - (view) (annotate) - [select for diffs]
Thu Feb 25 13:03:05 1999 UTC (15 years, 1 month ago) by pw
Branch: MAIN
Changes since 1.66: +7 -9 lines
Diff to previous 1.66
This set of changes removes nearly all references to the dylan language.
It is a benign revision as no structures are redefined. At some later
point the definitions in compiler/objdef could be removed, perhaps
in sync with some other type change.

Revision 1.66 - (view) (annotate) - [select for diffs]
Tue Feb 24 09:58:18 1998 UTC (16 years, 1 month ago) by dtc
Branch: MAIN
Changes since 1.65: +4 -1 lines
Diff to previous 1.65
When constant-folding succeeds alway transform the call so that even
non-flushable functions are flushed.  For single value calls it had
been just unlinking the result and inserting the constant but this
failed to flush the call if it didn't have a flushable attribute, for
example numeric constant coercions were not being flush when
successful leading to rather inefficient code.

Revision 1.65 - (view) (annotate) - [select for diffs]
Mon Oct 31 04:27:28 1994 UTC (19 years, 5 months ago) by ram
Branch: MAIN
CVS Tags: RELEASE_18a
Branch point for: RELENG_18
Changes since 1.64: +1 -3 lines
Diff to previous 1.64
Fix headed boilerplate.

Revision 1.64 - (view) (annotate) - [select for diffs]
Thu Jan 6 18:04:03 1994 UTC (20 years, 3 months ago) by ram
Branch: MAIN
Changes since 1.63: +3 -2 lines
Diff to previous 1.63
In propagate-local-call-args, don't do anything if there is an
optional-dispatch specified.  The last fixed entry point won't be referenced by
the XEP, so we can't count on that providing a T type input.

Revision 1.63 - (view) (annotate) - [select for diffs]
Tue Aug 31 22:52:26 1993 UTC (20 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.62: +10 -10 lines
Diff to previous 1.62
In PROPAGATE-LOCAL-CALL-ARGS, be prepared the possibility that other refs to
the function have no dest (and are going to be deleted.)

Revision 1.62 - (view) (annotate) - [select for diffs]
Thu Aug 19 23:12:09 1993 UTC (20 years, 8 months ago) by wlott
Branch: MAIN
Changes since 1.61: +9 -5 lines
Diff to previous 1.61
Don'e use info function info for dylan-function-var, instead get the info
from the dylan-function-var-function-info slot.

Revision 1.61 - (view) (annotate) - [select for diffs]
Wed May 12 11:22:25 1993 UTC (20 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.60: +2 -2 lines
Diff to previous 1.60
In inline expansion, *byte-compiling* => (byte-compiling)

Revision 1.60 - (view) (annotate) - [select for diffs]
Tue May 11 13:54:57 1993 UTC (20 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.59: +8 -3 lines
Diff to previous 1.59
When byte-compiling, don't do any inline expansion, and only do ir1 transforms
explicitly annotated as relevant.

Revision 1.59 - (view) (annotate) - [select for diffs]
Fri Mar 19 17:05:23 1993 UTC (21 years, 1 month ago) by ram
Branch: MAIN
Changes since 1.58: +2 -2 lines
Diff to previous 1.58
Fixed call to CONTINUATION-DERIVED-TYPE to be CONTINUATION-TYPE so that we
don't choke on values types in the functional position.

Revision 1.58 - (view) (annotate) - [select for diffs]
Sun Mar 14 19:32:38 1993 UTC (21 years, 1 month ago) by ram
Branch: MAIN
Changes since 1.57: +2 -2 lines
Diff to previous 1.57
Fixed a bug in type inference which seems to have generally prevented anything
from being inferred about function result types.

Revision 1.57 - (view) (annotate) - [select for diffs]
Wed Feb 3 17:53:04 1993 UTC (21 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.56: +11 -3 lines
Diff to previous 1.56
Fixed VALIDATE-CALL-TYPE to correctly handle calls where there is no
function type guarding the call (for example, calls to lambdas).  In this
case, we still want to call RECOGNIZE-KNOWN-CALL, since it will figure
out what leaf we are referencing, and might also do something else
interesting: inline expansion, etc.

Revision 1.56 - (view) (annotate) - [select for diffs]
Tue Nov 3 07:04:29 1992 UTC (21 years, 5 months ago) by ram
Branch: MAIN
Changes since 1.55: +5 -3 lines
Diff to previous 1.55
Fixed FIND-RESULT-TYPE to correctly handle assignment conversion.

Revision 1.55 - (view) (annotate) - [select for diffs]
Thu Sep 24 16:41:49 1992 UTC (21 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.54: +9 -1 lines
Diff to previous 1.54
Added a hack to IF-IF optimization to hopefully prevent some spurious
unreachable code notes.

Revision 1.54 - (view) (annotate) - [select for diffs]
Wed Sep 23 13:45:24 1992 UTC (21 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.53: +6 -5 lines
Diff to previous 1.53
In IR1-OPTIMIZE-MV-COMBINATION, only call MAYBE-LET-CONVERT if we suceed in
local call converting. 

Revision 1.53 - (view) (annotate) - [select for diffs]
Mon Sep 21 15:38:30 1992 UTC (21 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.52: +3 -2 lines
Diff to previous 1.52
Pass inline-ok argument to IR1-CONVERT-LAMBDA-FOR-DEFUN.

Revision 1.52 - (view) (annotate) - [select for diffs]
Wed Sep 16 16:45:14 1992 UTC (21 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.51: +3 -2 lines
Diff to previous 1.51
Make propagate-from-sets an entry point.

Revision 1.51 - (view) (annotate) - [select for diffs]
Tue Sep 15 17:16:53 1992 UTC (21 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.50: +2 -2 lines
Diff to previous 1.50
Make PROPAGATE-TO-REFS an entry point.

Revision 1.50 - (view) (annotate) - [select for diffs]
Mon Sep 7 15:41:18 1992 UTC (21 years, 7 months ago) by ram
Branch: MAIN
Changes since 1.49: +262 -216 lines
Diff to previous 1.49
Added block compilation declarations.  Moved some stuff around to get
better locality.
Substantially revamped known call reoptimization so that more core is
sharable with ir1-conversion.  Formerly some stuff (like inline expansion)
only happend at ir1-conversion time.

Revision 1.49 - (view) (annotate) - [select for diffs]
Tue Aug 4 21:34:48 1992 UTC (21 years, 8 months ago) by ram
Branch: MAIN
Changes since 1.48: +2 -1 lines
Diff to previous 1.48
Don't try to reconvert calls to SETF functions with inline expansions
in RECOGNIZE-KNOWN-CALL, because it won't work.  For now, SETF functions
are never inline expanded.

Revision 1.48 - (view) (annotate) - [select for diffs]
Fri Jul 31 17:19:38 1992 UTC (21 years, 8 months ago) by ram
Branch: MAIN
Changes since 1.47: +4 -3 lines
Diff to previous 1.47
In RECOGNIZE-KNOWN-CALL, reconvert the form if it has an inline expansion or
source transform, even if there is no function-info.

Revision 1.47 - (view) (annotate) - [select for diffs]
Wed Jul 22 23:22:33 1992 UTC (21 years, 9 months ago) by wlott
Branch: MAIN
Changes since 1.46: +2 -1 lines
Diff to previous 1.46
Do not SUBSTITUTE-SINGLE-USE-CONTINUATION when *BYTE-COMPILING*.

Revision 1.46 - (view) (annotate) - [select for diffs]
Thu Jun 4 17:48:53 1992 UTC (21 years, 10 months ago) by ram
Branch: MAIN
Branch point for: patch_16
Changes since 1.45: +39 -69 lines
Diff to previous 1.45
Moved tail-set merging out of IR1-OPTIMIZE-RETURN into LTN.  Changed
MAYBE-DELETE-EXIT to call MERGE-TAIL-SETS.

Revision 1.45 - (view) (annotate) - [select for diffs]
Wed Jun 3 19:57:43 1992 UTC (21 years, 10 months ago) by ram
Branch: MAIN
Changes since 1.44: +2 -1 lines
Diff to previous 1.44
Set COMPONENT-REANALYZE in MAYBE-TERMINATE-BLOCK if we do terminate.

Revision 1.44 - (view) (annotate) - [select for diffs]
Tue Apr 14 18:09:01 1992 UTC (22 years ago) by ram
Branch: MAIN
Changes since 1.43: +7 -3 lines
Diff to previous 1.43
Don't substitute out LET variables when the initial value is a reference to a
:NOTINLINE functional.  The inlinep information must be retained, since we
count on :NOTLININE calls never being local call converted.

Revision 1.43 - (view) (annotate) - [select for diffs]
Thu Apr 2 15:25:38 1992 UTC (22 years ago) by ram
Branch: MAIN
Changes since 1.42: +9 -2 lines
Diff to previous 1.42
Changed SUBSTITUTE-SINGLE-USE-CONTINUATION to not substitute if the
continuation type assertions conflict.

Revision 1.42 - (view) (annotate) - [select for diffs]
Wed Apr 1 13:38:17 1992 UTC (22 years ago) by ram
Branch: MAIN
Changes since 1.41: +12 -3 lines
Diff to previous 1.41
Added optimization which deletes MV-BINDS when all variables have been deleted.

Revision 1.41 - (view) (annotate) - [select for diffs]
Wed Feb 19 16:15:21 1992 UTC (22 years, 2 months ago) by wlott
Branch: MAIN
Changes since 1.40: +5 -2 lines
Diff to previous 1.40
Flame out when speed>=brevity if the transform is important.

Revision 1.40 - (view) (annotate) - [select for diffs]
Tue Feb 11 22:47:01 1992 UTC (22 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.39: +2 -2 lines
Diff to previous 1.39
Don't look at the LAMBDA-TAIL-SET of deleted functions to find out the result
type, because there isn't any.

Revision 1.39 - (view) (annotate) - [select for diffs]
Sat Jan 25 14:05:24 1992 UTC (22 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.38: +3 -2 lines
Diff to previous 1.38
In FIND-RESULT-TYPE, don't call MAYBE-CONVERT-TAIL-LOCAL-CALL on
MV-combinations.

Revision 1.38 - (view) (annotate) - [select for diffs]
Fri Dec 20 20:47:56 1991 UTC (22 years, 4 months ago) by ram
Branch: MAIN
Changes since 1.37: +3 -2 lines
Diff to previous 1.37
Do inconsistent derived type warning only when *CHECK-CONSISTENCY* is T.  It
seems that we do derive inconsistent types in dead code.

Revision 1.37 - (view) (annotate) - [select for diffs]
Mon Dec 16 10:09:10 1991 UTC (22 years, 4 months ago) by wlott
Branch: MAIN
Changes since 1.36: +3 -2 lines
Diff to previous 1.36
Only call maybe-emit-make-load-forms when we are (producing-fasl-file).

Revision 1.36 - (view) (annotate) - [select for diffs]
Sun Dec 15 14:59:09 1991 UTC (22 years, 4 months ago) by wlott
Branch: MAIN
Changes since 1.35: +2 -2 lines
Diff to previous 1.35
typo

Revision 1.35 - (view) (annotate) - [select for diffs]
Sun Dec 15 08:09:06 1991 UTC (22 years, 4 months ago) by wlott
Branch: MAIN
Changes since 1.34: +2 -1 lines
Diff to previous 1.34
Make constant-fold-call call maybe-emit-make-load-forms on the resultant
constant so that it gets dumped correctly.

Revision 1.34 - (view) (annotate) - [select for diffs]
Wed Dec 11 16:55:09 1991 UTC (22 years, 4 months ago) by ram
Branch: MAIN
Changes since 1.33: +33 -21 lines
Diff to previous 1.33
Give a warning in DERIVE-NODE-TYPE when we prove inconsistent types.  This 
is probably always a bug, but I don't want to use ASSERT until all 
the problems are fixed.
Changed RETURN optimization to call MAYBE-CONVERT-TAIL-CALL.
Updated for new tail-set semantics. 
Changed VALUES IR1 transform and SUBSTITUTE-SINGLE-USE-CONTINUATION to
clear out the old NODE-DERIVED-TYPE so that the type doesn't spuriously 
go to NIL.

Revision 1.33 - (view) (annotate) - [select for diffs]
Sat Nov 16 15:41:39 1991 UTC (22 years, 5 months ago) by ram
Branch: MAIN
Changes since 1.32: +7 -5 lines
Diff to previous 1.32
Fixed the VALUES IR1 transform (which discards unused values forms) to work
when there are no values forms.

Revision 1.32 - (view) (annotate) - [select for diffs]
Sat Nov 16 13:16:37 1991 UTC (22 years, 5 months ago) by ram
Branch: MAIN
Changes since 1.31: +45 -29 lines
Diff to previous 1.31
In MAYBE-TERMINATE-BLOCK, don't try it if either the block is DELETE-P
or has already been terminated.
In IR1-OPTIMIZE-MV-COMBINATION, don't do MV-LET optimizations on local
MV-CALLs that aren't MV-LETs yet.

Revision 1.31 - (view) (annotate) - [select for diffs]
Fri Nov 15 13:53:48 1991 UTC (22 years, 5 months ago) by ram
Branch: MAIN
Changes since 1.30: +46 -35 lines
Diff to previous 1.30
Made MAYBE-TERMINATE-BLOCK more cautious about using continuation type
information, since both the derived and asserted types can independently
spuriously be NIL during IR1 conversion.
Also, deleted some unnecessary (and wrong) checking of CONTINUATION-REOPTIMIZE
in IR1-OPTIMIZE-MV-COMBINATION.

Revision 1.30 - (view) (annotate) - [select for diffs]
Wed Nov 13 19:41:00 1991 UTC (22 years, 5 months ago) by ram
Branch: MAIN
Changes since 1.29: +33 -20 lines
Diff to previous 1.29
When optimizing combinations, don't do the "efficiency hack" of checking
whether any args have reoptimize set.  Most calls to IR1-OPTIMIZE-COMBINATION
that this inhibits are actually desirable.

Deleted assertion in JOIN-SUCCESSOR-IF-POSSIBLE.  This really can happen, and
DELETE-CONTINUATION should do the right thing.

Changed MAYBE-TERMINATE-BLOCK to take an explicit IR1-P flag.  Fixed it not to
consider deleted continuations to have type NIL.  Use DELETE-CONTINUATION on
the old continuation if it has no references and we aren't in IR1 conversion.

Revision 1.29 - (view) (annotate) - [select for diffs]
Sat Nov 9 22:10:37 1991 UTC (22 years, 5 months ago) by ram
Branch: MAIN
Changes since 1.28: +38 -3 lines
Diff to previous 1.28
Added MAYBE-TERMINATE-BLOCK, which looks at a combination node to see
if the result type is NIL.  If so, it stops the block and links it
to the component tail.
Changed IR1-OPTIMIZE-BLOCK to call MAYBE-TERMINATE-BLOCK.
Changed REOPTIMIZE-CONTINUATION to quietly do nothing when called
on an unused continuation.

Revision 1.28 - (view) (annotate) - [select for diffs]
Thu Oct 3 18:30:28 1991 UTC (22 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.27: +23 -19 lines
Diff to previous 1.27
Changed IR1 transform stuff to use TRANSFORM structures instead of conses so
that we can keep track of the transform note.

Revision 1.27 - (view) (annotate) - [select for diffs]
Thu May 16 00:25:56 1991 UTC (22 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.26: +5 -2 lines
Diff to previous 1.26
Inhibit continuation substitution when the let and ref have different policies,
so that we don't blow away type checks.

Revision 1.26 - (view) (annotate) - [select for diffs]
Mon Mar 11 00:38:58 1991 UTC (23 years, 1 month ago) by ram
Branch: MAIN
Changes since 1.25: +17 -2 lines
Diff to previous 1.25
Fixed let var substitution to not attempt to substitute references in different
components.  This can happen when we close over top-level variables.

Revision 1.25 - (view) (annotate) - [select for diffs]
Sun Mar 10 18:27:30 1991 UTC (23 years, 1 month ago) by ram
Branch: MAIN
Changes since 1.24: +3 -1 lines
Diff to previous 1.24
Added an assertion in single-use continuation variable substitution.

Revision 1.24 - (view) (annotate) - [select for diffs]
Wed Feb 20 14:57:49 1991 UTC (23 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.23: +8 -4 lines
Diff to previous 1.23
New file header with RCS stuff.

Revision 1.23 - (view) (annotate) - [select for diffs]
Wed Feb 20 14:41:16 1991 UTC (23 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.22: +1 -1 lines
Diff to previous 1.22
Weakened assertion in IR1-CONVERT-MV-CALL.

Revision 1.22 - (view) (annotate) - [select for diffs]
Thu Feb 14 20:44:33 1991 UTC (23 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.21: +43 -43 lines
Diff to previous 1.21
Fixed IR1-OPTIMIZE-MV-CALL not to convert calls with more than one arg,
and to convert the call immediately and check if it wins.

Revision 1.21 - (view) (annotate) - [select for diffs]
Mon Feb 4 17:55:15 1991 UTC (23 years, 2 months ago) by ram
Branch: MAIN
Changes since 1.20: +164 -28 lines
Diff to previous 1.20
Added IR1-OPTIMIZE-MV-COMBINATION, which dispatches to various
MV-combination optimizers depending on the kind of call.  We convert
newly discovered MV-BINDs local :MV-LET calls, and convert 
MV-CALLs to MV-BINDs if the argument count is known.  Also
added a VALUES-LIST IR1 optimizer that converts (values-list (list ...))
into (values ...).
These changes make inline expansion of functions that have &rest args
and do APPLY convert to FUNCALL.

Revision 1.20 - (view) (annotate) - [select for diffs]
Sun Jan 13 13:48:12 1991 UTC (23 years, 3 months ago) by ram
Branch: MAIN
Changes since 1.19: +2 -2 lines
Diff to previous 1.19
Fixed VALUES IR1 optimizer to do the REOPTIMIZE-CONTINUATION before
PROPAGATE-TO-ARGS so that we know that the first arg won't be deleted
yet.

Revision 1.19 - (view) (annotate) - [select for diffs]
Wed Jan 2 19:17:07 1991 UTC (23 years, 3 months ago) by ram
Branch: MAIN
Changes since 1.18: +166 -37 lines
Diff to previous 1.18
Mucho enhancements.
If we discover a known call, and that call has a source transform or is a
	
conditional, then we replace the function with a lambda that
just calls the function again.  This gives IR1 conversion another chance
to permute the call.
Changed IR1 transforms to test the function type with :STRICT-RESULT T
since this is almost always what you want when writing a transform.
In constant folding, if the call returns multiple values, change
the function to a call to VALUES, rather than just blowing off
constant folding.
Added DELETE-LET which deletes the bind node for a let when all 
its variables are deleted.  This cleans up the IR1 a great deal, enabling
some optimizations.
Added an IR1 optimizer for VALUES that converts MV-BIND/VALUES into a
LET (as long as the VALUES is the only use of the values continuation.)
This helps optimization of the results of IR1 transforms for multiple
value functions.
Added a IR1 transform for VALUES that discards all but the first
value when the context is not a multiple-value receiver.

Revision 1.18 - (view) (annotate) - [select for diffs]
Sun Oct 14 21:43:19 1990 UTC (23 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.17: +4 -2 lines
Diff to previous 1.17
Fixed REOPTIMIZE-CONTINUATION to set BLOCK-TEST-MODIFIED if the 
continuation goes to an IF.

Revision 1.17 - (view) (annotate) - [select for diffs]
Thu Oct 11 17:38:13 1990 UTC (23 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.16: +1 -1 lines
Diff to previous 1.16
Made CONSTANT-REFERENCE-P be an interface in the comment.

Revision 1.16 - (view) (annotate) - [select for diffs]
Fri Oct 5 19:50:00 1990 UTC (23 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.15: +5 -5 lines
Diff to previous 1.15
Inhibit substitution of let variables whenever the arg variable type is
not a subtype of the asserted type, not just when the arg *value* is 
nota subtype.  This is necessary to prevent representation selection
from being defeated.

Revision 1.15 - (view) (annotate) - [select for diffs]
Wed Oct 3 17:33:00 1990 UTC (23 years, 6 months ago) by ram
Branch: MAIN
Changes since 1.14: +38 -13 lines
Diff to previous 1.14
Changed the failed optimization stuff to record one note for each
failed transform, instead of just one per call.  Also, when a transform
quietly gives up, blow away any old note for that transform.

Revision 1.14 - (view) (annotate) - [select for diffs]
Thu Sep 6 17:38:33 1990 UTC (23 years, 7 months ago) by wlott
Branch: MAIN
Changes since 1.13: +1 -1 lines
Diff to previous 1.13
Fixed the proclaim of continuation-type to return a ctype, not a type.

Revision 1.13 - (view) (annotate) - [select for diffs]
Fri Aug 24 18:35:27 1990 UTC (23 years, 7 months ago) by wlott
Branch: MAIN
Changes since 1.12: +2 -0 lines
Diff to previous 1.12
Merged MIPS branch with the trunk.

Revision 1.12 - (view) (annotate) - [select for diffs]
Tue Jul 24 22:08:40 1990 UTC (23 years, 8 months ago) by ram
Branch: MAIN
Changes since 1.11: +1 -1 lines
Diff to previous 1.11
In PROPAGATE-LET-ARGS, propagate the arg type to the refs before
substituting rather than after, since after substituting, there are no
refs to propagate to.

Revision 1.11 - (view) (annotate) - [select for diffs]
Mon Jul 23 14:27:42 1990 UTC (23 years, 9 months ago) by ram
Branch: MAIN
Changes since 1.10: +27 -42 lines
Diff to previous 1.10
Lexenv changes, mostly usage of new block-flags block attributes instead
of separate boolean flags.

Revision 1.10 - (view) (annotate) - [select for diffs]
Sun Jun 17 13:42:37 1990 UTC (23 years, 10 months ago) by ram
Branch: MAIN
Changes since 1.9: +1 -0 lines
Diff to previous 1.9
Added CONSTANT-CONTINUATION-P assertion to CONTINUATION-VALUE so that we don't
lose again from people doing it on non-constant continuations.

Revision 1.9 - (view) (annotate) - [select for diffs]
Thu May 17 13:44:46 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Branch point for: eval_debug
Changes since 1.8: +5 -2 lines
Diff to previous 1.8
In SUBSTITUTE-SINGLE-USE-CONTINUATION, we also punt if either continuation has
some weird TYPE-CHECK annotation.  This prevents us from trashing type check
generation.

Revision 1.8 - (view) (annotate) - [select for diffs]
Wed May 16 10:59:55 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.7: +9 -3 lines
Diff to previous 1.7
Fixed JOIN-BLOCKS to combine many optimization flags it was ignoring.
Fixed continuation substitution stuff to look at the let's home lambda
so that we will sometimes do something.

Revision 1.7 - (view) (annotate) - [select for diffs]
Sat May 12 20:24:39 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.6: +58 -7 lines
Diff to previous 1.6
Enhanced let optimization:
Now we substitute for global function variables when the reference isn't
:notinline.
Also, single-reference let variables can be squeezed out by replacing
the ref's value continuation with the argument continuation.  The biggest
advantage of this is that it allows output type assertions on the reference
to be seen by the argument, which helps INCF, PSETQ, etc.

Revision 1.6 - (view) (annotate) - [select for diffs]
Wed May 9 11:32:40 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.5: +30 -2 lines
Diff to previous 1.5
Merged in MV-BIND type inference from the mips branch, and fixed to handle set
variables correctly.

Revision 1.5 - (view) (annotate) - [select for diffs]
Mon May 7 11:30:17 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.4: +12 -15 lines
Diff to previous 1.4
Rolled back to 1.2, since there seem to be serious problems with the
deleted-contiuation merging.

Revision 1.4 - (view) (annotate) - [select for diffs]
Fri Apr 27 11:45:00 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.3: +15 -16 lines
Diff to previous 1.3
Fixed JOIN-SUCCESSOR-IF-POSSIBLE a bit in the new case of the first block
ending in a deleted continuation.

Revision 1.3 - (view) (annotate) - [select for diffs]
Tue Apr 24 15:39:05 1990 UTC (23 years, 11 months ago) by ram
Branch: MAIN
Changes since 1.2: +6 -2 lines
Diff to previous 1.2
Changed JOIN-BLOCKS-IF-POSSIBLE to join when the first block's last-cont is
deleted.

Revision 1.2 - (view) (annotate) - [select for diffs]
Fri Mar 16 13:59:37 1990 UTC (24 years, 1 month ago) by wlott
Branch: MAIN
Changes since 1.1: +14 -7 lines
Diff to previous 1.1
Fixed TRANSFORM-CALL to return T or NIL to indicate whether to attempt
other transforms, and changed IR1-OPTIMIZE-COMBINATION to respect this.

Revision 1.1 - (view) (annotate) - [select for diffs]
Tue Feb 6 11:29:00 1990 UTC (24 years, 2 months ago) by wlott
Branch: MAIN
Initial revision

This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.

  Diffs between and
  Type of Diff should be a

Sort log by:

  ViewVC Help
Powered by ViewVC 1.1.5