TCE 1.5

Milestone information

Pekka Jääskeläinen
Release registered:
No. Drivers cannot target bugs and blueprints to this milestone.  

Download RDF metadata


Assigned to you:
No blueprints or bugs assigned to you.
3 Heikki Kultala, 2 Otto Esko, 9 Pekka Jääskeläinen
No blueprints are targeted to this milestone.
1 Invalid, 14 Fix Released

Download files for this release

File Description Downloads

Release notes 

This release includes support for LLVM 3.0, experimental OpenCL C Embedded Profile support (in offline compilation/standalone mode), a light weight (debug output) printing library, support for calling custom operations in specific function units, generalizations to the architecture description format to allow using the instruction scheduler for operation triggered architectures (with a proof of concept for the Cell SPU), several code generator improvements and plenty of bug fixes.


View the full changelog

Notable changes and features
- Support for LLVM 3.0.
  LLVM 2.9 might still work but is unsupported.
  Dropped support for LLVM 2.8 and older.
- Experimental OpenCL C Embedded Profile support in offline compilation
  mode (we call it the OpenCL "standalone mode").
- tcecc: Floating point emulation code is not included by default anymore,
  use --swfp in case you use floating points and your machine does
  not support them.
- bclib: added a Light Weight PRinting library. Small functions useful
  for debug printouts.
- Support for calling custom operations to be executed in specified
  function unit (e.g. _TCEFU_ADD("ALU8", A1_Cb, A1_Cr, result2)).
  Thanks to Hervé Yviquel for the patch.
- Generalizations to the architecture description format to allow
  using the instruction scheduler for operation triggered architectures.
  The Cell SPU is the proof of the concept architecture which can be
  scheduled for out-of-the-box with LLVM 3.0 (see tcecc-spu).

- HDB: Hardware bug fix for load-store units in hibi_adapter.hdb and
  Global lock signal might cause pipelined load result to be ignored.
- tcecc: Scheduler could sometimes fail to schedule on sparsely connected
- OSEd: OSEd crashed when selecting an operation for which there was no
  simulation model in an otherwise valid .opb.
- OSEd: Reload modified simulation functions from a rebuilt simulation
  function module (.opb) (Bug 179).
- OSEd: Renaming an operation might cause osed to crash.
- OSEd: Checking of operation with same name already exists was broken.
- OSEd: When new operation is created, the DAG can now be edited immediately
  without false error messages about missing outputs.
- ProDe: Bit width calculation of address spaces was incorrect if max-address
  was power of 2.
