Consider these two functions and two statements $\text{S1}$ and $\text{S2}$ about them.
int work1(int *a, int i, int j)
{
int x = a[i+2];
a[j] = x+1;
return a[i+2] - 3;
}
|
int work2(int *a, int i, int j)
{
int t1 = i+2;
int t2 = a[t1];
a[j] = t2+1;
return t2 - 3;
}
|
$\text{S1:}$ The transformation form work$1$ to work$2$ is valid, i.e., for any program state and input arguments, work$2$ will compute the same output and have the same effect on program state as work$1$
$\text{S2:}$ All the transformations applied to work$1$ to get work$2$ will always improve the performance (i.e reduce $\text{CPU}$ time) of work$2$ compared to work$1$
- $\text{S1}$ is false and $\text{S2}$ is false
- $\text{S1}$ is false and $\text{S2}$ is true
- $\text{S1}$ is true and $\text{S2}$ is false
- $\text{S1}$ is true and $\text{S2}$ is true