From d68c8f4c00fb0cca72b4486e070fc061cfba0271 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sat, 6 Oct 2007 05:15:30 +0000 Subject: [PATCH] New directory. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42680 91177308-0d34-0410-b5e6-96231b3b80d8 --- www/demo/DemoInfo.html | 83 ++++++++ www/demo/cathead.png | Bin 0 -> 21602 bytes www/demo/index.cgi | 461 +++++++++++++++++++++++++++++++++++++++++ www/demo/syntax.css | 4 + 4 files changed, 548 insertions(+) create mode 100644 www/demo/DemoInfo.html create mode 100644 www/demo/cathead.png create mode 100644 www/demo/index.cgi create mode 100644 www/demo/syntax.css diff --git a/www/demo/DemoInfo.html b/www/demo/DemoInfo.html new file mode 100644 index 0000000000..54a5afa1d7 --- /dev/null +++ b/www/demo/DemoInfo.html @@ -0,0 +1,83 @@ + + + + +Demo page information + + + + + +

Demo page information

+ +

Press "back" or click here to return to the demo +page.

+ +

Hints and Advice

+ + + + +

Demangle C++ names with C++ filt

+ +

+Select this option if you want to run the output LLVM IR through "c++filt", +which converts 'mangled' C++ names to their unmangled version. +Note that LLVM code produced will not be lexically valid, but it will +be easier to understand. +

+ +

Run link-time optimizer

+ +

+Select this option to run the LLVM link-time optimizer, which is designed to +optimize across files in your application. Since the demo page doesn't allow +you to upload multiple files at once, and does not link in any libraries, we +configured the demo page optimizer to assume there are no calls +coming in from outside the source file, allowing it to optimize more +aggressively.

+ +

Note that you have to define 'main' in your program for this +to make much of a difference. +

+ +

Show detailed pass statistics

+ +

+Select this option to enable compilation timings and statistics from various +optimizers.

+ + +

Analyze generated bytecode

+ +

+Select this option to run the llvm-bcanalyzer tool +on the generated bytecode, which introspects into the format of the .bc file +itself.

+ + +

Show C++ API code

+ +

+Select this option to run the llvm2cpp tool +on the generated bytecode, which auto generates the C++ API calls that could +be used to create the .bc file. +

+ + + + diff --git a/www/demo/cathead.png b/www/demo/cathead.png new file mode 100644 index 0000000000000000000000000000000000000000..3bf1a45ec6f37e5d0138704d556588dcee960654 GIT binary patch literal 21602 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 CJz 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 literal 0 HcmV?d00001 diff --git a/www/demo/index.cgi b/www/demo/index.cgi new file mode 100644 index 0000000000..b29efb60e9 --- /dev/null +++ b/www/demo/index.cgi @@ -0,0 +1,461 @@ +#!/usr/dcs/software/supported/bin/perl -w +# LLVM Web Demo script +# + +use strict; +use CGI; +use POSIX; +use Mail::Send; + +$| = 1; + +my $ROOT = "/tmp/webcompile"; +#my $ROOT = "/home/vadve/lattner/webcompile"; + +open( STDERR, ">&STDOUT" ) or die "can't redirect stderr to stdout"; + +if ( !-d $ROOT ) { mkdir( $ROOT, 0777 ); } + +my $LOGFILE = "$ROOT/log.txt"; +my $FORM_URL = 'index.cgi'; +my $MAILADDR = 'sabre@nondot.org'; +my $CONTACT_ADDRESS = 'Questions or comments? Email the LLVMdev mailing list.'; +my $LOGO_IMAGE_URL = 'cathead.png'; +my $TIMEOUTAMOUNT = 20; +$ENV{'LD_LIBRARY_PATH'} = '/home/vadve/shared/localtools/fc1/lib/'; + +my @PREPENDPATHDIRS = + ( + '/home/vadve/shared/llvm-gcc4.0-2.1/bin/', + '/home/vadve/shared/llvm-2.1/Release/bin'); + +my $defaultsrc = "#include \n#include \n\n" . + "int power(int X) {\n if (X == 0) return 1;\n" . + " return X*power(X-1);\n}\n\n" . + "int main(int argc, char **argv) {\n" . + " printf(\"%d\\n\", power(atoi(argv[0])));\n}\n"; + +sub getname { + my ($extension) = @_; + for ( my $count = 0 ; ; $count++ ) { + my $name = + sprintf( "$ROOT/_%d_%d%s", $$, $count, $extension ); + if ( !-f $name ) { return $name; } + } +} + +my $c; + +sub barf { + print "", @_, "\n"; + print $c->end_html; + system("rm -f $ROOT/locked"); + exit 1; +} + +sub writeIntoFile { + my $extension = shift @_; + my $contents = join "", @_; + my $name = getname($extension); + local (*FILE); + open( FILE, ">$name" ) or barf("Can't write to $name: $!"); + print FILE $contents; + close FILE; + return $name; +} + +sub addlog { + my ( $source, $pid, $result ) = @_; + open( LOG, ">>$LOGFILE" ); + my $time = scalar localtime; + my $remotehost = $ENV{'REMOTE_ADDR'}; + print LOG "[$time] [$remotehost]: $pid\n"; + print LOG "<<<\n$source\n>>>\nResult is: <<<\n$result\n>>>\n"; + close LOG; +} + +sub dumpFile { + my ( $header, $file ) = @_; + my $result; + open( FILE, "$file" ) or barf("Can't read $file: $!"); + while () { + $result .= $_; + } + close FILE; + my $UnhilightedResult = $result; + my $HtmlResult = + "

