Perl / perl5

🐪 The Perl programming language
https://dev.perl.org/perl5/
Other
1.88k stars 531 forks source link

[PATCH] remove redundant calls in S_minus_v in perl.c #12471

Closed p5pRT closed 11 years ago

p5pRT commented 11 years ago

Migrated from rt.perl.org#115182 (status was 'resolved')

Searchable as RT115182$

p5pRT commented 11 years ago

From @bulk88

Created by @bulk88

On VC 2003\, -01\, no DEBUGGING\, -GL/-LTCG\, 32 bits\, I saw a drop the .text section of perl517.dll from 0xBEACF to 0xBEABF after applying this. See attached patch for the rest of the description.

Perl Info ``` Flags: category=core severity=low Site configuration information for perl 5.17.5: Configured by Owner at Mon Oct 8 03:07:26 2012. Summary of my perl5 (revision 5 version 17 subversion 5) configuration: Platform: osname=MSWin32, osvers=5.1, archname=MSWin32-x86-multi-thread uname='' config_args='undef' hint=recommended, useposix=true, d_sigaction=undef useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=undef, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cl', ccflags ='-nologo -GF -W3 -MD -Zi -DNDEBUG -O1 -G7 -GL -DWIN32 -D_CONSOLE -DNO_STRICT -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -D_USE_32BIT_TIME_T', optimize='-MD -Zi -DNDEBUG -O1 -G7 -GL', cppflags='-DWIN32' ccversion='13.10.6030', gccversion='', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234 d_longlong=undef, longlongsize=8, d_longdbl=define, longdblsize=8 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='__int64', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='link', ldflags ='-nologo -nodefaultlib -debug -opt:ref,icf -ltcg -libpath:"c:\perl517\lib\CORE" -machine:x86' libpth="C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\lib" libs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib perllibs=oldnames.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib netapi32.lib uuid.lib ws2_32.lib mpr.lib winmm.lib version.lib odbc32.lib odbccp32.lib comctl32.lib msvcrt.lib libc=msvcrt.lib, so=dll, useshrplib=true, libperl=perl517.lib gnulibc_version='' Dynamic Linking: dlsrc=dl_win32.xs, dlext=dll, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags='-dll -nologo -nodefaultlib -debug -opt:ref,icf -ltcg -libpath:"c:\perl517\lib\CORE" -machine:x86' Locally applied patches: @INC for perl 5.17.5: C:/perl517/site/lib C:/perl517/lib . Environment for perl 5.17.5: HOME (unset) LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=C:\perl517\bin;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE;C:\Program Files\Microsoft Visual Studio .NET 2003\VC7\BIN;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\bin\prerelease;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32\wbem; PERL_BADLANG (unset) PERL_TEST_JOBS=2 SHELL (unset) ```
p5pRT commented 11 years ago

From @bulk88

