From: Lang Hames Date: Thu, 27 Aug 2015 18:13:34 +0000 (+0000) Subject: Add Kaleidoscope regression tests. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b325a1ace53c1f0b1b38505fefeb08114f40dc10;p=oota-llvm.git Add Kaleidoscope regression tests. These will be run if LLVM_BUILD_EXAMPLES is enabled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@246175 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/docs/tutorial/LangImpl4.rst b/docs/tutorial/LangImpl4.rst index 702886f6aec..92dcc3d33a0 100644 --- a/docs/tutorial/LangImpl4.rst +++ b/docs/tutorial/LangImpl4.rst @@ -566,7 +566,7 @@ if we add: /// putchard - putchar that takes a double and returns 0. extern "C" double putchard(double X) { - putchar((char)X); + fputc((char)X, stderr); return 0; } diff --git a/examples/Kaleidoscope/Chapter4/CMakeLists.txt b/examples/Kaleidoscope/Chapter4/CMakeLists.txt index 44e1aeecaae..89feed143ad 100644 --- a/examples/Kaleidoscope/Chapter4/CMakeLists.txt +++ b/examples/Kaleidoscope/Chapter4/CMakeLists.txt @@ -13,3 +13,5 @@ set(LLVM_LINK_COMPONENTS add_kaleidoscope_chapter(Kaleidoscope-Ch4 toy.cpp ) + +export_executable_symbols(Kaleidoscope-Ch4) diff --git a/examples/Kaleidoscope/Chapter4/toy.cpp b/examples/Kaleidoscope/Chapter4/toy.cpp index 12777ae2c75..c102784b531 100644 --- a/examples/Kaleidoscope/Chapter4/toy.cpp +++ b/examples/Kaleidoscope/Chapter4/toy.cpp @@ -632,13 +632,13 @@ static void MainLoop() { /// putchard - putchar that takes a double and returns 0. extern "C" double putchard(double X) { - putchar((char)X); + fputc((char)X, stderr); return 0; } /// printd - printf that takes a double prints it as "%f\n", returning 0. extern "C" double printd(double X) { - printf("%f\n", X); + fprintf(stderr, "%f\n", X); return 0; } diff --git a/examples/Kaleidoscope/Chapter5/CMakeLists.txt b/examples/Kaleidoscope/Chapter5/CMakeLists.txt index b62ed410103..c0ae70654c3 100644 --- a/examples/Kaleidoscope/Chapter5/CMakeLists.txt +++ b/examples/Kaleidoscope/Chapter5/CMakeLists.txt @@ -13,3 +13,5 @@ set(LLVM_LINK_COMPONENTS add_kaleidoscope_chapter(Kaleidoscope-Ch5 toy.cpp ) + +export_executable_symbols(Kaleidoscope-Ch5) diff --git a/examples/Kaleidoscope/Chapter5/toy.cpp b/examples/Kaleidoscope/Chapter5/toy.cpp index 83af1776b20..29db71c20a8 100644 --- a/examples/Kaleidoscope/Chapter5/toy.cpp +++ b/examples/Kaleidoscope/Chapter5/toy.cpp @@ -906,13 +906,13 @@ static void MainLoop() { /// putchard - putchar that takes a double and returns 0. extern "C" double putchard(double X) { - putchar((char)X); + fputc((char)X, stderr); return 0; } /// printd - printf that takes a double prints it as "%f\n", returning 0. extern "C" double printd(double X) { - printf("%f\n", X); + fprintf(stderr, "%f\n", X); return 0; } diff --git a/examples/Kaleidoscope/Chapter6/CMakeLists.txt b/examples/Kaleidoscope/Chapter6/CMakeLists.txt index 6bb2b193752..49627f07ddf 100644 --- a/examples/Kaleidoscope/Chapter6/CMakeLists.txt +++ b/examples/Kaleidoscope/Chapter6/CMakeLists.txt @@ -13,3 +13,5 @@ set(LLVM_LINK_COMPONENTS add_kaleidoscope_chapter(Kaleidoscope-Ch6 toy.cpp ) + +export_executable_symbols(Kaleidoscope-Ch6) diff --git a/examples/Kaleidoscope/Chapter6/toy.cpp b/examples/Kaleidoscope/Chapter6/toy.cpp index e1bed45189e..8f802384d1d 100644 --- a/examples/Kaleidoscope/Chapter6/toy.cpp +++ b/examples/Kaleidoscope/Chapter6/toy.cpp @@ -1024,13 +1024,13 @@ static void MainLoop() { /// putchard - putchar that takes a double and returns 0. extern "C" double putchard(double X) { - putchar((char)X); + fputc((char)X, stderr); return 0; } /// printd - printf that takes a double prints it as "%f\n", returning 0. extern "C" double printd(double X) { - printf("%f\n", X); + fprintf(stderr, "%f\n", X); return 0; } diff --git a/examples/Kaleidoscope/Chapter7/CMakeLists.txt b/examples/Kaleidoscope/Chapter7/CMakeLists.txt index 27c18cdd065..e67d7928efe 100644 --- a/examples/Kaleidoscope/Chapter7/CMakeLists.txt +++ b/examples/Kaleidoscope/Chapter7/CMakeLists.txt @@ -13,3 +13,5 @@ set(LLVM_LINK_COMPONENTS add_kaleidoscope_chapter(Kaleidoscope-Ch7 toy.cpp ) + +export_executable_symbols(Kaleidoscope-Ch7) diff --git a/examples/Kaleidoscope/Chapter7/toy.cpp b/examples/Kaleidoscope/Chapter7/toy.cpp index 4558522952c..be00f873e6d 100644 --- a/examples/Kaleidoscope/Chapter7/toy.cpp +++ b/examples/Kaleidoscope/Chapter7/toy.cpp @@ -1190,13 +1190,13 @@ static void MainLoop() { /// putchard - putchar that takes a double and returns 0. extern "C" double putchard(double X) { - putchar((char)X); + fputc((char)X, stderr); return 0; } /// printd - printf that takes a double prints it as "%f\n", returning 0. extern "C" double printd(double X) { - printf("%f\n", X); + fprintf(stderr, "%f\n", X); return 0; } diff --git a/examples/Kaleidoscope/Chapter8/CMakeLists.txt b/examples/Kaleidoscope/Chapter8/CMakeLists.txt index e335cb48ac7..d9b5cc421be 100644 --- a/examples/Kaleidoscope/Chapter8/CMakeLists.txt +++ b/examples/Kaleidoscope/Chapter8/CMakeLists.txt @@ -9,3 +9,5 @@ set(LLVM_LINK_COMPONENTS add_kaleidoscope_chapter(Kaleidoscope-Ch8 toy.cpp ) + +export_executable_symbols(Kaleidoscope-Ch8) diff --git a/examples/Kaleidoscope/Chapter8/toy.cpp b/examples/Kaleidoscope/Chapter8/toy.cpp index 7338c6ebc50..b78d901db2d 100644 --- a/examples/Kaleidoscope/Chapter8/toy.cpp +++ b/examples/Kaleidoscope/Chapter8/toy.cpp @@ -1384,13 +1384,13 @@ static void MainLoop() { /// putchard - putchar that takes a double and returns 0. extern "C" double putchard(double X) { - putchar((char)X); + fputc((char)X, stderr); return 0; } /// printd - printf that takes a double prints it as "%f\n", returning 0. extern "C" double printd(double X) { - printf("%f\n", X); + fprintf(stderr, "%f\n", X); return 0; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1f417c2a0fc..464a6f0161a 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,3 +1,7 @@ +if(LLVM_BUILD_EXAMPLES) + set(ENABLE_EXAMPLES 1) +endif() + configure_lit_site_cfg( ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in ${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg @@ -96,6 +100,16 @@ if(TARGET ocaml_llvm) ) endif() +if(LLVM_BUILD_EXAMPLES) + list(APPEND LLVM_TEST_DEPENDS + Kaleidoscope-Ch3 + Kaleidoscope-Ch4 + Kaleidoscope-Ch5 + Kaleidoscope-Ch6 + Kaleidoscope-Ch7 + ) +endif() + add_lit_testsuite(check-llvm "Running the LLVM regression tests" ${CMAKE_CURRENT_BINARY_DIR} PARAMS llvm_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg diff --git a/test/Examples/Kaleidoscope/Chapter3.test b/test/Examples/Kaleidoscope/Chapter3.test new file mode 100644 index 00000000000..b9c8ba6fad8 --- /dev/null +++ b/test/Examples/Kaleidoscope/Chapter3.test @@ -0,0 +1,17 @@ +# RUN: Kaleidoscope-Ch3 < %s 2>&1 | FileCheck %s + +# Test basic parsing and IR generation. +def foo(x) x + 1; +foo(1); + +# CHECK: define double @foo(double %x) { +# CHECK-NEXT: entry: +# CHECK-NEXT: %addtmp = fadd double %x, 1.000000e+00 +# CHECK-NEXT: ret double %addtmp +# CHECK-NEXT: } + +# CHECK: define double @__anon_expr() { +# CHECK-NEXT: entry: +# CHECK-NEXT: %calltmp = call double @foo(double 1.000000e+00) +# CHECK-NEXT: ret double %calltmp +# CHECK-NEXT: } diff --git a/test/Examples/Kaleidoscope/Chapter4.test b/test/Examples/Kaleidoscope/Chapter4.test new file mode 100644 index 00000000000..5fd0e42c9a6 --- /dev/null +++ b/test/Examples/Kaleidoscope/Chapter4.test @@ -0,0 +1,17 @@ +# RUN: Kaleidoscope-Ch4 < %s 2>&1 | FileCheck %s + +# Test basic definition, binding, and execution. +def foo(x) x + 1; +def bar(x) foo(2 * x); +bar(2); +# CHECK: Evaluated to 5.000000 + +# Test redefinition. +def foo(x) x + 2; +foo(2); +# CHECK: Evaluated to 4.000000 + +# Verify that 'bar' still calls the original 'foo'. +bar(2); +# CHECK: Evaluated to 5.000000 + diff --git a/test/Examples/Kaleidoscope/Chapter5.test b/test/Examples/Kaleidoscope/Chapter5.test new file mode 100644 index 00000000000..1ad902378ed --- /dev/null +++ b/test/Examples/Kaleidoscope/Chapter5.test @@ -0,0 +1,19 @@ +# RUN: Kaleidoscope-Ch5 < %s 2>&1 | FileCheck %s + +# Test 'if' expression. +def foo(x) if x < 10 then 0 else 1; +foo(9); +foo(11); +# CHECK: Evaluated to 0.000000 +# CHECK: Evaluated to 1.000000 + +# Test 'for' expression. +extern printd(x); +for i = 1, i < 5, 1.0 in + printd(i); +# CHECK: 1.0 +# CHECK: 2.0 +# CHECK: 3.0 +# CHECK: 4.0 +# CHECK: 5.0 +# CHECK: Evaluated to 0.000000 \ No newline at end of file diff --git a/test/Examples/Kaleidoscope/Chapter6.test b/test/Examples/Kaleidoscope/Chapter6.test new file mode 100644 index 00000000000..cbdd01f5268 --- /dev/null +++ b/test/Examples/Kaleidoscope/Chapter6.test @@ -0,0 +1,15 @@ +# RUN: Kaleidoscope-Ch6 < %s 2>&1 | FileCheck %s + +# Test unary operator definition. +def unary-(x) 0 - x; +1 + (-1); +# CHECK: Evaluated to 0.000000 + +# Test binary operator definition. +def binary> 10 (lhs rhs) rhs < lhs; +def foo(x) if x > 10 then 0 else 1; +foo(9); +foo(11); +# CHECK: Evaluated to 1.000000 +# CHECK: Evaluated to 0.000000 + diff --git a/test/Examples/Kaleidoscope/Chapter7.test b/test/Examples/Kaleidoscope/Chapter7.test new file mode 100644 index 00000000000..4843ca703ae --- /dev/null +++ b/test/Examples/Kaleidoscope/Chapter7.test @@ -0,0 +1,15 @@ +# RUN: Kaleidoscope-Ch7 < %s 2>&1 | FileCheck %s + +# Sequence operator and iterative fibonacci function to test user defined vars. +def binary : 1 (x y) y; + +def fibi(x) + var a = 1, b = 1, c in + (for i = 3, i < x in + c = a + b : + a = b : + b = c) : + b; + +fibi(10); +# CHECK: Evaluated to 55.000000 diff --git a/test/Examples/lit.local.cfg b/test/Examples/lit.local.cfg new file mode 100644 index 00000000000..d97a2a5b7a3 --- /dev/null +++ b/test/Examples/lit.local.cfg @@ -0,0 +1,2 @@ +if not config.test_examples: + config.unsupported = True diff --git a/test/Makefile b/test/Makefile index 558762e39dc..9b37cedaaff 100644 --- a/test/Makefile +++ b/test/Makefile @@ -146,6 +146,7 @@ lit.site.cfg: FORCE @$(ECHOPATH) s=@HOST_ARCH@=$(HOST_ARCH)=g >> lit.tmp @$(ECHOPATH) s=@HAVE_LIBZ@=$(HAVE_LIBZ)=g >> lit.tmp @$(ECHOPATH) s=@HAVE_DIA_SDK@=0=g >> lit.tmp + @$(ECHOPATH) s=@ENABLE_EXAMPLES@=$(BUILD_EXAMPLES)=g >> lit.tmp @sed -f lit.tmp $(PROJ_SRC_DIR)/lit.site.cfg.in > $@ @-rm -f lit.tmp diff --git a/test/lit.cfg b/test/lit.cfg index 167a81afad1..38a2ec20ec8 100644 --- a/test/lit.cfg +++ b/test/lit.cfg @@ -258,6 +258,12 @@ for pattern in [r"\bbugpoint\b(?!-)", r"\byaml2obj\b", r"\byaml-bench\b", r"\bverify-uselistorder\b", + r"\bKaleidoscope-Ch3\b", + r"\bKaleidoscope-Ch4\b", + r"\bKaleidoscope-Ch5\b", + r"\bKaleidoscope-Ch6\b", + r"\bKaleidoscope-Ch7\b", + r"\bKaleidoscope-Ch8\b", # Handle these specially as they are strings searched # for during testing. r"\| \bcount\b", diff --git a/test/lit.site.cfg.in b/test/lit.site.cfg.in index 0b8ca65a18e..a1810379658 100644 --- a/test/lit.site.cfg.in +++ b/test/lit.site.cfg.in @@ -35,6 +35,7 @@ config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@" config.have_zlib = "@HAVE_LIBZ@" config.have_dia_sdk = @HAVE_DIA_SDK@ config.enable_ffi = "@LLVM_ENABLE_FFI@" +config.test_examples = "@ENABLE_EXAMPLES@" # Support substitution of the tools_dir with user parameters. This is # used when we can't determine the tool dir at configuration time.