Bug 7458: Emit LLVM code-generator referenced externs

* sources/dfmc/llvm-linker/llvm-linker.dylan
  (link-all): Call emit-code-externs.
  ($code-extern-names): New constant listing referenced Dylan names.
  (emit-code-externs): New function emitting extern declarations for
   each name in $code-extern-names.
Bug 7458: Generate LLVM code for computations in IEPs.

* sources/dfmc/llvm-back-end/llvm-emit-code.dylan
  (*merge-operands-table*): New table for storing phi node operands
   for merge computations.
  (merge-operands-setter): New setter function.
  (add-merge-operands): New function for adding operands to a merge
   computation phi node.
  (emit-code): Bind *merge-operands-table* during code generation.
   Emit definitions for temporaries. Emit code for computations.
   Catch exceptions and replace function bodies with a return instruction
   when an error occurs.

* sources/dfmc/llvm-back-end/llvm-emit-computation.dylan: New file
  implementing temporary manipulation, temporary initialization,
  merge manipulation, and computation code generation.

* sources/dfmc/llvm-back-end/llvm-back-end.lid: Reference
  llvm-emit-computation.dylan.
Bug 7458: Add LLVM code generation test jigs

* Makefile.in (cli3, rtg, bootstrap-stage-4, cli4, testc, testl, xtestl):
  New pseudo targets for testing.
Bug 7458: Add raw aggregate layout computation to dfmc-modeling

* sources/dfmc/modeling/raw-types.dylan
  (raw-type-size on <&raw-aggregate-type>,
   raw-type-alignment on <&raw-aggregate-type>): Rewrite in terms of
   compute-raw-aggregate-layout.
  (compute-raw-aggregate-layout): Adapt from former compute-aggregate-size.
  (compute-aggregate-alignment): Removed.

* sources/dfmc/modeling/modeling-library.dylan
  (module dfmc-modeling): Export compute-raw-aggregate-layout.
Bug 7440: Add methods for printing LLVM types

* sources/lib/llvm/llvm-type-print.dylan: New file containing
  print-object and print-message methods.

* sources/lib/llvm/llvm-library.dylan
  (llvm-internals): Import printing modules.

* sources/lib/llvm/llvm.lid: Reference llvm-type-print.dylan.
Bug 7458: Generate LLVM mappings for raw struct types

* sources/dfmc/llvm-back-end/llvm-back-end-types.dylan
  (llvm-reference-type on <&raw-struct-type>): Construct an LLVM type
   for a <&raw-struct-type> (containing no bitfields).

* sources/dfmc/llvm-back-end/llvm-emit-debug.dylan
  (llvm-reference-dbg-type on <&raw-struct-type>): Construct LLVM
   debug metadata for a <&raw-struct-type>.
  (llvm-reference-dbg-type on <&raw-type>): Construct LLVM debug metadata
   for (a limited subset of) <&raw-type> instances.
Bug 7458: Change LLVM function call conventions to return MV count

Change the LLVM back-end so that functions return a structure
containing the primary return value and a count of the number of
available return values.

* sources/dfmc/llvm-back-end/llvm-back-end.dylan
  (<llvm-back-end>): New %mv-struct-type slot containing the raw struct
   type used for function returns.
  (initialize on <llvm-back-end>): Initialize %mv-struct-type.

* sources/dfmc/llvm-back-end/llvm-back-end-types.dylan
  (llvm-lambda-type): Change return type to return the struct type.
  (llvm-entry-point-type): Change return type to return the struct type.

* sources/dfmc/llvm-back-end/llvm-emit-code.dylan
  (emit-code): Return the dummy value as a struct.

* sources/dfmc/llvm-back-end/llvm-emit-type-check.dylan
  (do-emit-instance-cmp): Extract the primary value from the returned
   struct.

* sources/dfmc/llvm-back-end/llvm-emit-computation.dylan:
  (emit-call on <simple-call>): Use the struct type as the expected
   return type of function calls. Extract the primary value from the
   returned struct.
  (emit-computation on <return>): Return values using the struct type.

* sources/dfmc/llvm-back-end/llvm-emit-debug.dylan
  (llvm-signature-dbg-types): Use the struct type as the expected
   return type of function calls in debug metadata.
Bug 7458: Include function and next-methods parameters in LLVM IEPs

* sources/dfmc/llvm-back-end/llvm-back-end-types.dylan
  (llvm-signature-types, llvm-dynamic-signature-types): Add next-methods and
   function parameters to IEP function type definitions.

* sources/dfmc/llvm-back-end/llvm-emit-debug.dylan
  (llvm-signature-dbg-types): Add next-methods and function parameters
   to IEP function debug type definitions.

* sources/dfmc/llvm-back-end/llvm-emit-code.dylan (emit-code): Include
  calling-convention parameters (next-methods and function) in the
  parameter list of generated IEPs.

* sources/dfmc/llvm-back-end/llvm-primitives-lambda.dylan
  (primitive-function-parameter): Define to return the value passed in to the
   IEPs function parameter.
  (primitive-next-methods-parameter): Define to return the value passed in to the
   IEPs next-methods parameter.

* sources/dfmc/llvm-back-end/llvm-emit-computation.dylan
  (emit-call): Pass undefined values for the next-methods and function arguments
   of called IEPs.
  (emit-computation on <slot-value>): Pass undefined values for the next-methods
   and function arguments of the unbound-instance-slot() IEP.

* sources/dfmc/llvm-back-end/llvm-emit-type-check.dylan
  (do-emit-type-check): Pass undefined values for the next-methods and
   function arguments of the type-check-error() IEP.
  (do-emit-instance-cmp): Pass undefined values for the next-methods and
   function arguments of type instance comparison functions.

* sources/dfmc/llvm-back-end/llvm-primitives-basic.dylan
  (primitive-slot-value): Pass undefined values for the next-methods
   and function arguments of the unbound-instance-slot() IEP.

* sources/dfmc/llvm-linker/llvm-linker.dylan
  (emit-init-code-definition): Pass undefined values for the next-methods and
   function arguments of init functions.
Bug 7458: Refactor LLVM 8-bit integer constant generation

* sources/dfmc/llvm-back-end/llvm-ops.dylan
  (i8): New function for returning one of the 256 canonical 8-bit
   integer constants.
  (op--overflow-trap): Use i8().

* sources/dfmc/llvm-back-end/llvm-emit-computation.dylan
  (emit-computation on <return>): Use i8().

* sources/dfmc/llvm-back-end/llvm-emit-code.dylan
  (emit-code on <&iep>): Use i8().
Bug 7458: Refactor LLVM back-end type-check-error call generation

* sources/dfmc/llvm-back-end/llvm-emit-type-check.dylan
  (op--type-check-error): New function for generating calls to the
   type-check-error function in the Dylan library.
  (do-emit-type-check): Change to use op--type-check-error().  Change
   the expected return type of the instance function touse the new MV
   struct convention.
Bug 7458: Adapt LLVM primitives to the new MV calling convention

* sources/dfmc/llvm-back-end/llvm-primitives.dylan
  (llvm-primitive-function-type): Make primitives that may potentially return
   "#rest" multiple values use the MV struct return type convention.