<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/75585>75585</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
unexpected output results in fusion using -O1
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
Elowen-jjw
</td>
</tr>
</table>
<pre>
For the following two c files, I performed the equivalent transformation of loop from **file1.c** to **file2.c**. I ran these two files respectively using different optimization levels including **-O0**, **-O1**, **-O2**, **-O3**, **-Os**, **-Ofast**. The exact output results(i.e. checksum values) are:
```
-O0 -O1 -O2 -O3 -Os -Ofast
file1.c BAE78610 25BE175 25BE175 25BE175 25BE175 25BE175
file2.c BAE78610 BAE78610 25BE175 25BE175 25BE175 25BE175
```
Please help me to explain why these two files produced different output results when using the same optimization level(i.e. -O1), thank you.
command line:
```
clang <filename.c> <optimization level> -lm -I $CSMITH_HOME/include && ./a.out
```
version: clang+llvm 14.0.0
os: ubuntu 22.04
**file1.c**
```
#include "csmith.h"
static int32_t g_a31[1];
static int64_t g_b31[1];
struct S0 {
volatile int64_t f0;
const int64_t f1;
};
static int32_t g_12 = 0x703026D8L;
static int32_t g_42[3][2] = {{(-3L), (-3L)}, {(-3L), (-3L)}, {(-3L), (-3L)}};
static int32_t *g_61 = &g_42[1][1];
static int32_t **volatile g_60 = &g_61;
static volatile struct S0 g_75 = {-1L, 1L};
static volatile struct S0 *volatile g_74 = &g_75;
static void func_1(void);
static void func_1() {
int i, j, k;
for (i = 0; i < 2; i++) {
int ii_4;
// fusion
for (j = 0, ii_4 = 0; j < 1; j++, ii_4++) {
for (k = 0; k < 1; k++) {
g_a31[ii_4] = g_42[2][0] * g_12 - g_42[2][1];
}
}
int jj_4;
for (jj_4 = 0; jj_4 < 1; jj_4++) {
g_b31[jj_4] = (*g_74).f1 * g_a31[jj_4] + (**g_60);
}
}
}
int main(void) {
int i, j, k;
int print_hash_value = 0;
platform_main_begin();
crc32_gentab();
func_1();
transparent_crc(g_12, "g_12", print_hash_value);
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
transparent_crc(g_42[i][j], "g_42[i][j]", print_hash_value);
}
}
transparent_crc(g_75.f0, "g_75.f0", print_hash_value);
transparent_crc(g_75.f1, "g_75.f1", print_hash_value);
for (i = 0; i < 1; i++) {
transparent_crc(g_a31[i], "g_a31[i]", print_hash_value);
}
for (i = 0; i < 1; i++) {
transparent_crc(g_b31[i], "g_b31[i]", print_hash_value);
}
platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
return 0;
}
```
**file2.c**
```
#include "csmith.h"
static int32_t g_a31[1];
static int64_t g_b31[1];
struct S0 {
volatile int64_t f0;
const int64_t f1;
};
static int32_t g_12 = 0x703026D8L;
static int32_t g_42[3][2] = {{(-3L), (-3L)}, {(-3L), (-3L)}, {(-3L), (-3L)}};
static int32_t *g_61 = &g_42[1][1];
static int32_t **volatile g_60 = &g_61;
static volatile struct S0 g_75 = {-1L, 1L};
static volatile struct S0 *volatile g_74 = &g_75;
static void func_1(void);
static void func_1() {
int i, j, k;
for (i = 0; i < 2; i++) {
int ii_4;
int jj_4;
int ij_4;
// fusion
for (j = 0, ii_4 = 0, jj_4 = 0, ij_4 = 0; ij_4 <= 1; ij_4++) {
if (ij_4 <= 1 && j < 1) {
for (k = 0; k < 1; k++) {
g_a31[ii_4] = g_42[2][0] * g_12 - g_42[2][1];
}
j++;
ii_4++;
}
if (ij_4 <= 1 && jj_4 < 1) {
g_b31[jj_4] = (*g_74).f1 * g_a31[jj_4] + (**g_60);
jj_4++;
}
}
}
}
int main(void) {
int i, j, k;
int print_hash_value = 0;
platform_main_begin();
crc32_gentab();
func_1();
transparent_crc(g_12, "g_12", print_hash_value);
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
transparent_crc(g_42[i][j], "g_42[i][j]", print_hash_value);
}
}
transparent_crc(g_75.f0, "g_75.f0", print_hash_value);
transparent_crc(g_75.f1, "g_75.f1", print_hash_value);
for (i = 0; i < 1; i++) {
transparent_crc(g_a31[i], "g_a31[i]", print_hash_value);
}
for (i = 0; i < 1; i++) {
transparent_crc(g_b31[i], "g_b31[i]", print_hash_value);
}
platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
return 0;
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsWV1v4joT_jXmZkQUOyShF1xAKdpKXfWVdt9r5CQOmDoxJ3agPb_-yE5CQghd9ku7F60QZMbjmWfGM8kDpUrxTc7YDPkL5C9HtNRbWcwehDyyfLzbHUeRTN5mK1mA3jJIpRDyyPMN6KOEGFIumELkHh5hz4pUFhlLrCH7p-QHKliuQRc0V2aJai5zkCkIKfeQFjIDROaIzI0X7MSVAFp21KRRO_AIBc2Nc8VsdBsbCqb2LNb8wMQblMpAS3iassKElnvNM_5vFViwAxMKeB6LMjF2lePxs1tdmDQaFb5UkUuVd6lSl6qUKt3k8NWU5pXGGmSp96U28EuhFSJT7jAH4i2LX1SZwYGK0lT2DmjBkDdH7hK5cxS49cuKMPQ3fnZh_Ix7OtKTvZ6serIBDVWU-nTOoyzmD-E0wG4jE3_xgEMf-vI1_aDcxiNOfBHi1pDXIAyW8H-CUcVgy8QeMmZ6j73uBeU5HLdvF822L2RSxizpttjZOcJxy_K6Dc0YKJqxgS5sjts22p1pFr2l-Qu8ydKpYdr3WGYZzRMQPL_aBLGgppe9ewMxpxlzYuQ9GMVAXO8BxiKD8SMgMrn_8vnx66f1p-fPD4isqrlggEiASAAOIivqyFIPBj2wQnGZI28ONj4iCyEOGeCJ4zq1jVRmuYzKXJdAiONOuqkNTP5gpMbaa_GRWGVcb50tIqRrpDTVPAaea4-sNWzW1MPIX2DkL5G36NsEE2sTXdo0lkUZa_jiAgoXzbwdpKCaC3ZykLqnbQCxzJVul3DrMbz03sOKCSBvCe5r6HouCZbTpwHMte2EIH_hGcj-giB_aXcalOECkenYe6qbqhXCpZV_Zj0cKqIFhMh8sw5whYIENT5c4btS_WYjIvNTTTfrwG2dBLi_7WTYHs1mbQa7yn6Mnwxo_DQAdWDreeRw0kYO_eHDOkieQFrm8RojMjWSKc0NpuY23mkinmvgBurOvL10GiiVhSk6r1oBeQswl_dA7CUiC_s6c1a74-tJxw8AIitEVpCWdkxP6jrArg5A7u3ONtzOhsP2sglX2VwJfnL50jp5aZ28DG1rBtO6rbu3bhpSNY1r1WRezcW4t3rWUvWTI1x2cu8Kpjq7Xa86TRl2Z7lXUpP-7p2cm9uGNWrmz5zz3HQSIndOimv89NyQLGrDamjcbgf1sJ8u2wv7bjLKKM_bHrytuczKvuC5Xm-p2q4twzhlXxvtBdWGqq1NgHXENjbMOci4iD2y3rBc0-hisdvzrdpSwD01D8x1XMSITM3BVrcYUl1aqQ-v5_vKdHjvTUev4089Ts56_OKEhxDbHuRVD-7MR4P_cuGGbIbPejBw6Dupe4pWS98Occ0VPnOFf6r2-L3aDwGoR79bvq7qBiidsn0_qiFI0SWk6EchnQ8QyxNEptXAxDLX7FUD8h_AfV3Vf_9_-qb3gumyyDtT2rsf9AnT5XenD2L1Qaw-iNWvIVaDfMJa9pU_QsEM9l1X4mcUpZbujQI3iqvPMJ7anLt7mm93Dc-73PSXELruPbV5SvctOrT0HTb4fh1aztfL6LcQvA6pvI2__gkOeAsJ_AEO-EECbyeBv5IF_mEa-BdywCsn-ytp4O_ggd9LBEfJzEvuvDs6YjMcuiSY4CDAo-0sCnCU0Jh5Qegz5kdeRCMSUXrnJjSc-JMRnxGXeJhgHxMXu9hJ7twoStwgYknqT9gUTVyWUS4cIQ6ZI4vNiCtVslno-1N_JGjEhLL_USAkZ0ewi6aC_nJUzMyecVRuFJq4giutWi-aa8FmZc5e9yzWLOn_usrz-nFa_8Q6fsajshCzrdZ7hbx59cjdcL0tIyeWGSIr47v-GO8LuWOxRmRlESlEVhbxfwEAAP__p0-VLA">