$header

\n
\n" . $c->escapeHTML($result) . "\n
\n"; + if (wantarray) { + return ( $UnhilightedResult, $HtmlResult ); + } + else { + return $HtmlResult; + } +} + +sub syntaxHighlightLLVM { + my ($input) = @_; + $input =~ s@\b(void|i8|i1|i16|i32|i64|float|double|type|label|opaque)\b@$1@g; + $input =~ s@\b(add|sub|mul|div|rem|and|or|xor|setne|seteq|setlt|setgt|setle|setge|phi|tail|call|cast|to|shl|shr|vaarg|vanext|ret|br|switch|invoke|unwind|malloc|alloca|free|load|store|getelementptr|begin|end|true|false|declare|global|constant|const|internal|uninitialized|external|implementation|linkonce|weak|appending|null|to|except|not|target|endian|pointersize|big|little|volatile)\b@$1@g; + + # Add links to the FAQ. + $input =~ s@(_ZNSt8ios_base4Init[DC]1Ev)@$1@g; + $input =~ s@\bundef\b@undef@g; + return $input; +} + +sub mailto { + my ( $recipient, $body ) = @_; + my $msg = + new Mail::Send( Subject => "LLVM Demo Page Run", To => $recipient ); + my $fh = $msg->open(); + print $fh $body; + $fh->close(); +} + +$c = new CGI; +print $c->header; + +print < + + + Try out LLVM in your browser! + + + + +
+ Try out LLVM in your browser! +
+ +
+ + +EOF + +if ( -f "$ROOT/locked" ) { + my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$locktime) = + stat("$ROOT/locked"); + my $currtime = time(); + if ($locktime + 60 > $currtime) { + print "This page is already in use by someone else at this "; + print "time, try reloading in a second or two. Meow!
'\n"; + exit 0; + } +} + +system("touch $ROOT/locked"); + +print <

+END + +print $c->start_multipart_form( 'POST', $FORM_URL ); + +my $source = $c->param('source'); + + +# Start the user out with something valid if no code. +$source = $defaultsrc if (!defined($source)); + +print '
'; + +print "Type your source code in below: (hints and +advice)
\n"; + +print $c->textarea( + -name => "source", + -rows => 16, + -columns => 60, + -default => $source +), "
"; + +print "Or upload a file: "; +print $c->filefield( -name => 'uploaded_file', -default => '' ); + +print "

\n"; + + +print '

'; + +print "

General Options

"; + +print "Source language: ", + $c->radio_group( + -name => 'language', + -values => [ 'C', 'C++' ], + -default => 'C' + ), "

"; + +print $c->checkbox( + -name => 'linkopt', + -label => 'Run link-time optimizer', + -checked => 'checked' + ),' ?
'; + +print $c->checkbox( + -name => 'showstats', + -label => 'Show detailed pass statistics' + ), ' ?
'; + +print $c->checkbox( + -name => 'cxxdemangle', + -label => 'Demangle C++ names' + ),' ?

'; + + +print "

Output Options

"; + +print $c->checkbox( + -name => 'showbcanalysis', + -label => 'Show detailed bytecode analysis' + ),' ?
'; + +print $c->checkbox( + -name => 'showllvm2cpp', + -label => 'Show LLVM C++ API code' + ), ' ?'; + +print "
"; + +print "

", $c->submit(-value=> 'Compile Source Code'), + "
\n", $c->endform; + +print "\n

If you have questions about the LLVM code generated by the +front-end, please check the FAQ and +the demo page hints section. +

\n"; + +$ENV{'PATH'} = ( join ( ':', @PREPENDPATHDIRS ) ) . ":" . $ENV{'PATH'}; + +sub sanitychecktools { + my $sanitycheckfail = ''; + + # insert tool-specific sanity checks here + $sanitycheckfail .= ' llvm-dis' + if `llvm-dis --help 2>&1` !~ /ll disassembler/; + + $sanitycheckfail .= ' llvm-gcc' + if ( `llvm-gcc --version 2>&1` !~ /Free Software Foundation/ ); + + $sanitycheckfail .= ' llvm-ld' + if `llvm-ld --help 2>&1` !~ /llvm linker/; + + $sanitycheckfail .= ' llvm-bcanalyzer' + if `llvm-bcanalyzer --help 2>&1` !~ /bcanalyzer/; + + barf( +"
The demo page is currently unavailable. [tools: ($sanitycheckfail ) failed sanity check]" + ) + if $sanitycheckfail; +} + +sanitychecktools(); + +sub try_run { + my ( $program, $commandline, $outputFile ) = @_; + my $retcode = 0; + + eval { + local $SIG{ALRM} = sub { die "timeout"; }; + alarm $TIMEOUTAMOUNT; + $retcode = system($commandline); + alarm 0; + }; + if ( $@ and $@ =~ /timeout/ ) { + barf("Program $program took too long, compile time limited for the web script, sorry!.\n"); + } + if ( -s $outputFile ) { + print scalar dumpFile( "Output from $program", $outputFile ); + } + #print "

Finished dumping command output.

\n"; + if ( WIFEXITED($retcode) && WEXITSTATUS($retcode) != 0 ) { + barf( +"$program exited with an error. Please correct source and resubmit.

\n" . +"Please note that this form only allows fully formed and correct source" . +" files. It will not compile fragments of code.

" + ); + } + if ( WIFSIGNALED($retcode) != 0 ) { + my $sig = WTERMSIG($retcode); + barf( + "Ouch, $program caught signal $sig. Sorry, better luck next time!\n" + ); + } +} + +my %suffixes = ( + 'Java' => '.java', + 'JO99' => '.jo9', + 'C' => '.c', + 'C++' => '.cc', + 'Stacker' => '.st', + 'preprocessed C' => '.i', + 'preprocessed C++' => '.ii' +); +my %languages = ( + '.jo9' => 'JO99', + '.java' => 'Java', + '.c' => 'C', + '.i' => 'preprocessed C', + '.ii' => 'preprocessed C++', + '.cc' => 'C++', + '.cpp' => 'C++', + '.st' => 'Stacker' +); + +my $uploaded_file_name = $c->param('uploaded_file'); +if ($uploaded_file_name) { + if ($source) { + barf( +"You must choose between uploading a file and typing code in. You can't do both at the same time." + ); + } + $uploaded_file_name =~ s/^.*(\.[A-Za-z]+)$/$1/; + my $language = $languages{$uploaded_file_name}; + $c->param( 'language', $language ); + + print "

Processing uploaded file. It looks like $language.

\n"; + my $fh = $c->upload('uploaded_file'); + if ( !$fh ) { + barf( "Error uploading file: " . $c->cgi_error ); + } + while (<$fh>) { + $source .= $_; + } + close $fh; +} + +if ($c->param('source')) { + print $c->hr; + my $extension = $suffixes{ $c->param('language') }; + barf "Unknown language; can't compile\n" unless $extension; + + # Add a newline to the source here to avoid a warning from gcc. + $source .= "\n"; + + # Avoid security hole due to #including bad stuff. + $source =~ +s@(\n)?#include.*[<"](.*\.\..*)[">].*\n@$1#error "invalid #include file $2 detected"\n@g; + + my $inputFile = writeIntoFile( $extension, $source ); + my $pid = $$; + + my $bytecodeFile = getname(".bc"); + my $outputFile = getname(".llvm-gcc.out"); + my $timerFile = getname(".llvm-gcc.time"); + + my $stats = ''; + if ( $extension eq ".st" ) { + $stats = "-stats -time-passes " + if ( $c->param('showstats') ); + try_run( "llvm Stacker front-end (stkrc)", + "stkrc $stats -o $bytecodeFile $inputFile > $outputFile 2>&1", + $outputFile ); + } else { + #$stats = "-Wa,--stats,--time-passes,--info-output-file=$timerFile" + $stats = "-ftime-report" + if ( $c->param('showstats') ); + try_run( "llvm C/C++ front-end (llvm-gcc)", + "llvm-gcc -emit-llvm -W -Wall -O2 $stats -o $bytecodeFile -c $inputFile > $outputFile 2>&1", + $outputFile ); + } + + if ( $c->param('showstats') && -s $timerFile ) { + my ( $UnhilightedResult, $HtmlResult ) = + dumpFile( "Statistics for front-end compilation", $timerFile ); + print "$HtmlResult\n"; + } + + if ( $c->param('linkopt') ) { + my $stats = ''; + my $outputFile = getname(".gccld.out"); + my $timerFile = getname(".gccld.time"); + $stats = "--stats --time-passes --info-output-file=$timerFile" + if ( $c->param('showstats') ); + my $tmpFile = getname(".bc"); + try_run( + "optimizing linker (llvm-ld)", +"llvm-ld $stats -o=$tmpFile $bytecodeFile > $outputFile 2>&1", + $outputFile + ); + system("mv $tmpFile.bc $bytecodeFile"); + system("rm $tmpFile"); + + if ( $c->param('showstats') && -s $timerFile ) { + my ( $UnhilightedResult, $HtmlResult ) = + dumpFile( "Statistics for optimizing linker", $timerFile ); + print "$HtmlResult\n"; + } + } + + print " Bytecode size is ", -s $bytecodeFile, " bytes.\n"; + + my $disassemblyFile = getname(".ll"); + try_run( "llvm-dis", + "llvm-dis -o=$disassemblyFile $bytecodeFile > $outputFile 2>&1", + $outputFile ); + + if ( $c->param('cxxdemangle') ) { + print " Demangling disassembler output.\n"; + my $tmpFile = getname(".ll"); + system("c++filt < $disassemblyFile > $tmpFile 2>&1"); + system("mv $tmpFile $disassemblyFile"); + } + + my ( $UnhilightedResult, $HtmlResult ); + if ( -s $disassemblyFile ) { + ( $UnhilightedResult, $HtmlResult ) = + dumpFile( "Output from LLVM disassembler", $disassemblyFile ); + print syntaxHighlightLLVM($HtmlResult); + } + else { + print "

Hmm, that's weird, llvm-dis didn't produce any output.

\n"; + } + + if ( $c->param('showbcanalysis') ) { + my $analFile = getname(".bca"); + try_run( "llvm-bcanalyzer", "llvm-bcanalyzer $bytecodeFile > $analFile 2>&1", + $analFile); + } + if ($c->param('showllvm2cpp') ) { + my $l2cppFile = getname(".l2cpp"); + try_run("llvm2cpp","llvm2cpp $bytecodeFile -o $l2cppFile 2>&1", + $l2cppFile); + } + + # Get the source presented by the user to CGI, convert newline sequences to simple \n. + my $actualsrc = $c->param('source'); + $actualsrc =~ s/\015\012/\n/go; + # Don't log this or mail it if it is the default code. + if ($actualsrc ne $defaultsrc) { + addlog( $source, $pid, $UnhilightedResult ); + + my ( $ip, $host, $lg, $lines ); + chomp( $lines = `wc -l < $inputFile` ); + $lg = $c->param('language'); + $ip = $c->remote_addr(); + chomp( $host = `host $ip` ) if $ip; + mailto( $MAILADDR, + "--- Query: ---\nFrom: ($ip) $host\nInput: $lines lines of $lg\n" + . "C++ demangle = " + . ( $c->param('cxxdemangle') ? 1 : 0 ) + . ", Link opt = " + . ( $c->param('linkopt') ? 1 : 0 ) . "\n\n" + . ", Show stats = " + . ( $c->param('showstats') ? 1 : 0 ) . "\n\n" + . "--- Source: ---\n$source\n" + . "--- Result: ---\n$UnhilightedResult\n" ); + } + unlink( $inputFile, $bytecodeFile, $outputFile, $disassemblyFile ); +} + +print $c->hr, "
$CONTACT_ADDRESS
", $c->end_html; +system("rm $ROOT/locked"); +exit 0; diff --git a/www/demo/syntax.css b/www/demo/syntax.css new file mode 100644 index 0000000000..90daf5fcbd --- /dev/null +++ b/www/demo/syntax.css @@ -0,0 +1,4 @@ +/* LLVM syntax highlighting for the Web */ + +.llvm_type { font-style: oblique; color: green } +.llvm_keyword { font-weight: bold; color: blue } -- 2.50.1