Revision: 3934
Author: [email protected]
Date: Tue Feb 23 07:22:48 2010
Log: Add the ability to compile with profiler guided optimizations on
Windows
It is now possible to experiment with profiler guided optimizations when
building V8. First build an instrumented sample shell:
> scons pgo=instrument sample=shell
Then run the JavaScript code to optimize for using that sample shell.
Finally build an optimized sample shell.
> scons pgo=optimize sample=shell
Currently this does not work when building V8 as a DLL due to scons
deleting v8.exp prior to the pgo=optimize step.
Due to a bug in Visual Studio (seen in version 2008) the function
MessageDispatchHelperThread::Run() in debug.cc needs to be empty for this
to work.
Review URL: http://codereview.chromium.org/652114
http://code.google.com/p/v8/source/detail?r=3934
Modified:
/branches/bleeding_edge/SConstruct
=======================================
--- /branches/bleeding_edge/SConstruct Thu Feb 4 12:36:58 2010
+++ /branches/bleeding_edge/SConstruct Tue Feb 23 07:22:48 2010
@@ -255,8 +255,16 @@
},
'msvcltcg:on': {
'CCFLAGS': ['/GL'],
- 'LINKFLAGS': ['/LTCG'],
'ARFLAGS': ['/LTCG'],
+ 'pgo:off': {
+ 'LINKFLAGS': ['/LTCG'],
+ },
+ 'pgo:instrument': {
+ 'LINKFLAGS': ['/LTCG:PGI']
+ },
+ 'pgo:optimize': {
+ 'LINKFLAGS': ['/LTCG:PGO']
+ }
}
}
}
@@ -527,7 +535,15 @@
},
'msvcltcg:on': {
'CCFLAGS': ['/GL'],
- 'LINKFLAGS': ['/LTCG'],
+ 'pgo:off': {
+ 'LINKFLAGS': ['/LTCG'],
+ },
+ },
+ 'pgo:instrument': {
+ 'LINKFLAGS': ['/LTCG:PGI']
+ },
+ 'pgo:optimize': {
+ 'LINKFLAGS': ['/LTCG:PGO']
}
},
'arch:ia32': {
@@ -711,6 +727,11 @@
'values': ['arm', 'thumb2', 'none'],
'default': 'none',
'help': 'generate thumb2 instructions instead of arm instructions
(default)'
+ },
+ 'pgo': {
+ 'values': ['off', 'instrument', 'optimize'],
+ 'default': 'off',
+ 'help': 'select profile guided optimization variant',
}
}
@@ -798,6 +819,8 @@
Abort("Shared Object soname not applicable for Windows.")
if env['soname'] == 'on' and env['library'] == 'static':
Abort("Shared Object soname not applicable for static library.")
+ if env['os'] != 'win32' and env['pgo'] != 'off':
+ Abort("Profile guided optimization only supported on Windows.")
for (name, option) in SIMPLE_OPTIONS.iteritems():
if (not option.get('default')) and (name not in ARGUMENTS):
message = ("A value for option %s must be specified (%s)." %
@@ -883,7 +906,7 @@
env['ENV'] = self.env_overrides
-def PostprocessOptions(options):
+def PostprocessOptions(options, os):
# Adjust architecture if the simulator option has been set
if (options['simulator'] != 'none') and (options['arch'] !=
options['simulator']):
if 'arch' in ARGUMENTS:
@@ -894,6 +917,10 @@
# Print a warning if profiling is enabled without profiling support
print "Warning: forcing profilingsupport on when prof is on"
options['profilingsupport'] = 'on'
+ if os == 'win32' and options['pgo'] != 'off' and options['msvcltcg']
== 'off':
+ if 'msvcltcg' in ARGUMENTS:
+ print "Warning: forcing msvcltcg on as it is required for pgo
(%s)" % options['pgo']
+ options['msvcltcg'] = 'on'
if (options['armvariant'] == 'none' and options['arch'] == 'arm'):
options['armvariant'] = 'arm'
if (options['armvariant'] != 'none' and options['arch'] != 'arm'):
@@ -924,7 +951,7 @@
options = {'mode': mode}
for option in SIMPLE_OPTIONS:
options[option] = env[option]
- PostprocessOptions(options)
+ PostprocessOptions(options, env['os'])
context = BuildContext(options, env_overrides,
samples=SplitList(env['sample']))
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev