Author: Dodan Mihai <[email protected]>
Branch: PyPy_profopt_enabled
Changeset: r91399:f1aa2fc615ef
Date: 2017-05-04 09:38 +0300
http://bitbucket.org/pypy/pypy/changeset/f1aa2fc615ef/

Log:    PyPy-5.8.0-Profopt-enabled-postclean

diff --git a/pypy/goal/targetpypystandalone.py 
b/pypy/goal/targetpypystandalone.py
--- a/pypy/goal/targetpypystandalone.py
+++ b/pypy/goal/targetpypystandalone.py
@@ -264,11 +264,6 @@
                 raise Exception("Cannot use the --output option with PyPy "
                                 "when --shared is on (it is by default). "
                                 "See issue #1971.")
-            # if (config.translation.profopt is not None
-            #         and not config.translation.noprofopt):
-            #     raise Exception("Cannot use the --profopt option "
-            #                     "when --shared is on (it is by default). "
-            #                     "See issue #2398.")
         if sys.platform == 'win32':
             libdir = thisdir.join('..', '..', 'libs')
             libdir.ensure(dir=1)
diff --git a/rpython/config/translationoption.py 
b/rpython/config/translationoption.py
--- a/rpython/config/translationoption.py
+++ b/rpython/config/translationoption.py
@@ -144,8 +144,6 @@
     StrOption("cc", "Specify compiler to use for compiling generated C", 
cmdline="--cc"),
     BoolOption("profopt", "Specify profile based optimization script",
               cmdline="--profopt"),
-    BoolOption("noprofopt", "Don't use profile based optimization",
-               default=False, cmdline="--no-profopt", negation=False),
     BoolOption("instrument", "internal: turn instrumentation on",
                default=False, cmdline=None),
     BoolOption("countmallocs", "Count mallocs and frees", default=False,
diff --git a/rpython/translator/c/genc.py b/rpython/translator/c/genc.py
--- a/rpython/translator/c/genc.py
+++ b/rpython/translator/c/genc.py
@@ -33,29 +33,6 @@
     return python
 
 
-class ProfOpt(object):
-    #XXX assuming gcc style flags for now
-    name = "profopt"
-
-    def __init__(self, compiler):
-        self.compiler = compiler
-
-    def first(self):
-        return self.build('-fprofile-generate')
-
-    def probe(self, exe, args):
-        # 'args' is a single string typically containing spaces
-        # and quotes, which represents several arguments.
-        self.compiler.platform.execute(exe, args)
-
-    def after(self):
-        return self.build('-fprofile-use')
-
-    def build(self, option):
-        eci = ExternalCompilationInfo(compile_extra=[option],
-                                      link_extra=[option])
-        return self.compiler._build(eci)
-
 class CCompilerDriver(object):
     def __init__(self, platform, cfiles, eci, outputfilename=None,
                  profbased=False):
@@ -65,7 +42,7 @@
         self.cfiles = cfiles
         self.eci = eci
         self.outputfilename = outputfilename
-        self.profbased = profbased
+        # self.profbased = profbased
 
     def _build(self, eci=ExternalCompilationInfo(), shared=False):
         outputfilename = self.outputfilename
@@ -79,22 +56,6 @@
                                      outputfilename=outputfilename,
                                      standalone=not shared)
 
-    def build(self, shared=False):
-        if self.profbased:
-            return self._do_profbased()
-        return self._build(shared=shared)
-
-    def _do_profbased(self):
-        ProfDriver, args = self.profbased
-        profdrv = ProfDriver(self)
-        # dolog = getattr(log, profdrv.name)
-        dolog(args)
-        exename = profdrv.first()
-        # dolog('Gathering profile data from: %s %s' % (
-        #     str(exename), args))
-        profdrv.probe(exename, args)
-        return profdrv.after()
-
 class CBuilder(object):
     c_source_filename = None
     _compiled = False
@@ -259,27 +220,6 @@
     _entrypoint_wrapper = None
     make_entrypoint_wrapper = True    # for tests
 
