X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=docs%2FTestingGuide.html;h=5979d3ec8a26141111e35a70bd5351db7975253e;hb=a4775838e23ad71e057b9f3cce5e12b1d6d18174;hp=71354e29570bd6016113fa1a60f3b8bd8d10660c;hpb=af19f2e52c17a9bd91130d5dd0451fef477575e0;p=oota-llvm.git diff --git a/docs/TestingGuide.html b/docs/TestingGuide.html index 71354e29570..5979d3ec8a2 100644 --- a/docs/TestingGuide.html +++ b/docs/TestingGuide.html @@ -1,11 +1,10 @@ - + - - - LLVM Test Suite Guide + LLVM Test Suite Guide + -
@@ -13,415 +12,507 @@
    -
  1. Overview
  2. -
  3. Requirements
  4. -
  5. Quick Start
  6. -
  7. LLVM Test Suite Organization
  8. +
  9. Overview
  10. +
  11. Requirements
  12. +
  13. Quick Start
  14. +
  15. LLVM Test Suite Organization + +
  16. +
  17. LLVM Test Suite Tree
  18. +
  19. DejaGNU Structure
  20. +
  21. llvm-test Structure
  22. +
  23. Running the LLVM Tests
  24. +
  25. Running the nightly tester
  26. +
+ +
+

Written by John T. Criswell, Reid Spencer, and Tanya Lattner

+
+ + +
Overview
+ + +
+ +

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.

+ +
+ + +
Requirements
+ + +
+ +

In order to use the LLVM test suite, you will need all of the software +required to build LLVM, plus the following:

+ +
+
DejaGNU
+
The Feature and Regressions tests are organized and run by DejaGNU.
+
Expect
+
Expect is required by DejaGNU.
+
tcl
+
Tcl is required by DejaGNU.
+ +
F2C
+
For now, LLVM does not have a Fortran front-end, but using F2C, we can run +Fortran benchmarks. F2C support must be enabled via configure if not +installed in a standard place. F2C requires three items: the f2c +executable, f2c.h to compile the generated code, and libf2c.a +to link generated code. By default, given an F2C directory $DIR, the +configure script will search $DIR/bin for f2c, +$DIR/include for f2c.h, and $DIR/lib for +libf2c.a. The default $DIR values are: /usr, +/usr/local, /sw, and /opt. If you installed F2C in a +different location, you must tell configure: +
    -
  • Code Fragments
  • -
  • Whole Programs
  • +
  • ./configure --with-f2c=$DIR
    +This will specify a new $DIR for the above-described search +process. This will only work if the binary, header, and library are in their +respective subdirectories of $DIR.
  • + +
  • ./configure --with-f2c-bin=/binary/path --with-f2c-inc=/include/path +--with-f2c-lib=/lib/path
    +This allows you to specify the F2C components separately. Note: if you choose +this route, you MUST specify all three components, and you need to only specify +directories where the files are located; do NOT include the +filenames themselves on the configure line.
  • +
+
+
+ + +
Quick Start
+ + +
+ +

The tests are located in two separate CVS modules. The basic feature and +regression tests are in the main "llvm" module under the directory +llvm/test. A more comprehensive test suite that includes whole +programs in C and C++ is in the llvm-test module. This module should +be checked out to the llvm/projects directory. When you +configure the llvm module, the llvm-test module +will be automatically configured. Alternatively, you can configure the llvm-test module manually.

+

To run all of the simple tests in LLVM using DejaGNU, use the master Makefile in the +llvm/test directory:

+
+% gmake -C llvm/test
+
+or
+
+% gmake check
+
+

To run only a subdirectory of tests in llvm/test using DejaGNU (ie. Regression/Transforms). Just substitute the path to the subdirectory:

+
+% gmake -C llvm/test TESTSUITE=Regression/Transforms
+
+
Note: If you are running the tests with objdir != subdir you must have run the complete testsuite before you can specify a subdirectory.
+ +

To run the comprehensive test suite (tests that compile and execute whole +programs), run the llvm-test tests:

