OLD | NEW |
1 #!/usr/bin/env python2 | 1 #!/usr/bin/env python2 |
2 | 2 |
3 import argparse | 3 import argparse |
4 import os | 4 import os |
5 import re | 5 import re |
6 import subprocess | 6 import subprocess |
7 import sys | 7 import sys |
8 import tempfile | 8 import tempfile |
9 | 9 |
10 sys.path.insert(0, '../pydir') | 10 sys.path.insert(0, '../pydir') |
(...skipping 25 matching lines...) Expand all Loading... |
36 help='Driver program') | 36 help='Driver program') |
37 argparser.add_argument('--target', required=False, default='x8632', | 37 argparser.add_argument('--target', required=False, default='x8632', |
38 choices=arch_map.keys(), | 38 choices=arch_map.keys(), |
39 metavar='TARGET', | 39 metavar='TARGET', |
40 help='Translation target architecture') | 40 help='Translation target architecture') |
41 argparser.add_argument('-O', required=False, default='2', dest='optlevel', | 41 argparser.add_argument('-O', required=False, default='2', dest='optlevel', |
42 choices=['m1', '-1', '0', '1', '2'], | 42 choices=['m1', '-1', '0', '1', '2'], |
43 metavar='OPTLEVEL', | 43 metavar='OPTLEVEL', |
44 help='Optimization level ' + | 44 help='Optimization level ' + |
45 '(m1 and -1 are equivalent)') | 45 '(m1 and -1 are equivalent)') |
| 46 argparser.add_argument('--mattr', required=False, default='sse2', |
| 47 dest='attr', choices=['sse2', 'sse4.1'], |
| 48 metavar='ATTRIBUTE', help='Target attribute') |
46 argparser.add_argument('--prefix', required=True, | 49 argparser.add_argument('--prefix', required=True, |
47 metavar='SZ_PREFIX', | 50 metavar='SZ_PREFIX', |
48 help='String prepended to Subzero symbol names') | 51 help='String prepended to Subzero symbol names') |
49 argparser.add_argument('--output', '-o', required=True, | 52 argparser.add_argument('--output', '-o', required=True, |
50 metavar='EXECUTABLE', | 53 metavar='EXECUTABLE', |
51 help='Executable to produce') | 54 help='Executable to produce') |
52 argparser.add_argument('--dir', required=False, default='.', | 55 argparser.add_argument('--dir', required=False, default='.', |
53 metavar='OUTPUT_DIR', | 56 metavar='OUTPUT_DIR', |
54 help='Output directory for all files') | 57 help='Output directory for all files') |
55 argparser.add_argument('--llvm-bin-path', required=False, | 58 argparser.add_argument('--llvm-bin-path', required=False, |
(...skipping 30 matching lines...) Expand all Loading... |
86 line = fix_target.sub('i686-pc-linux-gnu', line) | 89 line = fix_target.sub('i686-pc-linux-gnu', line) |
87 f.write(line) | 90 f.write(line) |
88 f.close() | 91 f.close() |
89 | 92 |
90 base_sz = '%s.O%s.%s' % (base, args.optlevel, args.target) | 93 base_sz = '%s.O%s.%s' % (base, args.optlevel, args.target) |
91 asm_sz = os.path.join(args.dir, base_sz + '.sz.s') | 94 asm_sz = os.path.join(args.dir, base_sz + '.sz.s') |
92 obj_sz = os.path.join(args.dir, base_sz + '.sz.o') | 95 obj_sz = os.path.join(args.dir, base_sz + '.sz.o') |
93 obj_llc = os.path.join(args.dir, base + '.llc.o') | 96 obj_llc = os.path.join(args.dir, base + '.llc.o') |
94 shellcmd(['../llvm2ice', | 97 shellcmd(['../llvm2ice', |
95 '-O' + args.optlevel, | 98 '-O' + args.optlevel, |
| 99 '-mattr=' + args.attr, |
96 '--target=' + args.target, | 100 '--target=' + args.target, |
97 '--prefix=' + args.prefix, | 101 '--prefix=' + args.prefix, |
98 '-o=' + asm_sz, | 102 '-o=' + asm_sz, |
99 bitcode]) | 103 bitcode]) |
100 shellcmd([os.path.join(llvm_bin_path, 'llvm-mc'), | 104 shellcmd([os.path.join(llvm_bin_path, 'llvm-mc'), |
101 '-arch=' + arch_map[args.target], | 105 '-arch=' + arch_map[args.target], |
102 '-x86-asm-syntax=intel', | 106 '-x86-asm-syntax=intel', |
103 '-filetype=obj', | 107 '-filetype=obj', |
104 '-o=' + obj_sz, | 108 '-o=' + obj_sz, |
105 asm_sz]) | 109 asm_sz]) |
(...skipping 21 matching lines...) Expand all Loading... |
127 bitcode]) | 131 bitcode]) |
128 objs.append(obj_llc) | 132 objs.append(obj_llc) |
129 else: | 133 else: |
130 objs.append(bitcode) | 134 objs.append(bitcode) |
131 | 135 |
132 linker = 'clang' if os.path.splitext(args.driver)[1] == '.c' else 'clang++' | 136 linker = 'clang' if os.path.splitext(args.driver)[1] == '.c' else 'clang++' |
133 # TODO: Remove -mstackrealign after Subzero supports stack alignment. | 137 # TODO: Remove -mstackrealign after Subzero supports stack alignment. |
134 shellcmd([os.path.join(llvm_bin_path, linker), '-g', '-m32', | 138 shellcmd([os.path.join(llvm_bin_path, linker), '-g', '-m32', |
135 '-mstackrealign', args.driver] + objs + | 139 '-mstackrealign', args.driver] + objs + |
136 ['-lm', '-lpthread', '-o', os.path.join(args.dir, args.output)]) | 140 ['-lm', '-lpthread', '-o', os.path.join(args.dir, args.output)]) |
OLD | NEW |