[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.