Forráskód Böngészése

+ make empty proc. removal switchable by removeemptyprocs

git-svn-id: trunk@23621 -
florian 12 éve
szülő
commit
63f6afffd5
4 módosított fájl, 10 hozzáadás és 7 törlés
  1. 6 4
      compiler/globtype.pas
  2. 1 1
      compiler/ncal.pas
  3. 1 1
      compiler/nobj.pas
  4. 2 1
      compiler/psub.pas

+ 6 - 4
compiler/globtype.pas

@@ -257,7 +257,9 @@ interface
              explicit side-effects, only implicit side-effects (like the ones
              explicit side-effects, only implicit side-effects (like the ones
              mentioned before) can disappear.
              mentioned before) can disappear.
          }
          }
-         cs_opt_dead_values
+         cs_opt_dead_values,
+         { compiler checks for empty procedures/methods and removes calls to them if possible }
+         cs_opt_remove_emtpy_proc
        );
        );
        toptimizerswitches = set of toptimizerswitch;
        toptimizerswitches = set of toptimizerswitch;
 
 
@@ -284,12 +286,12 @@ interface
        end;
        end;
 
 
     const
     const
-       OptimizerSwitchStr : array[toptimizerswitch] of string[11] = ('',
+       OptimizerSwitchStr : array[toptimizerswitch] of string[16] = ('',
          'LEVEL1','LEVEL2','LEVEL3',
          'LEVEL1','LEVEL2','LEVEL3',
          'REGVAR','UNCERTAIN','SIZE','STACKFRAME',
          'REGVAR','UNCERTAIN','SIZE','STACKFRAME',
          'PEEPHOLE','ASMCSE','LOOPUNROLL','TAILREC','CSE',
          'PEEPHOLE','ASMCSE','LOOPUNROLL','TAILREC','CSE',
          'DFA','STRENGTH','SCHEDULE','AUTOINLINE','USEEBP',
          'DFA','STRENGTH','SCHEDULE','AUTOINLINE','USEEBP',
-         'ORDERFIELDS','FASTMATH','DEADVALUES'
+         'ORDERFIELDS','FASTMATH','DEADVALUES','REMOVEEMPTYPROCS'
        );
        );
        WPOptimizerSwitchStr : array [twpoptimizerswitch] of string[14] = (
        WPOptimizerSwitchStr : array [twpoptimizerswitch] of string[14] = (
          'DEVIRTCALLS','OPTVMTS','SYMBOLLIVENESS'
          'DEVIRTCALLS','OPTVMTS','SYMBOLLIVENESS'
@@ -310,7 +312,7 @@ interface
 
 
        { switches being applied to all CPUs at the given level }
        { switches being applied to all CPUs at the given level }
        genericlevel1optimizerswitches = [cs_opt_level1];
        genericlevel1optimizerswitches = [cs_opt_level1];
-       genericlevel2optimizerswitches = [cs_opt_level2];
+       genericlevel2optimizerswitches = [cs_opt_level2,cs_opt_remove_emtpy_proc];
        genericlevel3optimizerswitches = [cs_opt_level3];
        genericlevel3optimizerswitches = [cs_opt_level3];
        genericlevel4optimizerswitches = [cs_opt_reorder_fields,cs_opt_dead_values,cs_opt_fastmath];
        genericlevel4optimizerswitches = [cs_opt_reorder_fields,cs_opt_dead_values,cs_opt_fastmath];
 
 

+ 1 - 1
compiler/ncal.pas

@@ -3461,7 +3461,7 @@ implementation
            Message(parser_e_no_category_as_types);
            Message(parser_e_no_category_as_types);
 
 
          { can we get rid of the call? }
          { can we get rid of the call? }
-         if (cs_opt_level2 in current_settings.optimizerswitches) and
+         if (cs_opt_remove_emtpy_proc in current_settings.optimizerswitches) and
             not(cnf_return_value_used in callnodeflags) and
             not(cnf_return_value_used in callnodeflags) and
            (procdefinition.typ=procdef) and
            (procdefinition.typ=procdef) and
            tprocdef(procdefinition).isempty and
            tprocdef(procdefinition).isempty and

+ 1 - 1
compiler/nobj.pas

@@ -1573,7 +1573,7 @@ implementation
              internalerror(200611083);
              internalerror(200611083);
            if (po_abstractmethod in vmtpd.procoptions) then
            if (po_abstractmethod in vmtpd.procoptions) then
              procname:='FPC_ABSTRACTERROR'
              procname:='FPC_ABSTRACTERROR'
-           else if (cs_opt_level2 in current_settings.optimizerswitches) and RedirectToEmpty(vmtpd) then
+           else if (cs_opt_remove_emtpy_proc in current_settings.optimizerswitches) and RedirectToEmpty(vmtpd) then
              procname:='FPC_EMPTYMETHOD'
              procname:='FPC_EMPTYMETHOD'
            else if not wpoinfomanager.optimized_name_for_vmt(_class,vmtpd,procname) then
            else if not wpoinfomanager.optimized_name_for_vmt(_class,vmtpd,procname) then
              procname:=vmtpd.mangledname;
              procname:=vmtpd.mangledname;

+ 2 - 1
compiler/psub.pas

@@ -1268,7 +1268,8 @@ implementation
         if cs_opt_nodecse in current_settings.optimizerswitches then
         if cs_opt_nodecse in current_settings.optimizerswitches then
           do_optcse(code);
           do_optcse(code);
 
 
-        if (procdef.proctypeoption in [potype_operator,potype_procedure,potype_function]) and
+        if (cs_opt_remove_emtpy_proc in current_settings.optimizerswitches) and
+          (procdef.proctypeoption in [potype_operator,potype_procedure,potype_function]) and
           (code.nodetype=blockn) and (tblocknode(code).statements=nil) then
           (code.nodetype=blockn) and (tblocknode(code).statements=nil) then
           procdef.isempty:=true;
           procdef.isempty:=true;