-    def getprofbased(self):
-        profbased = None
-        if self.config.translation.instrumentctl is not None:
-            profbased = self.config.translation.instrumentctl
-        else:
-            # xxx handling config.translation.profopt is a bit messy, because
-            # it could be an empty string (not to be confused with None) and
-            # because noprofopt can be used as an override.
-            profopt = self.config.translation.profopt
-            if profopt is not None and not self.config.translation.noprofopt:
-                profbased = (ProfOpt, profopt)
-        return profbased
-
-    def has_profopt(self):
-        profbased = self.getprofbased()
-        retval = (profbased and isinstance(profbased, tuple)
-                and profbased[0] is ProfOpt)
-        if retval and self.translator.platform.name == 'msvc':
-            raise ValueError('Cannot do profile based optimization on MSVC,'
-                    'it is not supported in free compiler version')
-        return retval
 
     def getentrypointptr(self):
         # XXX check that the entrypoint has the correct
@@ -391,7 +331,7 @@
         shared = self.config.translation.shared
 
         extra_opts = []
-        if self.config.translation.profopt and not 
self.config.translation.noprofopt:
+        if self.config.translation.profopt:
             extra_opts += ["profopt"]
         if self.config.translation.make_jobs != 1:
             extra_opts += ['-j', str(self.config.translation.make_jobs)]
@@ -423,14 +363,6 @@
             config=self.config)
 
 
