Avoid depending on LCSSA implicitly pulling in LoopSimplify.
[oota-llvm.git] / test / lib / llvm2cpp.exp
1 # This file defines a tcl proc to assist with testing the llvm2cpp. There are
2 # no llvm2cpp specific test cases. Instead, it utilizes all the existing test
3 # cases and makes sure llvm2cpp can run them. The basic idea is that we find
4 # all the LLVM Assembly (*.ll) files, run llvm2cpp on them to generate a C++
5 # program, compile those programs, run them and see if what they produce matches
6 # the original input to llvm2cpp.
7
8 proc llvm2cpp-test { files } {
9   global subdir llvmtoolsdir llvmlibsdir objdir srcdir objroot srcroot 
10   set timeout 30
11   set path [file join $objdir $subdir]
12   set llc [file join $llvmtoolsdir llc ]
13   set llvmas [file join $llvmtoolsdir llvm-as ]
14   set llvmdis [file join $llvmtoolsdir llvm-dis ]
15
16   #Make Output Directory if it does not exist already
17   if { [file exists path] } {
18       cd $path
19   } else {
20       file mkdir $path
21       cd $path
22   }
23   
24   file mkdir Output
25
26   foreach test $files {
27       
28     set filename [file tail $test]
29     set generated [file join Output $filename.cpp]
30     set executable [file join Output $filename.exe]
31     set output [file join Output $filename.gen]
32     set assembly [file join Output $filename.asm]
33     set testname [file rootname $filename]
34     set bytecode [file join Output $filename.bc]
35
36     # Note that the stderr for llvm-as, etc. must be redirected to /dev/null 
37     # because otherwise exec will see the msgs and return 1 even though they 
38     # are only warnings. If real errors are generated on stderr then llvm-as 
39     # will return a non-zero retval anyway so we're good.
40
41     # Scan the test file to see if there's an XFAIL file. If so, don't run it
42     set retval [ catch { 
43       exec -keepnewline grep XFAIL $test 2>/dev/null } msg ]
44     if { $retval == 0 } {
45       continue;
46     }
47
48     # Run llvm-as/llvm-dis
49     set pipeline llvm-as|llvm-dis
50     set retval [ catch { 
51       exec -keepnewline $llvmas < $test -o - | $llvmdis -o $assembly 2>/dev/null } msg ]
52
53     if { $retval != 0 } {
54       fail "$test: $pipeline returned $retval\n$msg"
55       continue 
56     }
57
58     # Build bytecode for llvm2cpp input
59     set retval [ catch { 
60       exec -keepnewline $llvmas < $assembly > $bytecode 2>/dev/null } msg ]
61
62     if { $retval != 0 } {
63       fail "$test: llvm-as returned $retval\n$msg"
64       continue 
65     }
66
67     set retval [ catch { 
68       exec -keepnewline $llc -march=cpp -o $generated < $bytecode 2>/dev/null } msg]
69
70     if { $retval != 0 } {
71       fail "$test: llvm2cpp returned $retval\n$msg"
72       continue
73     }
74
75     set retval [ catch { 
76       exec -keepnewline gcc -g -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -o $executable $generated -I$srcroot/include -I$objroot/include -L$llvmlibsdir -lLLVMCore -lLLVMSupport -lLLVMSystem -lstdc++ } msg ] 
77     if { $retval != 0 } {
78       fail "$test: gcc returned $retval\n$msg"
79       continue
80     }
81
82     set retval [ catch { exec -keepnewline $executable > $output } msg ]
83     if { $retval != 0 } {
84       set execname [file tail $executable]
85       fail "$test: $execname returned $retval:\n$msg"
86       continue
87     } 
88
89     set retval [ catch { 
90       exec -keepnewline diff $assembly $output } msg ]
91
92     if { $retval != 0 } {
93       fail "$test: diff returned $retval:\n$msg"
94       continue
95     }
96     pass "$test"
97   }
98 }
99
100