[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
ooc-961022
Hi.
There has been considerable progress with oo2c over the last week.
Quality of emitted code made a huge jump from merely emberrassing to
quite good. I did a little benchmark with oo2c itself: the executable
produced by the oo2c/gcc combination actually ran 10% faster than that
of o2c/gcc. I expected the opposite, since oo2c outputs very
obfuscated code with lots of fine granularity instructions. In short:
oo2c does not build C code, but rather assembler that looks like C. I
don't have any explanation for the speedup, but it sure came as
pleasant surprise.
Noteworthy changes:
o a small change in the front-end speed up compilation by 20% and
reduced memory consumption by the same amount; the price for this is
that doing really ugly tricks with SYSTEM.ADR might not get the
result you want; see file frontend/doc/SE0.Mod for details
o oo2c now builds `flat' code; control flow is implemented by `goto'
resp. `if (..) goto' -- instead of ifs around compund statements;
with this the output comes real close to assembler; the control flow
transformation is implemented in a seperate, quite generic module:
backend/ansi-c/ControlFlow.Mod; code generation was also cleaned up
considerably
o the predeclared types SET8, SET16, and SET32 have been defined in
module SYSTEM; see frontend/doc/SetExtension for the specs
o a bunch of misc bug fixes
Btw: Is anyone interested in having smaller distribution resp. patch
files? I could add bzip compressed files to the ftp server. This
would save an additional 25% in file size.
-- Michael
ChangeLog Oct 16 to Oct 22:
Tue Oct 22 05:16:14 1996 Michael van Acken <acken@informatik.uni-kl.de>
* backend/demo/CodeGen.Mod:
Removed optimization option DependenceAnalysis (`d'). Now done by the
front-end (if in a somewhat optimistic way).
Tue Oct 22 04:15:02 1996 Michael van Acken <acken@informatik.uni-kl.de>
* backend/ansi-c/Classify.Mod, backend/ansi-c/GenConst.Mod, backend/ansi-c/StdTypes.Mod, backend/ansi-c/WriteGSAvC.Mod, backend/demo/StdTypes.Mod, frontend/Data.Mod, frontend/Opcode.Mod, frontend/ParseExpr.Mod, frontend/ParseStatm.Mod, frontend/SymbolFile.Mod, frontend/SymbolTable.Mod, frontend/WriteGSA.Mod, frontend/WriteSymbols.Mod, optimizers/AlgebraicTransformation.Mod, optimizers/ConstPropagation.Mod, tools/Browser.Mod:
Added support for SYSTEM types SET8, SET16, and SET32.
Mon Oct 21 22:15:09 1996 Michael van Acken <acken@informatik.uni-kl.de>
* backend/ansi-c/oo2c.Mod (RunMake):
Use `VerboseMsg' to write name of compiled module.
* backend/ansi-c/CodeGen.Mod (WriteSymbolFile):
Use `VerboseMsg' to tell if a symbol file has
changed.
* optimizers/GuardPropagation.Mod (Propagate):
Don't replace string variables with a constant, even if
they are guarded by an `equal' predicate.
* backend/ansi-c/Allocate.Mod (IntegrateInstruction):
Fixed handling of gate arguments when
integrating a non-loop merge into its enclosing region.
* frontend/SideEffects.Mod:
Removed opcodes access-local and update-local. The introduction of
the struct-copy instruction made them obsolete.
* backend/ansi-c/Schedule.Mod:
Made it work again after access/update-local were removed.
* backend/ansi-c/GenStatm.Mod, backend/ansi-c/WriteGSAvC.Mod, backend/ansi-c/Classify.Mod, frontend/ParseStatm.Mod, frontend/ParseExpr.Mod, frontend/Check.Mod, frontend/WriteGSA.Mod, frontend/Opcode.Mod:
Removed opcodes access-local and update-local. The introduction of
the struct-copy instruction made them obsolete.
* backend/ansi-c/ControlFlow.Mod: Initial revision
* backend/ansi-c/GenStatm.Mod (AccessInstr, UpdateInstr):
Fixed code generation for GET/PUT.
* backend/ansi-c/CodeGen.Mod:
Removed optimization option DependenceAnalysis (`d'). Now done by the
front-end (if in a somewhat optimistic way).
* backend/ansi-c/Classify.Mod (NoopAccess):
Extended predicate to compare address of access with
that of usage.
* frontend/doc/SymbolFile.ebnf: Changed magic key of symbol files.
* frontend/SymbolFile.Mod (WriteUsedImports):
Sort written modules alphabetically. Otherwise it
can happen that a symbol file written as part of a make differs from
the one that is generated when compiling just the module.
* frontend/ParseStatm.Mod (CollectToMem, ReclaimFromMem):
Only add marked local variables to the
collect/reclaim.
(ProcedureCall): Only collect/reclaim local variables whose addresses
are passed directly to the called procedure. If the caller gets the
address of a local variable in such a way, its value is forced into
$mem and after the call retrieved from $mem (if necessary). Otherwise
it may stay in a register. This can cause (very minor) problems in
connection with convoluted usage of SYSTEM.ADR, but this is more than
compensated by gains in both speed and memory consumption.
* frontend/Attributes.Mod (Address):
When calculating the address of a nonlocal variable, use
the value passed through enter. This way it's recognized as part of
the procedure interface.
Sat Oct 19 18:21:57 1996 Michael van Acken <acken@informatik.uni-kl.de>
* backend/ansi-c/GenStatm.Mod (WriteDyOp):
Combine operator into assignment resp. use post increment
(post decrement) whenever possible.
* backend/ansi-c/Allocate.Mod (EmitVariables):
Assign storage class `register' to temporary
variables.
* frontend/ParseExpr.Mod (Factor):
The dynamic type of a pointer wasn't accessed if the pointer
value was the result of a function call.
* backend/ansi-c/GenStatm.Mod (GlobalRegion, Region):
Major cleanup in code generation.
* backend/ansi-c/CodeGen.Mod (TranslateGreg):
Moved transformation GSA control flow --> linear
instruction sequence into separate module ControlFlow.
* backend/ansi-c/Build.Mod (Makefile):
Write own rule for generated executable into makefile.
* frontend/Opcode.Mod:
Adjusted maxOpcode. Made procedure RegionMerge more robust.