[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ooc-970414 & oo2c-1.2.0



Hi.

This update fixes a _huge_ list of bugs, both in the compiler and in
the library modules.  Two of the bugs affected the very core of the
code generator, with potentially disastrous results.  I *strongly*
recommend everyone to upgrade to 1.2.0 asap.

A new optimization was added, dubbed "alias analysis".  It tries to
identify accesses to nonlocal variables, heap objects, and variable
parameters that are known not to alias with each other, and makes this
information explicit in the GSA code.  This creates more common
subexpressions and allows greater freedom during code scheduling.
Together with CSE it produces more compact C code and can decrease
execution time by another few percent.

An unsolved problem with unreachable code elimination forced me to
disable this part of the ConstPropagation module.  This means that
code will be included into the C files even if it's known that it will
never be reached.  Juergen has identified the problem, but wasn't able
to fix it yet.

A new tool was added to the distribution: ooef.  It's a simple filter
that'll convert error messages messages emitted by oo2c into a
different format.  

-- mva



Mon Apr 14 17:36:32 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/GenStatm.Mod (NewInstr):
	Fixed code generated with "Initialize=TRUE".

Sun Apr 13 18:19:38 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/lib/UpdateX11.Mod: Renamed XYplane to OakXYplane.

	* backend/ansi-c/lib/OakStrings.Mod, backend/ansi-c/lib/OakFiles.Mod, backend/ansi-c/lib/OakFiles.c:
	Initial revision

	* lib/LibSummary.Mod:
	Added these module to the list: Integers, JulianDay, OakStrings,
	OakFiles.  Some minor corrections.

Wed Apr  9 12:34:47 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* tools/ooef.Mod: Initial revision

	* frontend/ParseExpr.Mod (AccessVar): Removed obsolete code.

	(Designator): Take side-effects during calculation of an array index
	into account.

Tue Apr  8 16:42:37 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* optimizers/GateReduction.Mod (TraverseGates):
	Made gate replacement less aggressive to avoid
	problems with unreachable code elimination during constant propagation
	and decrease register pressure by a (very small) fraction.

	* backend/ansi-c/oo2c.Mod:
	Added alias analysis to set of optimizations, both standard and
	enhanced.

Mon Apr  7 15:05:40 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/Schedule.Mod (DataDependencies):
	Anti-dependence between a field (or element)
	update and a corresponding access wasn't detected.

Sun Apr  6 08:00:13 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/Allocate.Mod (GlobalRegion):
	Added code to create copies of scalar value parameters
	if they are overwritten in the procedure.

	(CoalescesRanges): Sometimes two live ranges entering a gate were
	merged although they conflicted with each other.  It's beyond me how
	the compiler could ever work with this kind of bug  :-O

Sat Apr  5 13:06:56 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/Schedule.Mod (DataDependencies):
	Enforce more strict ordering of update and access
	operations on $store.

	* frontend/ParseStatm.Mod (AssignToDesignator):
	Don't attempt an assignment if the designator is
	broken.

	(ProcedureCall): Make sure that values passed to variable or
	structured parameters represent the correct value of the variable just
	before the procedure is activated.

Thu Apr  3 10:41:35 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/lib/SysClock.c: Initial revision

	* backend/ansi-c/lib/SysClock.Mod: Now implemented as foreign module.

Wed Apr  2 21:05:13 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* optimizers/AlgebraicTransformation.Mod (ArithmTransform):
	Fixed transformation "0-a" to "-a".

	* backend/ansi-c/Config.Mod, backend/demo/Config.Mod: Allow HALT(0).

Sun Mar 30 16:53:00 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/Schedule.Mod (DataDependencies):
	Added collect to list of access instructions.
	Some code cleanup.

	* frontend/ParseStatm.Mod (CollectToMem):
	Mark collect instructions with
	`Data.instrUniqueResult'.

	* frontend/Opcode.Mod:
	Clarification: A collect instruction is very tightly coupled to the
	instruction it feed its $mem value to.  Some optimizations and the
	scheduler treat a collect-instr-reclaim sequence as a single unit.
	Therefore certain optimizations (like commonon subexpression
	elimination) should be avoided on them.  A collect is always flagged
	with `instrUniqueResult'.

Fri Mar 28 10:38:13 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/Schedule.Mod (DataDependencies):
	Updated to work with new AliasAnalysis.

	* optimizers/AliasAnalysis.Mod:
	Code to remove unnecessary dependencies of access instructions upon
	updates is functional.  Still missing: improvements on updates,
	detection of unnecessary local copies of structured value parameters.

	* frontend/ParseStatm.Mod (AssignToDesignator):
	Added code to take side-effects into account
	that might have happened since the r-value of the designator was
	calculated.

	* frontend/ParseExpr.Mod (TypeTest):
	Transform code for "p^(R)" into the equivalent notation
	"p(POINTER TO R)^".

Thu Mar 27 18:33:03 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* frontend/Attributes.Mod (ArrayLength):
	The type of LEN(ARRAY n OF T) was depending on n,
	instead of being LONGINT always.

	* optimizers/AlgebraicTransformation.Mod (Transform):
	Fixed access of undefined field.  Fixed bogus
	transformation of neq instruction in RangeFolding.

	* frontend/ParseExpr.Mod (ConstExpr):
	Make sure that for integer constants the smallest
	possible type is selected.  Otherwise "CONST c=LEN(a);" will always
	assign the type LONGINT to `c', regardless of its value.

	* backend/demo/StdTypes.Mod, backend/ansi-c/StdTypes.Mod (Min, Max):
	Assign type CHAR to result of MIN(CHAR) & MAX(CHAR).

Mon Mar 24 20:53:01 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/lib/PosixFileDescr.c (flush_lines):
	The code to test whether a newline was part of the
	output stream triggered way too many flush operations.  Output to
	terminal should be faster now.

	* backend/ansi-c/GenDecl.Mod (Declaration):
	Added code to handle strange declarations like "TYPE T
	= ARRAY OF POINTER TO T" without core dump.

Sun Mar 23 12:42:33 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* frontend/UndefVar.Mod:
	Got rid of another wrong warning about an undefined variable.

Sat Mar 22 06:21:32 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* frontend/ParseDecl.Mod (DeclSeq):
	Changed handling of type declarations to allow for type
	definitions like "TYPE T = RECORD p: POINTER TO T END;"

	* tools/Browser.Mod:
	For record types that aren't exported but are implicitly part of the
	the symbol file (e.g. because one of their pointers is exported),
	write the full record declaration but put the name into brackets.

Fri Mar 21 07:13:14 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/lib/Files.c (call_open):
	Set just one permission bit when creating temporary
	files: user write.

	* frontend/ParseDecl.Mod (Receiver):
	Accept pointer to anonymous record for type of receiver.

Tue Mar 18 08:27:28 1997  Juergen Zimmermann  <jnzimmer@informatik.uni-kl.de>

	* optimizers/ConstPropagation.Mod:
	Fixed Bugbug which caused elimination of non-constant regions

Mon Mar 17 12:21:10 1997  Michael Griebling  <grieblm@trt.allied.com>

	* lib/LRealMath.Mod, lib/RealMath.Mod:
	round() procedure incorrectly rounded negative numbers.

	* lib/RealStr.Mod, lib/LRealStr.Mod:
	Fixed point output of 0.0 was deleting the leading zero.  The
	leading zero killing routine was made a bit less ambitious.

Sun Mar 16 14:52:13 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* backend/ansi-c/CodeGen.Mod:
	Added pseudo optimization "?" to list of procedures.  Given as part of
	an --opt argument it will write the GSA code to stdout, otherwise it's
	a noop.

	* backend/ansi-c/Classify.Mod (NoopUpdate): Major cleanup.

	* backend/ansi-c/Schedule.Mod (AddAccesses):
	Only add artificial arguments if the access aliases
	with the update.

	* backend/ansi-c/WriteGSAvC.Mod, frontend/WriteGSA.Mod (Id):
	Changed indentation of GSA statements.

Wed Mar  5 05:15:35 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* frontend/ErrorInstr.Mod (SetErrorEnv):
	Take pseudo gregs that are used to evaluate constant
	expressions into account.

Sun Mar  2 09:18:40 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* lib/TextRider.Mod:
	Added ClearError and ErrorDescr methods to Reader, Writer, and
	Scanner.

	* backend/ansi-c/GenStatm.Mod:
	Added code to handle type casts via SYSTEM.VAL from scalar to
	structured values and vice versa.

	* frontend/Opcode.Mod (type-cast):
	Add location to type cast operand when casting from a
	simple variable.

	* frontend/ParseStatm.Mod (PredefCodeGen):
	Add location to type cast operand when casting from a
	simple variable.

Sat Mar  1 16:44:26 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* frontend/ParseStatm.Mod (ProcedureCall):
	Mark a procedure call with `instrNotDead' if
	evaluation of the procedure may raise an exception.

	* frontend/SymbolFile.Mod, frontend/Error.Mod, backend/ansi-c/CodeGen.Mod, backend/ansi-c/Build.Mod:
	Added code to report file I/O errors.

	* frontend/ParseDecl.Mod (FinishRegion):
	Mark procedure with `instrNotDead' if it may raise an
	exception.

	* frontend/SideEffects.Mod:
	Take the possibility of a procedure raising an exception into account
	when calculating its side-effects on its callers.

	* frontend/ParseExpr.Mod:
	Fixed `a IN b' (again), where `b' is a legal expression but doesn't
	deliver a value of set type.

Fri Feb 28 19:40:22 1997  Michael van Acken  <acken@informatik.uni-kl.de>

	* optimizers/ConstPropagation.Mod (ConstantFolding):
	Added overflow checks after folding of
	REAL or LONGREAL operations.

	* backend/ansi-c/Allocate.Mod (AddToGlobal):
	Keep in mind that a global live range used in the
	backedge operand of a loop gate extends to the end of the loop; it
	doesn't end at the beginning of the region like other gate arguments.

Fri Feb 28 12:18:53 1997  Michael Griebling  <grieblm@trt.allied.com>

	* lib/LRealStr.Mod: Bug fix to avoid hanging on infinite numbers.
	Outputs "Infinity" for infinite IEEE numbers and
	"NaN' for illegal numbers.

	* lib/RealStr.Mod: Bug fix to avoid hanging on infinite numbers.
	Outputs "Infinity" for infinite IEEE numbers and
	"NaN" for illegal numbers.

	* lib/LRealConv.Mod, lib/RealConv.Mod:
	Updated Length routines to detect infinite and NaN numbers.

	* lib/LowLReal.Mod, lib/LowReal.Mod:
	Added IsNaN and IsInfinity query functions.