Status As Of August 1, 2006

HLVM is steadily progressing towards release 0.2. Here is the status of HLVM between revisions #359 and #438.

General Update

  • Work is steadily progressing towards the 0.2 release. We are now about 75% done for the 0.2 release.
  • Most of the 0.2 milestones have already been accomplished. What remains is to finish up the real number arithmetic operators, finish the test case generator (and any bugs it turns up), and implement JIT execution via LLVM.
  • Lines Of Code in HLVM: 31044
  • Lines Of Doc in HLVM: 3282
  • Code Productivity: 443 loc/day
  • Total Productivity: 490 lines/day
  • Progress slowed a bit in July as Reid had to attend to an out-of-town consulting engagement for two weeks.

Functionality Changes

  • There are now 127 node types in the AST. This is down a bit from the previous status update since the intrinsics were removed as separate node types. Instead, they are just named instances of other node types.
  • There is now an intrinsic type name tokenizer. The RNG file is in the hlvm/AST/Intrinsics.rng file.
  • All ConstantValue classes except ConstantExpression are implemented. It is now possible to represent a constant of all the types HLVM currently supports.
  • Resolved confusion about Arguments, Parameters, NamedTypes, NamedValues, etc.
  • Removed the Alias type as it wasn't useful. Each type definition is an alias for a type.
  • Removed the "atom" element from the XML syntax. It was redundant as we now just use "intrinsic" directly.
  • Octet types and their literal constants are now implemented.
  • Bundles may no longer have empty content.
  • Significant improvements were made to the validation of AST trees.
  • The LLVMGenerator.cpp file got simplified by splitting out the LLVMEmitter class which handles the LLVM instantiation and code generation state.
  • Linkables are now Constants because the address of a linkable (variable or function) is constant (after linking).
  • Type resolution was re-implemented. It now handles recursive types properly and is somewhat transparent.
  • The node dumper was vastly improved. It now uses new interfaces in the PassManager to allow dumping of individual nodes (types, variables, functions, operators, etc). You can access it from the debugger via hlvm::dump(Node*) function.
  • The IndexOp operator was broken into a two operators: GetIndexOp and GetFieldOp. The former for UniformContainerTypes, the latter for DisparateContainerTypes. This simplifies the whole business of indexing the container types.
  • The ReferenceOp was renamed to GetOp since it is so frequently and the word "get" more accurately describes its function.
  • Function argument handling is now implemented.
  • There is a new ConvertOp for type conversion of first-class values. It is akin to the LLVM CastInst. Code generation for non-first-class values has not yet been implemented.
  • The NInf, PInf, and NaN operators have been removed. There is no need to provide operators for these values. Instead the IsPInf, IsNInf, and isNan operators can be used to determine if a floating point value is one of the special values.

Test Case Changes

  • The main focus in the past month has been to get the automated test case generator to generate better test cases. It now generates HLVM programs that use most of the defined operators and types. Not all of them, however, result in compilable tests. This will be remedied soon.
  • Numerous bugs have been found and fixed as a result of the test case generator

Documentation Changes

  • Not much progress here. Although it looks like I will be writing the reference manual for the AST nodes soon.
  • One significant change: Chandler Carruth validated the "sanity" build instructions in the Developer's Guide. He made several suggestions and corrections to the documentation to ensure correct building of HLVM and all its dependent software.

Other Changes and News

  • None.

Back To Status Index