Related articles |
---|
Optimizing nested if statements? sperugin@csgrad.cs.vt.edu (Saverio Perugini) (2003-01-17) |
Re: Optimizing nested if statements? christian.bau@cbau.freeserve.co.uk (Christian Bau) (2003-01-21) |
Re: Optimizing nested if statements? terryg@qwest.net (Terry Greyzck) (2003-01-21) |
Re: Optimizing nested if statements? vbdis@aol.com (2003-01-21) |
Re: Optimizing nested if statements? sperugin@csgrad.cs.vt.edu (Saverio Perugini) (2003-01-25) |
Re: Optimizing nested if statements? Martin.Ward@durham.ac.uk (2003-01-26) |
Re: Optimizing nested if statements? sperugin@csgrad.cs.vt.edu (Saverio Perugini) (2003-02-06) |
From: | Terry Greyzck <terryg@qwest.net> |
Newsgroups: | comp.compilers |
Date: | 21 Jan 2003 00:13:09 -0500 |
Organization: | Compilers Central |
References: | 03-01-092 |
Keywords: | optimize |
Posted-Date: | 21 Jan 2003 00:13:09 EST |
Saverio Perugini <sperugin@csgrad.cs.vt.edu> wrote:
>Hello,
>
>Consider the following code:
>
>if (a) {
> if (b) {
> if (c) {
> ...
> } else if (d) {
> ...
> }
> }
>} else if (e) {
> ...
> }
>
>This code is semantically equivalent to
>the following piece of code.
>
>if (a) {
> if (b && c) {
> ...
> } else if (d) {
> ...
> }
>} else if (e) {
> ...
> }
Note that in the original code, condition (d) is not evaluated if !(b) & !(c).
In the modified code, (d) is evaluated for !(b) & !(c), where it was not
before. Condition (d) could contain invalid pointer references, volatile
expressions, and other horrors, so performing the transformation could
very well lead to an incorrect program.
Side effects and bad data aside, the transformed case will evaluate
the (d) code for !(b) & (c) & (d) while the original would not. This is
not a legal transformation.
To better illustrate, expanding the '&&' in the second code fragment
gives the following; note how it differs from the original.
if (a) {
if (b) {
if (c) {
...
}
}
else if (d) {
...
}
}
else if (e) {
...
}
Terry Greyzck
terryg qwest net . @
http://www.greyzck.com
Return to the
comp.compilers page.
Search the
comp.compilers archives again.