[llvm-commits] CVS: llvm/docs/TestingGuide.html

John Criswell criswell at cs.uiuc.edu
Fri Oct 10 13:44:01 PDT 2003


Changes in directory llvm/docs:

TestingGuide.html added (r1.1)

---
Log message:

Initial checkin of Testing Guide.
Still very rough, IMHO.



---
Diffs of the changes:  (+356 -0)

Index: llvm/docs/TestingGuide.html
diff -c /dev/null llvm/docs/TestingGuide.html:1.1
*** /dev/null	Fri Oct 10 13:42:59 2003
--- llvm/docs/TestingGuide.html	Fri Oct 10 13:42:49 2003
***************
*** 0 ****
--- 1,356 ----
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+ <html>
+ 	<head>
+ 		<title>LLVM Test Suite Guide</title>
+ 	</head>
+ 
+ 	<body bgcolor=white>
+ 
+ 	<center><h1>LLVM Test Suite Guide<br></h1></center>
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="overview">Overview</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	This document is the reference manual for the LLVM test suite.  It
+ 	documents the structure of the LLVM test suite, the tools needed to
+ 	use it, and how to add and run tests.
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="Requirements">Requirements</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	In order to use the LLVM test suite, you will need all of the software
+ 	required to build LLVM, plus the following:
+ 	<dl compact>
+ 		<dt><A HREF="http://www.qmtest.com">QMTest</A>
+ 		<dd>
+ 		The LLVM test suite uses QMTest to organize and run tests.
+ 		<p>
+ 
+ 		<dt><A HREF="http://www.python.org">Python</A>
+ 		<dd>
+ 		You will need a python interpreter that works with QMTest.
+ 		Python will need zlib and SAX support enabled.
+ 		<p>
+ 	</dl>
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="quick">Quick Start</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	To run all of the tests in LLVM, use the Master Makefile in llvm/test:
+ 	<p>
+ 	<tt>
+ 	cd test
+ 	<br>
+ 	make
+ 	</tt>
+ 
+ 	<p>
+ 
+ 	To run only the code fragment tests (i.e. those that do basic testing of
+ 	LLVM), run the tests organized by QMTest:
+ 	<p>
+ 
+ 	<tt>
+ 	cd test
+ 	<br>
+ 	make qmtest
+ 	</tt>
+ 
+ 	<p>
+ 
+ 	To run only the tests that compile and execute whole programs, run the
+ 	Programs tests:
+ 	<p>
+ 
+ 	<tt>
+ 	cd test/Programs
+ 	<br>
+ 	make
+ 	</tt>
+ 	<p>
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="org">LLVM Test Suite Organization</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	The LLVM test suite contains two major types of tests:
+ 	<ul>
+ 		<li>Code Fragments<br>
+ 		Code fragments are small pieces of code that test a specific
+ 		feature of LLVM or trigger a specific bug in LLVM.  They are
+ 		usually written in LLVM assembly language, but can be
+ 		written in other languages if the test targets a particular language
+ 		front end.
+ 		<p>
+ 		Code fragments are not complete programs, and they are never executed
+ 		to determine correct behavior.
+ 		<p>
+ 		The tests in the llvm/test/Features and llvm/test/Regression directories
+ 		contain code fragments.
+ 
+ 		<li>Whole Programs<br>
+ 		Whole Programs are pieces of code which can be compiled and
+ 		linked into a stand-alone program that can be executed.  These programs
+ 		are generally written in high level languages such as C or C++, but
+ 		sometimes they are written straight in LLVM assembly.
+ 		<p>
+ 		These programs are compiled and then executed using several different
+ 		methods (native compiler, LLVM C backend, LLVM JIT, LLVM native code
+ 		generation, etc).  The output of these programs is compared to ensure
+ 		that LLVM is compiling the program correctly.
+ 
+ 		<p>
+ 		In addition to compiling and executing programs, whole program tests
+ 		serve as a way of benchmarking LLVM performance, both in terms of the
+ 		efficiency of the programs generated as well as the speed with which
+ 		LLVM compiles, optimizes, and generates code.
+ 
+ 		<p>
+ 		The test/Programs directory contains all tests which compile and
+ 		benchmark whole programs.
+ 	</ul>
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="tree">LLVM Test Suite Tree</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	The LLVM test suite is broken up into the following directory
+ 	hierarchy:
+ 
+ 	<ul>
+ 		<li> Features<br>
+ 		This directory contains sample codes that test various features
+ 		of the LLVM language.  These pieces of sample code are run
+ 		through various assembler, disassembler, and optimizer passes.
+ 		<p>
+ 
+ 		<li>Regression<br>
+ 		This directory contains regression tests for LLVM.  When a bug
+ 		is found in LLVM, a regression test containing just enough
+ 		code to reproduce the problem should be written and placed
+ 		somewhere underneath this directory.  In most cases, this
+ 		will be a small piece of LLVM assembly language code, often
+ 		distilled from an actual application or benchmark.
+ 		<p>
+ 
+ 		<li>Programs<br>
+ 		The Programs directory contains programs that can be compiled
+ 		with LLVM and executed.  These programs are compiled using the
+ 		native compiler and various LLVM backends.  The output from the
+ 		program compiled with the native compiler is assumed correct;
+ 		the results from the other programs are compared to the native
+ 		program output and pass if they match.
+ 		<p>
+ 		In addition for testing correctness, the Programs directory
+ 		also performs timing tests of various LLVM optimizations.
+ 		It also records compilation times for the compilers and the
+ 		JIT.  This information can be used to compare the
+ 		effectiveness of LLVM's optimizations and code generation.
+ 		<p>
+ 		The Programs directory is subdivided into several smaller
+ 		subdirectories:
+ 		<ul>
+ 			<li>SingleSource<br>
+ 			The SingleSource directory contains test programs that
+ 			are only a single source file in size.  These are
+ 			usually small benchmark programs or small programs that
+ 			calculate a particular value.  Several such programs are grouped
+ 			together in each directory.
+ 			<p>
+ 
+ 			<li>MultiSource<br>
+ 			The MultiSource directory contains subdirectories which contain
+ 			entire programs with multiple source files.  Large benchmarks and
+ 			whole applications go here.
+ 			<p>
+ 
+ 			<li>External<br>
+ 			The External directory contains Makefiles for building
+ 			code that is external to (i.e. not distributed with)
+ 			LLVM.  The most prominent member of this directory is
+ 			the SPEC 2000 benchmark suite.  The presence and location
+ 			of these external programs is configured by the LLVM
+ 			<tt>configure</tt> script.
+ 		</ul>
+ 
+ 		<p>
+ 
+ 		<li>QMTest<br>
+ 		This directory contains the QMTest information files.  Inside this
+ 		directory are QMTest administration files and the Python code that
+ 		implements the LLVM test and database classes.
+ 	</ul>
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="qmstructure">QMTest Structure</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	The LLVM test suite is partially driven by QMTest and partially
+ 	driven by GNU Make.  Specifically, the Features and Regression tests
+ 	are all driven by QMTest.  The Programs directory is currently
+ 	driven by a set of Makefiles.
+ 	<p>
+ 
+ 	The QMTest system needs to have several pieces of information
+ 	available; these pieces of configuration information are known
+ 	collectively as the "context" in QMTest parlance.  Since the context
+ 	for LLVM is relatively large, the master Makefile in llvm/test
+ 	sets it for you.
+ 
+ 	<p>
+ 
+ 	The LLVM database class makes the directory tree underneath llvm/test a
+ 	QMTest test database.  For each directory that contains tests driven by
+ 	QMTest, it knows what type of test the source file is and how to run it.
+ 
+ 	<p>
+ 
+ 	Hence, the QMTest namespace is essentially what you see in
+ 	llvm/test/Feature and llvm/test/Regression, but there is some magic that
+ 	the database class performs (as described below).
+ 
+ 	<p>
+ 
+ 	The QMTest namespace is currently composed of the following tests and
+ 	test suites:
+ 
+ 	<ul>
+ 		<li>Feature<br>
+ 		These are the feature tests found in llvm/test/Feature.  They are broken
+ 		up into the following categories:
+ 		<ul>
+ 			<li>fad<br>
+ 			Assembler/Disassembler tests.  These tests verify that a piece of
+ 			LLVM assembly language can be assembled into bytecode and then
+ 			disassembled into the original assembly language code.
+ 			It does this several times to ensure that assembled
+ 			output can be disassembled and disassembler output can
+ 			be assembled.  It also verifies that the give assembly language file
+ 			can be assembled correctly.
+ 			<p>
+ 
+ 			<li>fasm<br>
+ 			Assembler tests.  These tests verify that the code can be translated
+ 			into native assembly code.
+ 			<p>
+ 
+ 			<li>fopt<br>
+ 			Optimizer tests.  These tests verify that two of the
+ 			optimizer passes completely optimize a program (i.e.
+ 			after a single pass, they cannot optimize a program
+ 			any further).
+ 			<p>
+ 
+ 			<li>fmc<br>
+ 			Machine code tests.  These tests verify that the LLVM assembly
+ 			language file can be translated into native assembly code.
+ 			<p>
+ 
+ 			<li>fcc<br>
+ 			C code tests.  These tests verify that the specified LLVM assembly
+ 			code can be converted into C source code using the C backend.
+ 		</ul>
+ 
+ 		<p>
+ 
+ 		The LLVM database class looks at every file in llvm/test/Feature and
+ 		creates a fake test hierarchy containing
+ 		Feature.<testtype>.<testname>.
+ 		So, if you add an LLVM assembly language file to llvm/test/Feature, it
+ 		actually creates 5 news test: assembler/disassembler, assembler,
+ 		optimizer, machine code, and C code.
+ 
+ 		<li>Regression<br>
+ 		These are the regression tests.  There is one suite for each directory
+ 		in llvm/test/Regression.
+ 		<p>
+ 
+ 		If you add a new directory to llvm/test/Regression, you will need to
+ 		modify llvm/test/QMTest/llvmdb.py so that it knows what sorts of tests
+ 		are in it and how to run them.
+ 	</ul>
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="progstructure">Programs Structure</a><hr></h2>
+ 	<!--===============================================================-->
+ 	As mentioned previously, the Programs tree in llvm/test provides three types
+ 	of tests: MultiSource, SingleSource, and External.  Each tree is then
+ 	subdivided into several categories, including applications, benchmarks,
+ 	regression tests, code that is strange grammatically, etc.  These
+ 	organizations should be relatively self explanatory.
+ 	<p>
+ 	In addition to the regular Programs tests, the Programs tree also provides a
+ 	mechanism for compiling the programs in different ways.  If the variable TEST
+ 	is defined on the gmake command line, the test system will include a Makefile
+ 	named TEST.<value of TEST variable>.Makefile.  This Makefile can modify
+ 	build rules that yield different results.
+ 	<p>
+ 	For example, the LLVM nightly tester uses TEST.nightly.Makefile to create the
+ 	nightly test reports.  To run the nightly tests, run <tt>gmake
+ 	TEST=nightly</tt>.
+ 	<p>
+ 	There are several TEST Makefiles available in the tree.  Some of them are
+ 	designed for internal LLVM research and will not work outside of the LLVM
+ 	research group.  They may still be valuable, however, as a guide to writing
+ 	your own TEST Makefile for any optimization or analysis passes that you
+ 	develop with LLVM.
+ 
+ 	<!--===============================================================-->
+ 	<h2><a name="run">Running the LLVM Tests</a><hr></h2>
+ 	<!--===============================================================-->
+ 
+ 	First, all tests are executed within the LLVM object directory tree.  They
+ 	<i>are not</i> executed inside of the LLVM source tree.  This is because
+ 	the test suite creates temporary files during execution.
+ 
+ 	<p>
+ 
+ 	The master Makefile in llvm/test is capable of running both the
+ 	QMTest driven tests and the Programs tests.  By default, it will run
+ 	all of the tests.
+ 	<p>
+ 	To run only the QMTest driven tests, run <tt>make qmtest</tt> at the
+ 	command line in llvm/tests.  To run a specific qmtest, suffix the test name
+ 	with ".t" when running make.
+ 	<p>
+ 	For example, to run the Regression.LLC tests, type
+ 	<tt>make Regression.LLC.t</tt> in llvm/tests.
+ 	<p>
+ 	Note that the Makefiles in llvm/test/Features and llvm/test/Regression
+ 	are gone.  You must now use QMTest from the llvm/test directory to run them.
+ 	<p>
+ 
+ 	To run the Programs test, cd into the llvm/test/Programs directory
+ 	and type <tt>make</tt>.  Alternatively, you can type <tt>make
+ 	TEST=<type> test</tt> to run one of the specialized tests in
+ 	llvm/test/Programs/TEST.<type>.Makefile.  For example, you could run
+ 	the nightly tester tests using the following commands:
+ 	<p>
+ 	<tt>
+ 	cd llvm/test/Programs
+ 	<br>
+ 	make TEST=nightly test
+ 	</tt>
+ 
+ 	<p>
+ 	Regardless of which test you're running, the results are printed on standard
+ 	output and standard error.  You can redirect these results to a file if you
+ 	choose.
+ 	<p>
+ 	Some tests are known to fail.  Some are bugs that we have not fixed yet;
+ 	others are features that we haven't added yet (or may never add).  In QMTest,
+ 	the result for such tests will be XFAIL (eXpected FAILure).  In this way, you
+ 	can tell the difference between an expected and unexpected failure.
+ 	<p>
+ 	The Programs tests have no such feature as of this time.  If the test passes,
+ 	only warnings and other miscellaneous output will be generated.  If a test
+ 	fails, a large <program> FAILED message will be displayed.  This will
+ 	help you separate benign warnings from actual test failures.
+ 
+ 	<hr>
+ 
+ 	</body>
+ </html>





More information about the llvm-commits mailing list