Nlcc Status
HPC and Data for Lattice QCD
Nlcc Status
Status
March 2006 : nlcc 0.6.0 released.
This release is based on a major reorganisation and clean-up of Nlcc source code. Although it tries to minimize behavior evolutions - in order to reduce the risk of regression- it also solves a set of major bugs.
Latest version: 0.6.0
The rpm files should be installable on most Linux
distributions.
It is designed to be used with the nrpm
installer!
The link always points to the
latest released rpm file. So the easiest way to upgrade is:
nrpm -U nlcc.rpm nlcc-default.rpm
The download package for nrpm packages is here.
See the official bug tracker.
Please send bug reports !!
If you send them, do so either
-
by submitting a request to
nextreq at ifh.de -
OR by submitting such a request directly via the
request tracker webpage.
In any case please include (not attach) a small program to reproduce the bug and include also the version number of nlcc (as given by 'nlcc -V').
Changelog:
* Wed Mar 29 2006 - 0.6.0
- Major code cleanup.
- Add management of the code location (PMSEC)
- Fixed bug major bug in register allocation system (RT-377)
- Fixed bug in loop unrolling without a scope definition (RT-383)
- Fixed bug in vector initialization (RT-381)
- Fixed bug in ASM parsing (clobber registers with no other arguments.).
- Fixed bug in wrapper (missing link resolution)
- Fixed bug for an undefined SEX_NLCC_STK_OVFL without os.
* Mon Jan 9 2006 - 0.5.5
- Change '-vitualregs' option into '-virtregs' for virtual register mode (H Req).
- Fix bug in sysvars.h for OS3 and OS7.
- Fix bug in cflow management : support of filenames with '-'
- Fix bug in code generation : RT-360 - Conversion between signed, unsigned to vectors.
- Fix bug in code generation : RT-368 - sboth and jump on the same line.
- Fix bug in initialisation parsing : RT-367 - multi-node initialisation of a vector.
- Fix bug in loop unrolling : RT-372 - correct and rewrite the computation with more control.
* Mon Nov 4 2005 - 0.5.4
- Fix bug in RPM installation procedure.
* Wed Nov 2 2005 - 0.5.3
- New ncpp preprocessor managing flow analysis. Solve bugs RT-341 and RT-355.
- Remove RPM dependences. Can be installed as a standalone compiler.
- Fix bug in vector code generation if where statement (sboth)
- Fix bug in register allocation system : management of the class.
- Fix bug in global pragma code generation.
- Call explicitly os macros os1, os3 and os7 with the -os[137] option.
* Thu Jun 17 2005 - 0.5.2
- fix bug in simplification of constant expressions for 64bits values.
- remove generation of pragma_pmseg pragmas.
- add a management of line return in code generation for long register to memory instructions.
- fix bug in code generation of variable arguments in virtual register mode.
- fix bug in register allocation of inlined asm code. Add a warning when allocation not possible.
- fix bug in section generation for static const global variables.
- fix bug in virtual register mode passing argument registers.
- add the flag -virtualregs in the wrapper for pure virtual register code generation.
- add a flag (-gp) for nperf compatible for source code in comment in .sasm files.
- add a warning for impossible loop unrolling (incorrect scope)
- add a warning for impossible function inlining (function body not declared)
- fix bug in unused inlined function code generation
- fix bug in pragma_pmseg generation
- fix various bugs in environment control and include path search.
- fix bug for the operating system environment selection solved (RT-333)
- set -os1 by default, add the -no-os to unactivate os code generation, add -os137 option for generic os support.
- set -M by default
- fix bug for the shaker calling.
* Thu Jun 11 2005 - 0.5
- new environment management
- implementation of a prefixed register access for virtual and physical registers
- correction of system register usage
- support of PRAGMA_SW_INFO PRAGMA_SW_REQ
- make -gl option compatible with nperf
- fix bug in pragma_maxphys generation for system generation
* Thu Mar 04 2005 - 0.4.91
- Correct bug in initialisation of variables values (RT-293)
- Add additional control over environment set for rcc compilation.
- Correct bug ignoring the -nlcc parameter specification (lcc installation path)
- Correct bug in nlcc occuring when the target specification do not appear early.
- Add option -gl for source code in comment in .sasm files.
- Remove test directory dedicated to original lcc compiler.
- Correct the initialisation sequence without any repetition.
- Add control over LCCDIR and add relative search based on the current directory.
- Add Doxygen comments in source files.
* Thu Jan 13 2005 - 0.4.9
- change compilation setup to allow parallel compilation
on different platforms
- re-change the handling of identical conditions in
where statements
- fix erroneous assembly output (bug 286)
- review all sources to enable mosty warning-free compilation
with icc and gcc also on x86_64 and ia64 platforms.
- remove setgid bit from rpm package (bug 301)
- fix erroneous call to xml_end() (bug 302)
- support register bitfields (bug304)
- allow vector integer types in various binary operations (bug 305)
- add missing opcodes to simplify() (bug 306)
* Wed Aug 18 2004 - 0.4.8
- change a bug in the spill-checker
- burstify argument spilling
- modify the output routines to enable better debug output
- add framework to write XML debug file
- fix bug in handling of VLAs (req #275)
- fix a typo in the machine descript. for vector unsigned
arguents (req #279, #270)
- remove a wrong warning from the cflow source preprocessor
* Tue Aug 10 2004 - 0.4.7
- fix a bug introduced in nlcc 0.4.6 that gave an internal error
when returning structs from a function.
- fix a problem in the initialization of temporary unions inside
where blocks.
* Fri Aug 6 2004 - 0.4.6
- fix bug #266 (call to reference check in wrong scope)
- fix bug #270 (not reporting reference to register embedded array)
- fix bug #271 (not reporting forbidden rel.operators for complex)
* Thu Aug 5 2004 - 0.4.5
- fix an embarassing bug in the address generation part for cases where
arrays are accesses with remote offset via pointers.
- fix an unrelated but similar bug in the code selection for local
addresses that screwed up addresses.
- fix LBA generation for negative offsets.
- allow setting paths to assembler, shaker, etc. via -Wx=path
* Mon Jul 26 2004 - 0.4.4
- fix a missing type check in the reg-alloc for unions that contain
vector int fields (bug #257)
* Fri Jul 23 2004 - 0.4.3
- change type error into warning when discarding qualifiers in arguments
- add more support for unsigned char
- fix spilling of char type variables
- remove extraneous bank initializers when unspilling doubles.
- fix an erroneous 'unsigned' cast for pointer differences
- support for the __func__ identifier (req. by C99)
- support for compiler part of function pointers
- re-enable the loop unroller (#pragma unroll)
- fix implementation of conditionals that contain calls.
- fix where implementation in case of CSE of conditions
- disallow flow control in where statements (#244, #236)
- fix some nodeprivate handling (#240)
- fix extra padding bug (#243)
- fix label generation in general (renaming etc, also bug #239)
- fix bug in inline assembly output-to-memory handling
- support for PM segments
* Thu Jun 17 2004 - 0.4.2
- add forgotten vector type argument handling
- fix initialization of register variables that are used in
where conditions
- fix emission of function end labels.
- fix emission of declared labels.
- inhibit warnings about missing prototypes for builtin functions.
- support for '#pragma free_qtr'
- support for external libc header files
- fix bug in inline assembly that lost some parsed trees.
- fix bug in blkcpy routine (access to wrong registers)
- support for vector int and vector unsigned types
* Mon Mar 22 2004 - 0.4.1
- add missing initialization of the float high bank when reading from
union fields
- allow turning off of some optimizations, notably CNORM contraction
- add support for named struct field initializers
- fix the handling of pragmas in some special nesting situations
- add support for '#pragma STDC FP_CONTRACT'
- fix spilling of some single-bank written registers
- fix missing high-bank initialization of .re/.im assigned double arguments
- add extra check for binary complex operators
- add support for printf() and fprintf()
* Tue Feb 3 2004 - 0.4
- complete rework of the 'where' implementation to allow also
evaluation of instructions with side effects.
fixes also bug #208
- complete rework of the inline assembly
addresses bug #191
- updated ABI in order to accomodate dynamic allocation and variadic
functions
- introduce command line arguments and #pragmas for fine tuning of
structure alignment
- evaluate conditionals using 'where' if possible
- introduce descriptive comments in assembly output
- fix wrong output of constants near the type range borders
- fix for #pragmas consuming an instruction slot (bug #209)
- fix some missing type checks that failed in case of function pointers
(bugs 211 and 212)
- support for OS1
- Fix a small bug in the slice parser.
- Fix a small bug for 'const' parameters to inline functions.
- Fix a bug in the privatization of function symbols in inline
functions.
* Thu Jan 15 2004 - 0.3.42
- fix accidental removal of structure return address
- fix for bad opcode emitted in some address calculations
* Tue Nov 4 2003 - 0.3.41
- fix a wrong address expression emitted by alloca()
* Wed Oct 22 2003 - 0.3.40
- fix a bug in the inlining code that forgot to rename some
local labels
* Fri Oct 17 2003 - 0.3.39
- fix detection of call inside where blocks
- fix internal cast bug for __typecode()
- fix conditionals with complex constants
- fix a bug where required local memory acccess was not done without
optimization
- fix a bug in referencing inline functions
- make vector type where conditions more strict and synchronize
both banks, introduce '#pragma vectorcond' for reversing this
- improve data alignment for structures
- support for inline initialzation of structures and generation
of anonymous temporary (initialized) structs
* Wed Sep 17 2003 - 0.3.38
- fix prevention of CSE for pointers to registers
- fix bug #195 ( generate warning when running out of registers
while allocating regsets )
- fix wrong lookup of identifiers in case of same-name register variables
in different scopes.
- 'pointer-of-single-bank' errors are more severe now and cause
immediate exit
* Tue Sep 16 2003 - 0.3.37
- support for variable length arrays (VLAs)
- experimental LBA support for accessing indirect regster arrays
- improved block copy routine
- fix a number of mtr/lmtr issues with block copying
- fix a bug in the CSE killing for derived register symbols
- fix a bug in auto/register decision for derived local symbols
- fix initialization of bitfields (bug #178)
- fix id generator for multiply indirected local array elements
- fix for bug #190 (type qualifier in unexpected location)
- implementation of an auto-extending virtual register set (bug #182)
- add support for C99 hex floating point contants
- The -o flag didn't always work. Fixed.
- fix a number of wrong or missing high-bank initializations
* Tue Jul 15 2003 - 0.3.36
- fix a scoping problem with arguments of inline functions
- allow -o and -E options together.
- fix an erroneous 32bit constant used in unsigned negation
and some other 32/64 bit problems with constants
- fix missing leading '$' in some expape macros
- fix a symbol lookup error for same names in different scopes.
- enforce binary tree switch handling also for case lists
with maximum density
- fix a number of typos in the machine description
- complete rework of the where-handling
- support of unsigned conditions
- rework of the write-log for registers to fix
occasional extra spills
- slightly improved fabs() function in math.h
- re-enables the shaker's register renamer at the cost of some
physical registers when using inline functions
- fix some problems with initilialization of single banks
- add alloca support
- enforce register variables in all library
functions.
* Fri Mar 14 2003 - 0.3.35
- add a missing check for nodeprivate when doing local memory
optimization
- rework of the stacklevel detection and forced initialization
of _all_ used temporary registers in where blocks
- fix two mis-spelled instructions
- fix the paths to helper applications in 'ncpp'
- lower the use_count level necessary to become a
register variable.
- fix bug where forced localmem was missing for regsets
- fix a bug in the internal array size calculation
- fix an erroneous assert in the spill code
- fix case insensitivity and parsing in 'un-symbolize' helper.
* Tue Feb 18 2003 - 0.3.34
- fix the installation of generated locals in the symbol table
-> better CSE support
- nodeprivate qualifier support (for local memory access)
- generated address temporaries receive a 'nodeprivate' qualifier
to make them eligible for local memory optimizations.
- #pragma localmem support
- fix a bug in queue.h which didn't produce a correct AGU_DR
- fix a inot bug again
- fix a bug in else branch handling for constant where conditions
- fix req#121: single bank problem in inline assembly
- compiler support for C99 '//' style comments
- fix structure return bug for inline functions
- provide both internal and external linkage for inline
functions.
- preliminary support for Sofan post-optimization
- fix several bugs where the register spill code ignored
the register lifetime or misinterpreted regsets.
- some smaller C99 conformance fixes.
- add support for slice specifier in global initializers.
- run an extra flow analyzer step before the
preprocessor to reduce the code size.
- support for C99-style initializers in for loops
for ( int i=0 ; i< nl i++)
* Thu Oct 24 2002 - 0.3.33
- clean up the global contructors and put them in a defined place
- addressing modes were messed up by a too short int (triggered by lcc-4.2 update)
- remove erroneous write_double routine (#defined -> write_float now)
- fix a case in inline assembly that didn't work without -O
- add LOCAL direction to topology.h
- try to fix a bug reported in comp.compilers.lcc
- fix where-handling broken by last releases
* Wed Oct 2 2002 - 0.3.32
- re-insert missing argument passing checks to allow register structs as
args.
- fix bug in space allocation of return value when inlining (crashed w/o -O)
- better detection of access to embedded register arrays
- fix typo in FP constant folding and do it now IEEE mode on X86.
- int constants are now also in both banks (was forgotten in earlier releases)
- fix where-condition handling for constant conditions
- fix output of large offsets , now in hex, and their conversion for .no files.
* Fri Sep 20 2002 - 0.3.31
- add a missing "unqualify" for a type check
- re-introduce ABI change to allow passing struct function return values
into reg structs
* Thu Sep 19 2002 - 0.3.30
- fix bug in caller argument offset
- better 'cpp' detection in installed wrapper scripts
- pass again '-noregrename' to shaker (found a case where it's still necessary)