+ +
+% cd llvm/projects
+% cvs co llvm-test
+% cd llvm-test
+% ./configure --with-llvmsrc=$LLVM_SRC_ROOT --with-llvmobj=$LLVM_OBJ_ROOT
+% gmake
+
+ +
+ + +
LLVM Test Suite Organization
+ + +
+ +

The LLVM test suite contains two major categories of tests: code +fragments and whole programs. Code fragments are in the llvm module +under the directory under the llvm/test directory. The whole programs +test suite are in the llvm-test module under the main directory.

+ +
+ +
Code Fragments +
+ +
+ +

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.

+ +

Code fragments are not complete programs, and they are never executed to +determine correct behavior.

+ +

These code fragment tests are located in the llvm/test/Features and +llvm/test/Regression directories.

+ +
+ +
Whole Programs
+ +
+ +

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.

+ +

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.

+ +

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.

+ +

All "whole program" tests are located in the llvm-test CVS +module.

+ +
+ + +
LLVM Test Suite Tree
+ + +
+ +

Each type of test in the LLVM test suite has its own directory. The major +subtrees of the test suite directory tree are as follows:

+ + -
  • LLVM Test Suite Tree
  • -
  • QMTest Structure
  • -
  • Programs Structure
  • -
  • Running the LLVM Tests
  • -

    Written by John T. Criswell

    + +
    + +
    DejaGNU Structure
    + + +
    +

    The LLVM test suite is partially driven by DejaGNU and partially +driven by GNU Make. Specifically, the Features and Regression tests +are all driven by DejaGNU. The llvm-test +module is currently driven by a set of Makefiles.

    + +

    The DejaGNU structure is very simple, but does require some +information to be set. This information is gathered via configure and +is written to a file, site.exp in llvm/test. The +llvm/test +Makefile does this work for you.

    + +

    In order for DejaGNU to work, each directory of tests must have a +dg.exp file. This file is a program written in tcl that calls +the llvm-runtests procedure on each test file. The +llvm-runtests procedure is defined in +llvm/test/lib/llvm-dg.exp. Any directory that contains only +directories does not need the dg.exp file.

    + +

    In order for a test to be run, it must contain information within +the test file on how to run the test. These are called RUN +lines. Run lines are specified in the comments of the test program +using the keyword RUN followed by a colon, and lastly the +commands to execute. These commands will be executed in a bash script, +so any bash syntax is acceptable. You can specify as many RUN lines as +necessary. Each RUN line translates to one line in the resulting bash +script. Below is an example of legal RUN lines in a .ll +file:

    +
    +; RUN: llvm-as < %s | llvm-dis > %t1
    +; RUN: llvm-dis < %s.bc-13 > %t2
    +; RUN: diff %t1 %t2
    +
    +

    There are a couple patterns within a RUN line that the +llvm-runtest procedure looks for and replaces with the appropriate +syntax:

    + + +

    There are also several scripts in the llvm/test/Scripts directory +that you might find useful when writing RUN lines.

    + +

    Lastly, you can easily mark a test that is expected to fail on a +specific platform by using the XFAIL keyword. Xfail lines are +specified in the comments of the test program using XFAIL, +followed by a colon, and one or more regular expressions (separated by +a comma) that will match against the target triplet for the +machine. You can use * to match all targets. Here is an example of an +XFAIL line:

    +
    +; XFAIL: darwin,sun
    +
    + +
    + + +
    llvm-test +Structure
    + + +
    + +

    As mentioned previously, the llvm-test module 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.

    + +

    In addition to the regular "whole program" tests, the llvm-test +module 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 to yield different results.

    + +

    For example, the LLVM nightly tester uses TEST.nightly.Makefile to +create the nightly test reports. To run the nightly tests, run gmake +TEST=nightly.

    + +

    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.

    + +

    Note, when configuring the llvm-test module, you might want to +specify the following configuration options:

    +
    +
    --enable-spec2000 +
    --enable-spec2000=<directory> +
    + Enable the use of SPEC2000 when testing LLVM. This is disabled by default + (unless configure finds SPEC2000 installed). By specifying + directory, you can tell configure where to find the SPEC2000 + benchmarks. If directory is left unspecified, configure + uses the default value + /home/vadve/shared/benchmarks/speccpu2000/benchspec. +

    +

    --enable-spec95 +
    --enable-spec95=<directory> +
    + Enable the use of SPEC95 when testing LLVM. It is similar to the + --enable-spec2000 option. +

    +

    --enable-povray +
    --enable-povray=<directory> +
    + Enable the use of Povray as an external test. Versions of Povray written + in C should work. This option is similar to the --enable-spec2000 + option. +
    +
    + + +
    Running the LLVM Tests
    + + +
    + +

    First, all tests are executed within the LLVM object directory tree. They +are not executed inside of the LLVM source tree. This is because the +test suite creates temporary files during execution.

    + +

    The master Makefile in llvm/test is capable of running only the DejaGNU driven +tests. By default, it will run all of these tests.

    + +

    To run only the DejaGNU driven tests, run gmake at the +command line in llvm/tests. To run a specific directory of tests, use the +TESTSUITE variable. +

    + +

    For example, to run the Regression tests, type +gmake TESTSUITE=Regression in llvm/tests.

    + +

    Note that there are no Makefiles in llvm/test/Features and +llvm/test/Regression. You must use DejaGNU from the llvm/test +directory to run them.

    + +

    To run the llvm-test suite, you need to use the following steps: +

    +
      +
    1. cd into the llvm/projects directory
    2. +
    3. check out the llvm-test module with:
      + cvs -d :pserver:anon@llvm.cs.uiuc.edu:/var/cvs/llvm co -PR llvm-test
      + This will get the test suite into llvm/projects/llvm-test
    4. +
    5. configure the test suite. You can do this one of two ways: +
        +
      1. Use the regular llvm configure:
        + cd $LLVM_OBJ_ROOT ; $LLVM_SRC_ROOT/configure
        + This will ensure that the projects/llvm-test directory is also + properly configured.
      2. +
      3. Use the configure script found in the llvm-test source + directory:
        + $BUILD_SRC_DIR/configure --with-llvmsrc=$LLVM_SRC_ROOT --with-llvmobj=$LLVM_OBJ_ROOT +
      4. +
      +
    6. gmake
    +

    Note that the second and third steps only need to be done once. After you +have the suite checked out and configured, you don't need to do it again (unless +the test code or configure script changes).

    + +

    To make a specialized test (use one of the +llvm-test/TEST.<type>.Makefiles), just run:
    +gmake TEST=<type> test
    For example, you could run the +nightly tester tests using the following commands:

    + +
    + % cd llvm/projects/llvm-test
    + % gmake TEST=nightly test
    +
    + +

    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.

    + +

    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 DejaGNU, +the result for such tests will be XFAIL (eXpected FAILure). In this way, you +can tell the difference between an expected and unexpected failure.

    + +

    The tests in llvm-test 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.

    + +
    - -
    Overview
    - - -
    -

    - 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. -

    -
    - - -
    Requirements
    - - -
    -

    - In order to use the LLVM test suite, you will need all of the software - required to build LLVM, plus the following: -

    -
    -
    QMTest
    -
    The LLVM test suite uses QMTest to organize and - run tests.
    - -
    Python
    -
    You will need a Python interpreter that works with - QMTest. Python will need zlib and SAX support - enabled.
    -
    -
    - - -
    Quick Start
    - - -
    -

    - The tests are located in the LLVM source tree under the directory - llvm/test. To run all of the tests in LLVM, use the Master - Makefile in that directory: -

    -
    -	 % make -C llvm/test
    -	
    - -

    - To run only the code fragment tests (i.e. those that do basic testing of - LLVM), run the tests organized by QMTest: -

    - -
    -	 % make -C llvm/test qmtest
    -	
    - -

    - To run only the tests that compile and execute whole programs, run the - Programs tests: -

    - -
    -	 % make -C llvm/test/Programs
    -	
    -
    - - -

    LLVM Test Suite - Organization

    - - -
    -

    The LLVM test suite contains two major categories of tests: code - fragments and whole programs.

    -
    - -
    Code Fragments -
    - -
    -

    - 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. -

    - Code fragments are not complete programs, and they are - never executed to determine correct behavior. -

    - The tests in the Features and - Regression directories contain code fragments. -

    -
    - -
    Whole Programs -
    - -
    -

    - 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. -

    - 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. -

    - 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. -

    - The Programs directory contains all tests which compile and - benchmark whole programs. -

    -
    - - -

    LLVM Test Suite Tree -

    - - -
    -

    Each type of test in the LLVM test suite has its own directory. The - major subtrees of the test suite directory tree are as follows:

    - - -
    - - -

    QMTest Structure -

    - - -
    -

    - 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. -

    - 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. -

    - The LLVM database class makes the subdirectories of 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. -

    - Hence, the QMTest namespace is essentially what you see in the - Feature and Regression directories, but there is some magic that - the database class performs (as described below). -

    - The QMTest namespace is currently composed of the following tests and - test suites: -

    - - -
    - - -

    Programs - Structure

    - - -
    -

    - 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. -

    - 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 to - yield different results. -

    - For example, the LLVM nightly tester uses TEST.nightly.Makefile - to create the nightly test reports. To run the nightly tests, run - gmake TEST=nightly. -

    - 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. -

    -
    - - -

    Running the LLVM Tests -

    - - -
    -

    - First, all tests are executed within the LLVM object directory tree. - They are not executed inside of the LLVM source tree. This is - because the test suite creates temporary files during execution. -

    - 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. -

    - To run only the QMTest driven tests, run make qmtest at the - command line in llvm/tests. To run a specific qmtest, suffix the test - name with ".t" when running make. -

    - For example, to run the Regression.LLC tests, type - make Regression.LLC.t in llvm/tests. -

    - 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. -

    - To run the Programs test, cd into the llvm/test/Programs directory and - type make. Alternatively, you can type make - TEST=<type> test 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: -

    - -
    -	 % cd llvm/test/Programs
    -	 % make TEST=nightly test
    -	
    - -

    - 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. -

    - 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. -

    - 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. -

    -
    + +
    Running the nightly tester
    + + +
    + +

    +The LLVM Nightly Testers +automatically check out an LLVM tree, build it, run the "nightly" +program test (described above), run all of the feature and regression tests, +and then delete the checked out tree. This tester is designed to ensure that +programs don't break as well as keep track of LLVM's progress over time.

    + +

    +If you'd like to set up an instance of the nightly tester to run on your +machine, take a look at the comments at the top of the utils/NightlyTester.pl +file. We usually run it from a crontab entry that looks ilke this: +

    + +
    +5 3 * * *  $HOME/llvm/utils/NightlyTest.pl -parallel -enable-linscan ...CVSREPOSTORY... $HOME/buildtest-X86 $HOME/cvs/testresults-X86
    +
    + +

    Or, you can create a shell script to encapsulate the running of the script. +The optimized x86 Linux nightly test is run from just such a script: +

    +#!/bin/bash
    +BASE=/proj/work/llvm/nightlytest
    +export CVSROOT=:pserver:anon@llvm.cs.uiuc.edu:/var/cvs/llvm
    +export BUILDDIR=$BASE/build 
    +export WEBDIR=$BASE/testresults 
    +export LLVMGCCDIR=/proj/work/llvm/cfrontend/install
    +export PATH=/proj/install/bin:$LLVMGCCDIR/bin:$PATH
    +export LD_LIBRARY_PATH=/proj/install/lib
    +cd $BASE
    +cp /proj/work/llvm/llvm/utils/NightlyTest.pl .
    +nice ./NightlyTest.pl -nice -release -verbose -parallel -enable-linscan -noexternals
    +
    + +

    +Take a look at the NightlyTest.pl file to see what all of the flags and +strings do. If you start running the nightly tests, please let us know and +we'll link your page to the global tester page. Thanks! +

    + +
    -
    -
    John T. Criswell
    -Last modified: $Date$ -
    - +
    +
    + Valid CSS! + Valid HTML 4.01! + + John T. Criswell
    + The LLVM Compiler Infrastructure
    + Last modified: $Date$ +