- tcecc: standard libcalls are now converted to cheaper ones again using
  the llvm -simplify-libcalls (e.g. printf("foo\n") -> puts("foo").
  This was broken due to adding -fno-libcall switch as default. Now it's
  added only while building Newlib.
- Build system: Fixed build when --as-needed is used as link flag by some of
  the libraries.
- 1-bit global constants had invalid size calculation. This could cause
  compiler to fail to write program.
- tcedisasm: the starting address of data section initialization
  output was computed wrongly.
- generatebits: MIF data image output had a rounding error which led to
  missing data words at the end of image in case the number of words was
  not divisible with the row width.
- OSAL DAG language had broken illegal recursive dag detection, which
  resulted some legal DAG's not to be used. This happened in cases
  where same operation was used multiple times inside a dag.
- OSAL: Added check of operation DAGs which do not write to some output
  operand. Refuse to load this kind of broken DAGs.
- OSAL DAG language could not recursively use smaller patterns as
  part of bigger patterns in instruction selection.
- tcecc: fail with an error in case the compiled program uses dynamic
  stack objects (not yet supported by tcecc) instead of silently
  producing invalid code.
- Do not save the backend plugins to disk while running the design
  space exploration. This caused disk space fillup with long explorations
  and small hard disks.
- Proxim: clicking OK on the options dialog crashed Proxim in case a simulation
  was not initialized.
- ProDe: fixed a crash when checking programmability on a machine with more
  than 1 boolean registers/no boolean register files.
- tcecc: On some platforms an exception thrown when a symbol (usually a
  from a call to a function not linked in) crashes at LLVM/TCE library
  boundaries. Moved the exception handling closer to the call position
  to produce a graceful error message printout for this case.
- Proxim: the configuration file was not saved to the correct location in
  the user home dir.
- tcecc: fixed an issue compiling multiple source code in the same
  command line with the same basename (but with a different suffix or

Code generator improvements
- Introduced jump with negative guard to llvm. This makes llvm's
  BranchFolding pass to generate more sane CFGs, and should result
  in slightly better code being generated.
- Can rename registers during scheduling
- Does not save return address to stack in leaf functions.
- Alias analysis of LLVM is now exploited in DDG building to improve
- TCE instruction scheduler CFG is now generated directly from the LLVM CFG.
  The old "builder" that builds the TCE CFG from a "flat" program
  representation can still be used with --old-builder parameter, but this
  disables also some other new features and will be removed in the next
  TCE release.
- A major reorganization of the phases in the compiler backend. The memory
  consumption of the compiler should be now smaller, but compile time for
  small programs longer. NOTE: The old scheduler configuration system is now
  deprecated (not used with the default tcecc options) and will be removed in
  the next release.

Smaller features
- ProGe: switch -s that can be used to define a separate directory for
  files that are potentially shared between multiple TTA processors in
  the same (heterogeneous) TTA multicore design.
- ProGe and PIG: the string given with --entity-name is now used to make
  the generated VHDL entity etc. names unique to allow easier
  instantiation of multiple TTA cores in designs.
- tcecc: support for LLVM assembly files (.ll) as input.
  Thanks to Hervé Yviquel for the patch.
- ProGe: test bench generation is now disabled by default, use '-t'
  to generate the test bench.
  Thanks to Hervé Yviquel for the patch.
- ProGe: HDL-file compilation order in Modelsim compilation script is
  now fixed. Thanks to Vinogradov Vyacheslav for the patch
- tcedisasm now outputs to filename.tpef.S by default.
- generate_cachegrind now uses line numbering and counts NOPs per
  instruction in case an assembly file is present as foobar.tpef.S.
- Generatebits prints out info about the imem usage and instruction compression
  with the verbose flag (-v).
- tcecc: added switches --bypass-distance, --bypass-distance-nodre and
  --no-kill-dead-results to control the software bypassing aggressiveness and
  the dead result elimination.
- explorer: added switch --compiler_options="XYZ" to pass XYZ to tcecc when
  calling it from during exploration.

Usability features
- ProGe: Reasonable error message when implementation for some FU is invalid.

External interface changes
- OSAL.hh: removed RUNTIME_ERROR_WITH_DATA as it's a too specific helper
  for OSAL API. Let's keep it minimal and clean.

- Documented the different "datapath connectivity levels" and
  their support in TCE.
- Added an "Unsupported C Language Features"-section.
- Added and fixed documentation on the floating point TTA designs.
- Added some documentation about the dialog used to define operation operand
  bindings and timings to a function unit in ProDe.
- Added hints about avoiding the most common bottlenecks on TTA designs with
  the current TCE compiler.
- Added some documentation for the OpenCL support.

0 blueprints and 15 bugs targeted

Bug report Importance Assignee Status
887437 #887437 LLVM not found by the configure in case installed to a non-standard location 4 Medium Pekka Jääskeläinen  3 Invalid
898568 #898568 Undefined synthesis results of unconnected sockets can lead to major problems in implementation generation 2 Critical Otto Esko  10 Fix Released
903176 #903176 OSEd refuses to save operation after edit 2 Critical Heikki Kultala  10 Fix Released
903190 #903190 Processor generation from ProDe is still broken 2 Critical Otto Esko  10 Fix Released
889165 #889165 OSEd does not save the source code editor setting 3 High Pekka Jääskeläinen  10 Fix Released
889180 #889180 Proxim crashes when clicking OK in the options dialog 3 High   10 Fix Released
890358 #890358 Proxim does not save the configuration file to the user home directory 3 High Pekka Jääskeläinen  10 Fix Released
887348 #887348 long explorations fill up the disk space due to the compiler backend cache 4 Medium Pekka Jääskeläinen  10 Fix Released
887436 #887436 build files of tar ball requiring the 'test' directory 4 Medium Pekka Jääskeläinen  10 Fix Released
889542 #889542 document the ProDe function unit hardware operation dialog 4 Medium Heikki Kultala  10 Fix Released
890183 #890183 Prode crashes during the verification of partially connected TTA 4 Medium Pekka Jääskeläinen  10 Fix Released
890359 #890359 Proxim misses the toolbar commands when deleting them 4 Medium Pekka Jääskeläinen  10 Fix Released
894816 #894816 exception aborts the program on x86-32 when a program refers to an external function 4 Medium Pekka Jääskeläinen  10 Fix Released
901239 #901239 add a configure check for a correctly built LLVM 4 Medium Pekka Jääskeläinen  10 Fix Released
890276 #890276 Renaming an operation may crash osed 1 Undecided Heikki Kultala  10 Fix Released
This milestone contains Public information
Everyone can see this information.