[llvm-commits] [polly] r142776 - /polly/trunk/utils/pollycc
Tobias Grosser
grosser at fim.uni-passau.de
Sun Oct 23 13:59:47 PDT 2011
Author: grosser
Date: Sun Oct 23 15:59:47 2011
New Revision: 142776
URL: http://llvm.org/viewvc/llvm-project?rev=142776&view=rev
Log:
Remove pollycc
The recommanded and supported way to use Polly is to load it into clang.
Documentation for this is available on the website under
http://polly.grosser.es/example_load_Polly_into_clang.html
Removed:
polly/trunk/utils/pollycc
Removed: polly/trunk/utils/pollycc
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/utils/pollycc?rev=142775&view=auto
==============================================================================
--- polly/trunk/utils/pollycc (original)
+++ polly/trunk/utils/pollycc (removed)
@@ -1,403 +0,0 @@
-#!/usr/bin/env python
-
-import argparse
-import subprocess
-import tempfile
-import os
-import sys
-
-def createAssemblyFile(tmpDir, file, number, args, polly):
- # Check if file exists
- if not os.path.isfile(file):
- print "File '" + file + "' does not exist. Compilation aborted."
- sys.exit(1)
-
- # Create an LLVM-IR .ll file
- tmpDir = tmpDir + "/" + str(number)
- subprocess.call(["mkdir", tmpDir])
- llFile = tmpDir + '/output.ll'
- includeFlags = ['-I' + x for x in args.includes]
- preprocessorFlags = ['-D' + x for x in args.preprocessor]
-
- if args.progress:
- print "Optimizing file: " + file
- print "- Compiling C to LLVM-IR"
-
- commandLine = ["clang","-emit-llvm", "-S", file, '-o', llFile,
- '-std=' + args.standard] + includeFlags + preprocessorFlags \
- + args.unknown_args
-
- if args.commands:
- print ' '.join(commandLine)
-
- exit = subprocess.call(commandLine)
-
- if exit:
- print 'Translation from C to LLVM-IR failed. This command did not work:'
- print ' '.join(commandLine)
- sys.exit(1)
-
- # Preprocess the programm such that as many optimization opportunities
- # as possible are exposed.
- preoptFile = tmpDir + '/output.preopt.ll'
- preoptPasses = '-basicaa -mem2reg -simplify-libcalls ' \
- '-simplifycfg -instcombine -tailcallelim -loop-simplify ' \
- '-lcssa -loop-rotate -lcssa -loop-unswitch -instcombine ' \
- '-loop-simplify -lcssa -indvars -loop-deletion -instcombine ' \
- '-polly-prepare -polly-region-simplify -indvars'
-
- if args.progress:
- print "- Preoptimizing to expose optimization opportunities"
-
- commandLine = ['opt', '-load', polly] + preoptPasses.split(' ') \
- + ['-S', llFile, '-o', preoptFile]
-
- if args.commands:
- print ' '.join(commandLine)
-
- exit = subprocess.call(commandLine)
-
- if exit:
- print 'Preoptimizing failed: This command did not work'
- print ' '.join(commandLine)
- sys.exit(1)
-
- # Run the Polly optimizers
- pollyFile = tmpDir + '/output.polly.ll'
-
- if args.view or args.viewonly:
- commandLine = ['opt', '-load', polly, '-basicaa'] \
- + [preoptFile, '-disable-output']
-
- if args.view:
- commandLine.append('-view-scops')
- else:
- commandLine.append('-view-scops-only')
-
- if args.commands:
- print ' '.join(commandLine)
-
- exit = subprocess.call(commandLine)
-
- if exit:
- print 'Polly optimizations failed: This command did not work'
- print ' '.join(commandLine)
- sys.exit(1)
-
- if args.fpolly:
- commandLine = ['opt', '-load', polly, '-basicaa'] \
- + [preoptFile, '-disable-polly-legality']
-
- if args.pollyimport:
- commandLine.append('-polly-import-jscop')
-
- if args.fpluto:
- commandLine.append('-polly-optimize')
-
- if args.foptimize:
- commandLine.append('-polly-optimize-isl')
-
- if args.fatLeastOnce:
- commandLine.append('-enable-polly-atLeastOnce')
-
- if args.faligned:
- commandLine.append('-enable-polly-aligned')
-
- if args.ftile:
- commandLine.append('-enable-pluto-tile')
-
- if args.pluto_fuse:
- commandLine.append('-pluto-fuse')
- commandLine.append(args.pluto_fuse)
-
- if args.fparallel:
- commandLine.append('-enable-polly-openmp')
-
- if args.fvector:
- commandLine.append('-enable-polly-vector')
- commandLine.append('-enable-schedule-prevector')
- if (args.ftile or args.fpluto):
- commandLine.append('-enable-pluto-prevector')
-
- if args.pollyexport:
- commandLine.append('-polly-export-jscop')
-
- if args.debug:
- debugCommandLine = commandLine + ['-polly-cloog', '-analyze', '-q']
- subprocess.call(debugCommandLine)
-
- if args.progress:
- print "- Running polly",
-
- if args.fpluto:
- print "with pluto",
-
- if args.ftile:
- print "and tiling",
-
- if args.fparallel:
- print "and parallel",
-
- print ""
-
- commandLine = commandLine + ['-polly-codegen', '-S', '-o', pollyFile]
-
- if args.commands:
- print ' '.join(commandLine)
-
- exit = subprocess.call(commandLine)
-
- if exit:
- print 'Polly optimizations failed: This command did not work'
- print ' '.join(commandLine)
- sys.exit(1)
-
-
- # Run optimizations to clean up the redundant calculations Polly introduced
- # and to take advantage of non polyhedral optimizations.
- optFile = tmpDir + '/output.opt.ll'
- commandLine = ['opt', '-S', '-o', optFile + "tmp"]
- commandLine2 = ['opt', '-S', '-o', optFile]
-
- if args.optlevel != '0':
- commandLine.append('-O' + args.optlevel)
- commandLine2.append('-O' + args.optlevel)
-
- if args.fpolly:
- commandLine.append(pollyFile)
- else:
- commandLine.append(preoptFile)
-
- commandLine2.append(optFile + "tmp");
-
- if args.progress:
- print "- Running normal LLVM -O3 passes"
-
- exit = subprocess.call(commandLine)
-
- if exit:
- print 'LLVM -O3 optimizations failed: This command did not work'
- print ' '.join(commandLine)
- sys.exit(1)
-
- exit = subprocess.call(commandLine2)
-
- if exit:
- print 'LLVM -O3 optimizations failed: This command did not work'
- print ' '.join(commandLine)
- sys.exit(1)
-
-
- if args.emitllvm:
- return optFile
-
-
- # Create assembly file
- assemblyFile = tmpDir + '/output.opt.s'
- commandLine = ['llc', optFile, '-o', assemblyFile]
-
- if args.progress:
- print "- Translating LLVM-IR to assembly"
-
- subprocess.call(commandLine)
-
- if exit:
- print 'Translating LLVM-IR to assembly failed: This command did not work'
- print ' '.join(commandLine)
- sys.exit(1)
-
- return assemblyFile
-
-def parseArguments():
- description = 'pollycc is a simple replacement for compiler drivers like ' \
- 'gcc, clang or icc. It uses clang to compile C code and can ' \
- 'optimize the code with Polly. It will either produce an ' \
- 'optimized binary or an optimized \'.o\' file.'
-
- parser = argparse.ArgumentParser(description=description)
- parser.add_argument('files', nargs='+')
- parser.add_argument('-o', dest='output', help='the name of the output file')
- parser.add_argument('-I', action='append', dest='includes', default=[],
- help='include path to pass to clang')
- parser.add_argument('-D', action='append', dest='preprocessor', default=[],
- help='preprocessor directives to pass to clang')
- parser.add_argument('-l', action='append', dest='libraries', default=[],
- help='library flags to pass to the linker')
- parser.add_argument('-L', action='append', dest='librarypath', default=[],
- help='library paths to pass to the linker')
- parser.add_argument('-O', dest='optlevel', choices='0123s', default='3',
- help='optimization level.')
- parser.add_argument('-S', action='store_true',
- help='compile only; do not link or assemble')
- parser.add_argument('-emit-llvm', action='store_true', dest='emitllvm',
- help='output LLVM-IR instead of assembly if -S is set')
- parser.add_argument('-std', dest='standard', help='The C standard to use',
- default='gnu89')
- parser.add_argument('-p', '--progress', action='store_true',
- help='Show the compilation progress')
- parser.add_argument('-c', action='store_true',
- help='compile and assemble, but do not link')
- parser.add_argument('-fpolly', help='enable polly', action='store_true')
- parser.add_argument('-fpluto', help='enable pluto', action='store_true')
- parser.add_argument('-fpluto-fuse', dest='pluto_fuse', help='enable pluto')
- parser.add_argument('-foptimize',
- help='Optimize schedule with isl pluto like algorithm',
- action='store_true')
- parser.add_argument('-faligned', help='Assume aligned vector accesses',
- action='store_true')
- parser.add_argument('-fatLeastOnce',
- help='Assume all loops are executed at least once',
- action='store_true')
- parser.add_argument('-fview-scops', dest='view',
- help='Show the scops with graphviz',
- action='store_true')
- parser.add_argument('-fview-scops-only', dest='viewonly',
- help='Show the scops with graphviz (Only Basic Blocks)',
- action='store_true')
- parser.add_argument('-ftile', '-fpluto-tile',
- help='enable pluto tiling', action='store_true')
- parser.add_argument('-fparallel',
- help='enable openmp code generation (in development)',
- action='store_true')
- parser.add_argument('-fvector',
- help='enable SIMD code generation (in development)',
- action='store_true')
- parser.add_argument('-fpolly-export', dest='pollyexport',
- help='Export Polly jscop', action='store_true')
- parser.add_argument('-fpolly-import', dest='pollyimport',
- help='Import Polly jscop', action='store_true')
- parser.add_argument('-commands', help='print command lines executed',
- action='store_true')
- parser.add_argument('-d', '--debug', help='print debugging output',
- action='store_true')
- parser.add_argument('-v', '--version', dest='version', action='store_true',
- help='print version info')
-
- arguments, argv = parser.parse_known_args()
-
- if argv:
- arguments.unknown_args = filter(lambda x: x[0] == '-', argv)
- arguments.files = arguments.files + filter(lambda x: x[0] != '-', argv)
-
- if arguments.unknown_args:
- print 'warning: The following arguments are unknown and will \n' \
- ' be passed directly to clang: ' + \
- ' '.join(arguments.unknown_args)
- else:
- arguments.unknown_args = []
-
- # Post process arguments
- if arguments.ftile:
- arguments.fpluto = True
-
- if arguments.pollyimport:
- arguments.fpolly = True
-
- if arguments.view or arguments.viewonly:
- arguments.fpolly = True
-
- if arguments.fpluto:
- arguments.fpolly = True
-
- if arguments.foptimize:
- arguments.fpolly = True
-
- return arguments
-
-def createAssemblyFiles(files, args, pollyLib):
- assemblyFiles = []
-
- tmpDir = tempfile.mkdtemp(prefix='pollycc-');
-
- number = 0
- for file in args.files:
- assemblyFiles.append(createAssemblyFile(tmpDir, file, number, args, pollyLib))
- if args.progress:
- print ""
-
- number = number + 1
-
- return assemblyFiles
-
-def createOutputFiles(assemblyFiles, args):
- if args.output:
- outputFile = args.output
- elif len(args.files) == 1 and args.c:
- outputFile = args.files[0].replace('.c', '.o')
- elif len(args.files) == 1 and args.S:
- outputFile = args.files[0].replace('.c', '.s')
- else:
- outputFile = 'a.out'
-
- linkerFlags = ['-l' + x for x in args.libraries]
- libraryPath = ['-L' + x for x in args.librarypath]
-
- commandLine = ['gcc', '-o', outputFile] + assemblyFiles
-
- if args.S:
- subprocess.call(['mv', assemblyFiles[0], outputFile])
- return
-
- if args.c:
- commandLine.append('-c')
- else:
- commandLine = commandLine + linkerFlags + libraryPath
-
- if args.fparallel:
- commandLine.append('-lgomp')
-
- if args.progress:
- print "Final linking"
-
- subprocess.call(commandLine)
-
-def checkExecutables(pollyLib, pluto):
- commandLine = ['opt', '-load', pollyLib, '-help']
- try:
- proc = subprocess.Popen(commandLine, stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- stdout_value = proc.communicate()[0]
-
- if not stdout_value.count('polly-prepare'):
- sys.exit('Polly support not available in opt')
-
- if pluto and not stdout_value.count('Optimize the scop using pocc'):
- sys.exit('Polly compiled without POCC/Pluto support. -ftile and -fpluto'
- ' will not work.')
- except OSError:
- print 'error: opt cannot be executed: '
- print 'failing command: \n' + " ".join(commandLine)
- sys.exit(1)
-
- commandLine = ['clang', '-v']
- try:
- subprocess.call(commandLine, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- except OSError:
- print 'error: clang cannot be executed: '
- print 'failing command: \n' + " ".join(commandLine)
- sys.exit(1)
-
- commandLine = ['lli', '-help']
- try:
- subprocess.call(commandLine, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
- except OSError:
- print 'error: lli cannot be executed: '
- print 'failing command: \n' + " ".join(commandLine)
- sys.exit(1)
-
-def main():
- args = parseArguments()
-
- if not 'LIBPOLLY' in os.environ:
- sys.exit('Polly library not provided. Please set LIBPOLLY environment ' + \
- 'variable to the LLVMPolly.so file')
-
- pollyLib = os.environ['LIBPOLLY']
-
- checkExecutables(pollyLib, args.fpluto)
-
- assemblyFiles = createAssemblyFiles(args.files, args, pollyLib)
- createOutputFiles(assemblyFiles, args)
-
-if __name__ == '__main__':
- main()
More information about the llvm-commits
mailing list