-        #if self.has_profopt():
-        #     profopt = self.config.translation.profopt
-        #     mk.definition('ABS_TARGET', str(targetdir.join('$(TARGET)')))
-        #     mk.definition('DEFAULT_TARGET', 'profopt')
-        #     mk.definition('PROFOPT', profopt)
-        # I have commented this out because I have made another rule with 
other definitions explained below
-
-
         rules = [
             ('debug', '', '$(MAKE) CFLAGS="$(DEBUGFLAGS) -DRPY_ASSERT" 
debug_target'),
             ('debug_exc', '', '$(MAKE) CFLAGS="$(DEBUGFLAGS) -DRPY_ASSERT 
-DDO_LOG_EXC" debug_target'),
@@ -439,28 +371,32 @@
             ('lldebug', '', '$(MAKE) CFLAGS="$(DEBUGFLAGS) -DRPY_ASSERT 
-DRPY_LL_ASSERT" debug_target'),
             ('profile', '', '$(MAKE) CFLAGS="-g -O1 -pg $(CFLAGS) 
-fno-omit-frame-pointer" LDFLAGS="-pg $(LDFLAGS)" $(DEFAULT_TARGET)'),
         ]
-        # if self.has_profopt():
 
-        #added a new target for profopt, because it requires -lgcov to compile 
successfully when -shared is used as an argument
-        # PROFOPT_Tar
+        # added a new target for profopt, because it requires -lgcov to 
compile successfully when -shared is used as an argument
+        # Also made a difference between translating with shared or not, 
because this affects profopt's target
 
-        mk.definition('PROFOPT_TARGET','pypy-c')
-        mk.rule('$(PROFOPT_TARGET)', '$(TARGET) main.o',
+
+        if self.config.translation.shared:
+            mk.definition('PROFOPT_TARGET', 'pypy-c')
+            mk.rule('$(PROFOPT_TARGET)', '$(TARGET) main.o',
                      '$(CC_LINK) $(LDFLAGS_LINK) main.o -L. 
-l$(SHARED_IMPORT_LIB) -o $@ $(RPATH_FLAGS) -lgcov')
+        else:
+            mk.definition('PROFOPT_TARGET', '$(TARGET)')
+
         rules.append(
             ('profopt', '', [
                 '$(MAKE) CFLAGS="-fprofile-generate -fPIC $(CFLAGS) -fno-lto"  
LDFLAGS="-fprofile-generate $(LDFLAGS) -fno-lto" $(PROFOPT_TARGET)',
-                'rm -f $(RPYDIR)/../pypy/goal/libpypy-c.so || true',
+                'rm -f $(RPYDIR)/../pypy/goal/libpypy-c.so',
                 'cp -f libpypy-c.so $(RPYDIR)/../pypy/goal/ || true',
                 'rm -f $(RPYDIR)/../pypy/goal/pypy-c',
-                'cp -f pypy-c $(RPYDIR)/../pypy/goal/',
+                'cp -f pypy-c $(RPYDIR)/../pypy/goal/ || true',
                 '$(RPYDIR)/../pypy/goal/pypy-c 
$(RPYDIR)/../pypy/goal/regrtest/regrtest.py --pgo -x test_asyncore test_gdb 
test_multiprocessing test_subprocess || true',
                 '$(MAKE) clean_noprof',
                 '$(MAKE) CFLAGS="-fprofile-use -fprofile-correction -fPIC 
$(CFLAGS) -fno-lto"  LDFLAGS="-fprofile-use $(LDFLAGS) -fno-lto" 
$(PROFOPT_TARGET)',
                 'rm -f $(RPYDIR)/../pypy/goal/libpypy-c.so || true',
                 'cp -f libpypy-c.so $(RPYDIR)/../pypy/goal/ || true',
                 'rm -f $(RPYDIR)/../pypy/goal/pypy-c',
-                'cp -f pypy-c $(RPYDIR)/../pypy/goal/']))
+                'cp -f pypy-c $(RPYDIR)/../pypy/goal/ || true']))
 
         for rule in rules:
             mk.rule(*rule)
diff --git a/rpython/translator/c/test/test_standalone.py 
b/rpython/translator/c/test/test_standalone.py
--- a/rpython/translator/c/test/test_standalone.py
+++ b/rpython/translator/c/test/test_standalone.py
@@ -227,7 +227,7 @@
         data = cbuilder.cmdexec('hi there')
         assert map(float, data.split()) == [0.0, 0.0]
 
-    def test_profopt(self):
+    def test_profopt1(self):
         if sys.platform == 'win32':
             py.test.skip("no profopt on win32")
         def add(a,b):
@@ -242,19 +242,22 @@
             return 0
         from rpython.translator.interactive import Translation
         # XXX this is mostly a "does not crash option"
-        t = Translation(entry_point, backend='c', profopt="100")
+        t = Translation(entry_point, backend='c', profopt=True, shared=True)
         # no counters
         t.backendopt()
         exe = t.compile()
-        out = py.process.cmdexec("%s 500" % exe)
-        assert int(out) == 500*501/2
-        t = Translation(entry_point, backend='c', profopt="100",
-                        noprofopt=True)
+        assert (os.path.isfile("%s/pypy-c" % os.path.dirname(str(exe))))
+        # out = py.process.cmdexec("%s 500" % exe)
+        # assert int(out) == 500*501/2
+        t = Translation(entry_point, backend='c', profopt=True, shared=False)
         # no counters
         t.backendopt()
         exe = t.compile()
-        out = py.process.cmdexec("%s 500" % exe)
-        assert int(out) == 500*501/2
+        assert (os.path.isfile("%s" % exe))
+        # assert( ("%s/../pypy-c" % exe.purebasename) == "aa")
+
+        # out = py.process.cmdexec("%s 500" % exe)
+        # assert int(out) == 500*501/2
 
     if hasattr(os, 'setpgrp'):
         def test_os_setpgrp(self):
@@ -279,13 +282,12 @@
             return 0
         from rpython.translator.interactive import Translation
         # XXX this is mostly a "does not crash option"
-        t = Translation(entry_point, backend='c', profopt="")
+        t = Translation(entry_point, backend='c', profopt=True, shared=True)
         # no counters
         t.backendopt()
         exe = t.compile()
         #py.process.cmdexec(exe)
-        t = Translation(entry_point, backend='c', profopt="",
-                        noprofopt=True)
+        t = Translation(entry_point, backend='c', profopt=True, shared=True)
         # no counters
         t.backendopt()
         exe = t.compile()
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to