From: Ben S. <pow...@16...> - 2014-01-17 10:53:12
|
Hello, With the following c code > extern int c; > void ss(void) > { > c++; > } the gererated iCode is (simplified by me) > iTemp0 := _c > iTemp1 = _c + 0x1 > iTemp2 := iTemp1 > _c := iTemp2 I wonder what is the usage of iTemp0 here? Is it redundant since iTemp1 = _c + 0x1 rather than iTemp1 = iTemp0 + 0x1 ? Ben |
From: Philipp K. K. <pk...@sp...> - 2014-01-17 16:35:57
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 17.01.2014 11:53, schrieb Ben Shi: > Hello, > > With the following c code > >> extern int c; void ss(void) { c++; } > > the gererated iCode is (simplified by me) > >> iTemp0 := _c iTemp1 = _c + 0x1 iTemp2 := iTemp1 _c := iTemp2 > > I wonder what is the usage of iTemp0 here? Is it redundant since > iTemp1 = _c + 0x1 rather than iTemp1 = iTemp0 + 0x1 ? > > Ben At what stage does the iCode look like that. Also note that the iTemp0 is not a code quality problem: Dead code elimination will remove the assignment it unless iTemp0 or _c are volatile. Philipp -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.15 (GNU/Linux) Comment: Using GnuPG with Icedove - http://www.enigmail.net/ iEYEARECAAYFAlLZW9gACgkQbtUV+xsoLpoOtACg6mm8xKFZgBlIO80OBT5wVJHa 7wAAoJ+/hJsT+5I4+0kr6PKmE4UNo2KJ =RgeY -----END PGP SIGNATURE----- |
From: Erik P. <epe...@iv...> - 2014-01-17 18:00:32
|
On Fri, 17 Jan 2014, Philipp Klaus Krause wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Am 17.01.2014 11:53, schrieb Ben Shi: >> Hello, >> >> With the following c code >> >>> extern int c; void ss(void) { c++; } >> >> the gererated iCode is (simplified by me) >> >>> iTemp0 := _c iTemp1 = _c + 0x1 iTemp2 := iTemp1 _c := iTemp2 >> >> I wonder what is the usage of iTemp0 here? Is it redundant since >> iTemp1 = _c + 0x1 rather than iTemp1 = iTemp0 + 0x1 ? >> >> Ben > > At what stage does the iCode look like that. Also note that the iTemp0 > is not a code quality problem: Dead code elimination will remove the > assignment it unless iTemp0 or _c are volatile. > > Philipp Philipp, this is the initial iCode is generated in getiCodePostInc(). Ben, iTemp0 is the result of the expression c++ (the value of c before the increment). The iCode generator does not care if the result is actually used or not, and as Philipp points out, dead code eliminiation will take care of it in the case that the result is unused. Erik |