Index: pnacl/driver/pnacl-translate.py |
diff --git a/pnacl/driver/pnacl-translate.py b/pnacl/driver/pnacl-translate.py |
index abd43103d27c53af50f2ab154b4d01d52394483f..7353c039e90bb82a6d6e6f8e59f6e999c31daa5e 100755 |
--- a/pnacl/driver/pnacl-translate.py |
+++ b/pnacl/driver/pnacl-translate.py |
@@ -124,43 +124,29 @@ EXTRA_ENV = { |
'LLC_FLAGS_MIPS32': '-sfi-load -sfi-store -sfi-stack -sfi-branch -sfi-data', |
# LLC flags which set the target and output type. |
- # These are handled separately by libLTO. |
- 'LLC_FLAGS_TARGET' : '-mcpu=${LLC_MCPU} ' + |
- '-mtriple=${TRIPLE} ' + |
- '-filetype=${filetype}', |
+ 'LLC_FLAGS_TARGET' : '-mtriple=${TRIPLE} -filetype=${filetype}', |
+ |
# Append additional non-default flags here. |
- 'LLC_FLAGS_EXTRA' : '${#OPT_LEVEL ? -O${OPT_LEVEL}} ' + |
+ 'LLC_FLAGS_EXTRA' : '${FAST_TRANSLATION ? ${LLC_FLAGS_FAST}} ' + |
+ '${#OPT_LEVEL ? -O${OPT_LEVEL}} ' + |
'${OPT_LEVEL == 0 ? -disable-fp-elim}', |
# Opt level from command line (if any) |
'OPT_LEVEL' : '', |
- # slower translation == faster code |
- 'LLC_FLAGS_SLOW': |
- # Due to a quadratic algorithm used for tail merging |
- # capping it at 50 helps speed up translation |
- '-tail-merge-threshold=50', |
- |
# faster translation == slower code |
'LLC_FLAGS_FAST' : '${LLC_FLAGS_FAST_%ARCH%}', |
- 'LLC_FLAGS_FAST_X8632': |
- '-O0 ' + |
- # This, surprisingly, makes a measurable difference |
+ 'LLC_FLAGS_FAST_X8632': '-O0 ' + |
+ # This, surprisingly, makes a measurable difference |
'-tail-merge-threshold=20', |
- 'LLC_FLAGS_FAST_X8664': |
- '-O0 ' + |
+ 'LLC_FLAGS_FAST_X8664': '-O0 ' + |
'-tail-merge-threshold=20', |
- 'LLC_FLAGS_FAST_ARM': |
- # due to slow turn around times ARM settings have not been explored in depth |
- '-O0 ' + |
+ 'LLC_FLAGS_FAST_ARM': '-O0 ' + |
'-tail-merge-threshold=20', |
'LLC_FLAGS_FAST_MIPS32': '-fast-isel -tail-merge-threshold=20', |
- 'LLC_FLAGS': '${LLC_FLAGS_TARGET} ' + |
- '${LLC_FLAGS_COMMON} ' + |
- '${LLC_FLAGS_%ARCH%} ' + |
- '${FAST_TRANSLATION ? ${LLC_FLAGS_FAST} : ${LLC_FLAGS_SLOW}} ' + |
+ 'LLC_FLAGS': '${LLC_FLAGS_TARGET} ${LLC_FLAGS_COMMON} ${LLC_FLAGS_%ARCH%} ' + |
'${LLC_FLAGS_EXTRA}', |
# CPU that is representative of baseline feature requirements for NaCl |
@@ -169,14 +155,15 @@ EXTRA_ENV = { |
# Note: this may be different from the in-browser translator, which may |
# do auto feature detection based on CPUID, but constrained by what is |
# accepted by NaCl validators. |
- 'LLC_MCPU' : '${LLC_MCPU_%ARCH%}', |
+ 'LLC_MCPU' : '-mcpu=${LLC_MCPU_%ARCH%}', |
'LLC_MCPU_ARM' : 'cortex-a8', |
'LLC_MCPU_X8632' : 'pentium4', |
'LLC_MCPU_X8664' : 'core2', |
'LLC_MCPU_MIPS32' : 'mips32r2', |
# Note: this is only used in the unsandboxed case |
- 'RUN_LLC' : '${LLVM_LLC} ${LLC_FLAGS} ${input} -o ${output} ' + |
+ 'RUN_LLC' : '${LLVM_LLC} ${LLC_FLAGS} ${LLC_MCPU} ' |
+ '${input} -o ${output} ' + |
'-metadata-text ${output}.meta', |
# Rate in bits/sec to stream the bitcode from sel_universal over SRPC |
# for testing. Defaults to 1Gbps (effectively unlimited). |
@@ -199,7 +186,8 @@ TranslatorPatterns = [ |
( '(-ffunction-sections)', "env.append('LLC_FLAGS_EXTRA', $0)"), |
( '(--gc-sections)', "env.append('LD_FLAGS', $0)"), |
( '(-mattr=.*)', "env.append('LLC_FLAGS_EXTRA', $0)"), |
- ( '-mcpu=(.*)', "env.set('LLC_MCPU', $0)"), |
+ ( '(-mcpu=.*)', "env.set('LLC_MCPU', '')\n" |
+ "env.append('LLC_FLAGS_EXTRA', $0)"), |
# Allow overriding the -O level. |
( '-O([0-3])', "env.set('OPT_LEVEL', $0)"), |
@@ -465,9 +453,6 @@ def ToggleDefaultCommandlineLD(inputs, infile): |
def RequiresNonStandardLLCCommandline(): |
- if env.getbool('FAST_TRANSLATION'): |
- return ('FAST_TRANSLATION', True) |
- |
extra_flags = env.get('LLC_FLAGS_EXTRA') |
if extra_flags != []: |
reason = 'Has additional llc flags: %s' % extra_flags |
@@ -523,10 +508,9 @@ def RunLLCSandboxed(): |
driver_tools.CheckTranslatorPrerequisites() |
infile = env.getone('input') |
outfile = env.getone('output') |
- flags = env.get('LLC_FLAGS') |
if not driver_tools.IsBitcode(infile): |
Log.Fatal('Input to sandboxed translator must be bitcode') |
- script = MakeSelUniversalScriptForLLC(infile, outfile, flags) |
+ script = MakeSelUniversalScriptForLLC(infile, outfile) |
command = ('${SEL_UNIVERSAL_PREFIX} ${SEL_UNIVERSAL} ${SEL_UNIVERSAL_FLAGS} ' |
'-- ${LLC_SB}') |
_, stdout, _ = driver_tools.Run(command, |
@@ -544,14 +528,19 @@ def RunLLCSandboxed(): |
needed_libs = [ lib for lib in needed_str.split(r'\n') if lib] |
return is_shared, soname, needed_libs |
-def BuildLLCCommandLine(flags): |
+def BuildOverrideLLCCommandLine(): |
+ extra_flags = env.get('LLC_FLAGS_EXTRA') |
+ # The mcpu is not part of the default flags, so append that too. |
+ mcpu = env.getone('LLC_MCPU') |
+ if mcpu: |
+ extra_flags.append(mcpu) |
# command_line is a NUL (\x00) terminated sequence. |
kTerminator = '\0' |
- command_line = kTerminator.join(['llc'] + flags) + kTerminator |
+ command_line = kTerminator.join(extra_flags) + kTerminator |
command_line_escaped = command_line.replace(kTerminator, '\\x00') |
return len(command_line), command_line_escaped |
-def MakeSelUniversalScriptForLLC(infile, outfile, flags): |
+def MakeSelUniversalScriptForLLC(infile, outfile): |
script = [] |
script.append('readwrite_file objfile %s' % outfile) |
stream_rate = int(env.getraw('BITCODE_STREAM_RATE')) |
@@ -559,8 +548,8 @@ def MakeSelUniversalScriptForLLC(infile, outfile, flags): |
if UseDefaultCommandlineLLC(): |
script.append('rpc StreamInit h(objfile) * s()') |
else: |
- cmdline_len, cmdline_escaped = BuildLLCCommandLine(flags) |
- script.append('rpc StreamInitWithCommandLine h(objfile) C(%d,%s) * s()' % |
+ cmdline_len, cmdline_escaped = BuildOverrideLLCCommandLine() |
+ script.append('rpc StreamInitWithOverrides h(objfile) C(%d,%s) * s()' % |
(cmdline_len, cmdline_escaped)) |
# specify filename, chunk size and rate in bits/s |
script.append('stream_file %s %s %s' % (infile, 64 * 1024, stream_rate)) |