Construct partially instantiated direct arg functor values.

Construction unifications of partially instantiated values involving direct
argument functors (where the single argument is free) did not generate any code
in both low-level and high-level backends.  Incorrect behaviour could result if
the program tried to deconstruct the value at run-time.

Also, in the LLDS backend, such a construction unification did not enter the
variable into the var_state_map, leading to a compiler abort when the variable
is looked up.

compiler/ml_unify_gen.m:
	Generate code for constructions of a direct arg functor with free
	argument.  This amounts to assigning a variable to a tagged null
	pointer.

compiler/llds.m:
	Add an rval option `mkword_hole', which is like `mkword' but the
	pointer to be tagged is unspecified.

compiler/unify_gen.m:
	Assign a variable to an `mkword_hole' rval, for a construction
	unification of a direct arg functor with a free argument.

	Reassign the variable to an `mkword' rval when the argument becomes
	bound in a later unification.

compiler/code_info.m:
compiler/var_locn.m:
	Add a predicate to reassign a variable from a `mkword_hole' expression
	to a `mkword' expression.

compiler/llds_out_data.m:
	Write out `mkword_hole' values as a tagged null pointer in C code.

compiler/call_gen.m:
compiler/code_util.m:
compiler/dupelim.m:
compiler/dupproc.m:
compiler/exprn_aux.m:
compiler/global_data.m:
compiler/jumpopt.m:
compiler/livemap.m:
compiler/llds_to_x86_64.m:
compiler/middle_rec.m:
compiler/opt_debug.m:
compiler/opt_util.m:
compiler/peephole.m:
compiler/stack_layout.m:
	Conform to addition of `mkword_hole'.

tests/hard_coded/Mmakefile:
tests/hard_coded/direct_arg_partial_inst.exp:
tests/hard_coded/direct_arg_partial_inst.m:
tests/hard_coded/direct_arg_partial_inst2.exp:
tests/hard_coded/direct_arg_partial_inst2.m:
	Add test cases.
Remove unused argument to var_locn_reassign_mkword_hole_var.

compiler/code_info.m:
compiler/var_locn.m:
	var_locn_reassign_mkword_hole_var does not require the
	module_info.
Avoid duplicate labels in target code generated for tag switches.

In a MLDS tag switch, the code of each case was generated once then duplicated
for multiple primary tags.  This produces invalid target code if the duplicated
code contains a label, e.g. to break of out of binary search loop.

The solution in this patch is to not duplicate the code if it contains a label,
but to regenerate it everywhere it occurs to ensure new labels.

compiler/ml_tag_switch.m
        As above.

tests/hard_coded/Mmakefile:
tests/hard_coded/tag_switch_dup_label.exp:
tests/hard_coded/tag_switch_dup_label.m:
        Add test case.
Link thread library to libpar_gc.

On Linux (and others) the threaded copy of Boehm GC that we build,
libpar_gc.so, inadvertently did not link to the POSIX thread library.
When producing an executable we link with both libpar_gc and libpthread
but recent versions of gcc/GNU ld have different default behaviour,
such that pthread symbol references in libpar_gc will NOT be resolved by
passing -lpthread at the executable linking step.  libpar_gc itself
needs to be linked to libpthread.  The error message looks like:

	/usr/bin/ld: test: hidden symbol `pthread_atfork' in
	/usr/lib/i386-linux-gnu/libpthread_nonshared.a(pthread_atfork.oS)
	is referenced by DSO

(Another workaround I found was to use the gcc -pthread option instead
of linking using -lpthread.  I don't know why that works.)

boehm_gc/Makefile.direct:
	Make the Mercury project-specific rule that builds libpar_gc.so
	link with $THREAD_LIBS that was set by configure.

	Add a comment about NOT using the threadlibs.c helper program.
Define GC_LINUX_THREADS instead of LINUX_THREADS.

Pass -DGC_LINUX_THREADS for Boehm GC instead of -DLINUX_THREADS.
The latter is a deprecated synonym.

configure.ac:
	As above.

*/RESERVED_MACRO_NAMES:
	LINUX_THREADS no longer needs to be excluded from the
	namespace check.
Delete residual support for the GCC backend.

scripts/Mmake.vars.in:
scripts/final_grade_option.sh-subr:
scripts/init_grade_options.sh-subr:
scripts/mmake.in:
scripts/parse_grade_options.sh-subr:
	As above.
Remove unused targets from Mmakefiles.

browser/Mmakefile:
compiler/Mmakefile:
library/Mmakefile:
mdbcomp/Mmakefile:
profiler/Mmakefile:
slice/Mmakefile:
ssdb/Mmakefile:
	Delete .ss and .pic_ss targets.
	These were only required for the GCC backend.
Delete the old `analysis' directory.

analysis/README.txt:
    Shift the contents of this file in to compiler/notes/analysis.txt.

analysis/:
    Delete this directory and the remainder of its contents.
    We only kept it around in order to workaround limitations of CVS
    and since we no longer use that we don't need to any more.
Turn the old analysis README file into HTML.

compiler/notes/analysis.txt:
   Rename this file to analysis.html.

   Add HTML markup.

   Update the link to Nick's thesis.

   XXX quite a bit of this is still out-of-date.

compiler/notes/index.html:
     Add analysis.html.
Update option error messages.

compiler/handle_otions.m:
    Update the error messages for the --target and --c-compiler-type
    options.