http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55286



--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-11-16 
18:28:30 UTC ---

Created attachment 28712

  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=28712

assign.c



Assignment extracted into a self-contained testcase, does this also make a

similar difference for you?  On which CPU?  Yes, there is a code generation

difference with that commit, in *.optimized the difference seems to be

(-vanilla, + with Kai's patch reverted):

@@ -192,13 +192,12 @@ Assignment (long int[101] * arraybase)

   sizetype _302;

   unsigned long _303;

   sizetype _306;

   long unsigned int pretmp_307;

   long unsigned int pretmp_308;

   long int[101] * pretmp_318;

-  unsigned long _322;

   short unsigned int ivtmp_334;

   unsigned long _350;

   unsigned int _351;

   long unsigned int patt_353;

   short unsigned int _354;

   unsigned long _355;

@@ -286,27 +285,26 @@ Assignment (long int[101] * arraybase)

   <bb 5>:

   # currentmin_72 = PHI <currentmin_402(4)>

   _356 = ivtmp.312_453 & 15;

   _350 = _356 >> 3;

   _355 = -_350;

   _354 = (short unsigned int) _355;

-  _322 = _355 & 1;

-  prolog_loop_niters.10_359 = (short unsigned int) _322;

+  prolog_loop_niters.10_359 = _354 & 1;

   if (prolog_loop_niters.10_359 == 0)

     goto <bb 7>;

   else

     goto <bb 6>;



   <bb 6>:

   _272 = MEM[base: pretmp_395, offset: 0B];

   _256 = _272 - currentmin_72;

   MEM[base: pretmp_395, offset: 0B] = _256;



   <bb 7>:

   # j_269 = PHI <1(6), 0(5)>

-  prolog_loop_adjusted_niters.11_124 = _355 & 1;

+  prolog_loop_adjusted_niters.11_124 = (sizetype) prolog_loop_niters.10_359;

   niters.12_129 = 101 - prolog_loop_niters.10_359;

   base_off.19_523 = prolog_loop_adjusted_niters.11_124 * 8;

   vect_p.20_524 = pretmp_395 + base_off.19_523;

   vect_cst_.23_528 = {currentmin_72, currentmin_72};



   <bb 8>:



This change happens very late (forwprop4) and nothing afterwards cleans it up

(there is no DCE etc. that would DCE the dead assignment to _354 and there is

no PRE/FRE to replace _355 & 1 in the second case with _322.  Still just

zero-extending _359 is perhaps cheaper register pressure-wise.



That said, I can't find any measurable differences between the two.

Reply via email to