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