0001-remove-redundant-calls-in-S_minus_v-in-perl.c.patch ```diff From f5d6eeb45ec48792d872cb095b5909bf9c42be85 Mon Sep 17 00:00:00 2001 From: Daniel Dragan Date: Mon, 8 Oct 2012 16:21:03 -0400 Subject: [PATCH] remove redundant calls in S_minus_v in perl.c Commit b0e47665895 added a large amount of redundant calls to PerlIO_stdout(). Fix, cache stdout. Also commit 46807d8e809 added multiple calls to SvPVs and sv_len on the same 2 scalars that do not change between the calls to SvPV and sv_len. Since sv_len is a wrapper around SvPV*, just use SvPV once on each scalar and cache everything. --- perl.c | 59 ++++++++++++++++++++++++++++++++++------------------------- 1 files changed, 34 insertions(+), 25 deletions(-) diff --git a/perl.c b/perl.c index f9283db..a65dcb6 100644 --- a/perl.c +++ b/perl.c @@ -3370,6 +3370,7 @@ Perl_moreswitches(pTHX_ const char *s) STATIC void S_minus_v(pTHX) { + PerlIO * PIO_stdout; if (!sv_derived_from(PL_patchlevel, "version")) upg_version(PL_patchlevel, TRUE); #if !defined(DGUX) @@ -3381,16 +3382,22 @@ S_minus_v(pTHX) # else SV *num = newSVpvs(PERL_PATCHNUM); # endif - - if (sv_len(num)>=sv_len(level) && strnEQ(SvPV_nolen(num),SvPV_nolen(level),sv_len(level))) { - SvREFCNT_dec(level); - level= num; - } else { - Perl_sv_catpvf(aTHX_ level, " (%"SVf")", num); - SvREFCNT_dec(num); + { + STRLEN level_len, num_len; + char * level_str, * num_str; + num_str = SvPV(num, num_len); + level_str = SvPV(level, level_len); + if (num_len>=level_len && strnEQ(num_str,level_str,level_len)) { + SvREFCNT_dec(level); + level= num; + } else { + Perl_sv_catpvf(aTHX_ level, " (%"SVf")", num); + SvREFCNT_dec(num); + } } #endif - PerlIO_printf(PerlIO_stdout(), + PIO_stdout = PerlIO_stdout(); + PerlIO_printf(PIO_stdout, "\nThis is perl " STRINGIFY(PERL_REVISION) ", version " STRINGIFY(PERL_VERSION) ", subversion " STRINGIFY(PERL_SUBVERSION) @@ -3399,75 +3406,77 @@ S_minus_v(pTHX) SvREFCNT_dec(level); } #else /* DGUX */ + PIO_stdout = PerlIO_stdout(); /* Adjust verbose output as in the perl that ships with the DG/UX OS from EMC */ - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, Perl_form(aTHX_ "\nThis is perl, %"SVf"\n", SVfARG(vstringify(PL_patchlevel)))); - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, Perl_form(aTHX_ " built under %s at %s %s\n", OSNAME, __DATE__, __TIME__)); - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, Perl_form(aTHX_ " OS Specific Release: %s\n", OSVERS)); #endif /* !DGUX */ #if defined(LOCAL_PATCH_COUNT) if (LOCAL_PATCH_COUNT > 0) - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "\n(with %d registered patch%s, " "see perl -V for more detail)", LOCAL_PATCH_COUNT, (LOCAL_PATCH_COUNT!=1) ? "es" : ""); #endif - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "\n\nCopyright 1987-2012, Larry Wall\n"); #ifdef MSDOS - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n"); #endif #ifdef DJGPP - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n" "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n"); #endif #ifdef OS2 - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n" "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n"); #endif #ifdef __BEOS__ - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "BeOS port Copyright Tom Spindler, 1997-1999\n"); #endif #ifdef OEMVS - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n"); #endif #ifdef __VOS__ - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "Stratus VOS port by Paul.Green@stratus.com, 1997-2002\n"); #endif #ifdef POSIX_BC - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n"); #endif #ifdef EPOC - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "EPOC port by Olaf Flebbe, 1999-2002\n"); #endif #ifdef UNDER_CE - PerlIO_printf(PerlIO_stdout(),"WINCE port by Rainer Keuchel, 2001-2002\n"); - PerlIO_printf(PerlIO_stdout(),"Built on " __DATE__ " " __TIME__ "\n\n"); + PerlIO_printf(PIO_stdout, + "WINCE port by Rainer Keuchel, 2001-2002\n" + "Built on " __DATE__ " " __TIME__ "\n\n"); wce_hitreturn(); #endif #ifdef __SYMBIAN32__ - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "Symbian port by Nokia, 2004-2005\n"); #endif #ifdef BINARY_BUILD_NOTICE BINARY_BUILD_NOTICE; #endif - PerlIO_printf(PerlIO_stdout(), + PerlIO_printf(PIO_stdout, "\n\ Perl may be copied only under the terms of either the Artistic License or the\n\ GNU General Public License, which may be found in the Perl 5 source kit.\n\n\ -- 1.7.9.msysgit.0 ```
p5pRT commented 11 years ago

From @cpansprout

On Mon Oct 08 13​:35​:47 2012\, bulk88 wrote​:

This is a bug report for perl from bulk88@​hotmail.com\, generated with the help of perlbug 1.39 running under perl 5.17.5.

----------------------------------------------------------------- [Please describe your issue here]

On VC 2003\, -01\, no DEBUGGING\, -GL/-LTCG\, 32 bits\, I saw a drop the .text section of perl517.dll from 0xBEACF to 0xBEABF after applying this. See attached patch for the rest of the description.

[Please do not change anything below this line] -----------------------------------------------------------------

Thank you. Applied as fc3381a.

--

Father Chrysostomos

p5pRT commented 11 years ago

The RT System itself - Status changed from 'new' to 'open'

p5pRT commented 11 years ago

@cpansprout - Status changed from 'open' to 'resolved'