<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/75604>75604</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            unexpected output results in fusion using -Os
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
      </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      8426F 85545B29        85545B29        85545B29        7FD9E5FE        85545B29 
file2.c      8426F           85545B29        85545B29        85545B29 85545B29        85545B29     
```
 
Please help me to explain why these two files produced different output results when using the same optimization level(i.e. -Os), 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_a120[2];
static int64_t g_b120[2];

struct S0 {
  const volatile uint32_t f0;
  uint64_t f1;
  int64_t f2;
};

union U1 {
  int16_t f0;
  uint16_t f1;
  uint16_t f2;
  const struct S0 f3;
};

static int32_t g_17[3] = {0x556123D4L, 0x556123D4L, 0x556123D4L};
static int32_t *g_29 = (void *)0;
static union U1 g_105 = {0xB5B7L};
static union U1 g_272[1] = {{0xB220L}};
static struct S0 g_350 = {2UL, 18446744073709551615UL, 0x484C2F172B251D2FLL};
static uint16_t g_352 = 5UL;
static struct S0 g_388 = {0UL, 0xB2916F400852E206LL, 0L};

static const void func_1(void);
static int32_t *func_18(const int16_t p_19, int32_t **p_20, int32_t **p_23);

static const void func_1(void) {
  int i, j;
  int ii_3;
  // fusion
  for (i = 0, ii_3 = 0; i < 2; i++, ii_3++) {
    for (j = 0; j < 1; j++) {
 g_a120[ii_3] = g_17[0] * g_352 - g_272[0].f1;
    }
  }
  int jj_3;
  for (jj_3 = 0; jj_3 < 2; jj_3++) {
    g_b120[jj_3] = g_105.f1 * g_a120[jj_3] - g_388.f2;
  }
  for (g_17[1] = 0; (g_17[1] <= 1); g_17[1] += 1) {
  }
  g_29 = func_18((g_272[0].f0 = g_350.f0), &g_29, &g_29);
}

static int32_t *func_18(const int16_t p_19, int32_t **p_20, int32_t **p_23) {
  return (*p_20);
}

int main(void) {
  int i, j, k;
  int print_hash_value = 0;
 platform_main_begin();
  crc32_gentab();
  func_1();
  for (i = 0; i < 3; i++) {
    transparent_crc(g_17[i], "g_17[i]", print_hash_value);
  }
  for (i = 0; i < 1; i++) {
 transparent_crc(g_272[i].f0, "g_272[i].f0", print_hash_value);
  }
 transparent_crc(g_350.f0, "g_350.f0", print_hash_value);
 transparent_crc(g_350.f1, "g_350.f1", print_hash_value);
 transparent_crc(g_350.f2, "g_350.f2", print_hash_value);
 transparent_crc(g_352, "g_352", print_hash_value);
 transparent_crc(g_388.f0, "g_388.f0", print_hash_value);
 transparent_crc(g_388.f1, "g_388.f1", print_hash_value);
 transparent_crc(g_388.f2, "g_388.f2", print_hash_value);
  for (i = 0; i < 2; i++) {
    transparent_crc(g_a120[i], "g_a120[i]", print_hash_value);
  }
  for (i = 0; i < 2; i++) {
 transparent_crc(g_b120[i], "g_b120[i]", print_hash_value);
  }
 platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
 return 0;
}

```

**file2.c**
```

#include "csmith.h"

static int32_t g_a120[2];
static int64_t g_b120[2];

struct S0 {
  const volatile uint32_t f0;
  uint64_t f1;
  int64_t f2;
};

union U1 {
  int16_t f0;
  uint16_t f1;
  uint16_t f2;
  const struct S0 f3;
};

static int32_t g_17[3] = {0x556123D4L, 0x556123D4L, 0x556123D4L};
static int32_t *g_29 = (void *)0;
static union U1 g_105 = {0xB5B7L};
static union U1 g_272[1] = {{0xB220L}};
static struct S0 g_350 = {2UL, 18446744073709551615UL, 0x484C2F172B251D2FLL};
static uint16_t g_352 = 5UL;
static struct S0 g_388 = {0UL, 0xB2916F400852E206LL, 0L};

static const void func_1(void);
static int32_t *func_18(const int16_t p_19, int32_t **p_20, int32_t **p_23);

static const void func_1(void) {
  int i, j;
 int ii_3;
  int jj_3;
  int ij_3;
  // fusion
  for (i = 0, ii_3 = 0, jj_3 = 0, ij_3 = 0; ij_3 <= 2; ij_3++) {
    if (ij_3 <= 2 && i < 2) {
      for (j = 0; j < 1; j++) {
        g_a120[ii_3] = g_17[0] * g_352 - g_272[0].f1;
      }
      i++;
      ii_3++;
    }
 if (ij_3 <= 2 && jj_3 < 2) {
      g_b120[jj_3] = g_105.f1 * g_a120[jj_3] - g_388.f2;
      jj_3++;
    }
  }
  for (g_17[1] = 0; (g_17[1] <= 1); g_17[1] += 1) {
  }
  g_29 = func_18((g_272[0].f0 = g_350.f0), &g_29, &g_29);
}

static int32_t *func_18(const int16_t p_19, int32_t **p_20, int32_t **p_23) {
  return (*p_20);
}

int main(void) {
  int i, j, k;
  int print_hash_value = 0;
 platform_main_begin();
  crc32_gentab();
  func_1();
  for (i = 0; i < 3; i++) {
    transparent_crc(g_17[i], "g_17[i]", print_hash_value);
  }
  for (i = 0; i < 1; i++) {
 transparent_crc(g_272[i].f0, "g_272[i].f0", print_hash_value);
  }
 transparent_crc(g_350.f0, "g_350.f0", print_hash_value);
 transparent_crc(g_350.f1, "g_350.f1", print_hash_value);
 transparent_crc(g_350.f2, "g_350.f2", print_hash_value);
 transparent_crc(g_352, "g_352", print_hash_value);
 transparent_crc(g_388.f0, "g_388.f0", print_hash_value);
 transparent_crc(g_388.f1, "g_388.f1", print_hash_value);
 transparent_crc(g_388.f2, "g_388.f2", print_hash_value);
  for (i = 0; i < 2; i++) {
    transparent_crc(g_a120[i], "g_a120[i]", print_hash_value);
  }
  for (i = 0; i < 2; i++) {
 transparent_crc(g_b120[i], "g_b120[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/eJzsWU9vq7oS_zTOxgqyBwiwyCJpEt1KveqT7jlr5IBJnMO_ByZt36d_sjEJJKTt6enuBlUNM54_v7FnBiZhdS12Oedz5C6Ru5qwRu6Lar5OixeeTw-Hl8m2iN_mm6LCcs9xUqRp8SLyHZYvBY5wIlJeI3jAj7jkVVJUGY-1IP9vI44s5bnEsmJ5rZaYFEWOiwSnRVHipCoyjGCBYKGsUCtqCSyLHhs6toUfccVyZbzm2rv2jStelzyS4sjTN9zUCloskoRXynVRSpGJ_7WOU37kaY1FHqVNrORaw9Nn0t6oMDoWvWbBNcu-ZtXXrITVsovhh9qaVxZJXDSybKSC36SyRuALi1s42vPoV91k-MjSRu1sgFnFkb1AZIXIAs2I-dMk7l_TZ3JB0wsa8PTZvuDVF7QCa4jWhzmbluU7MNtg33UddwlBp_UR7W1WwdrdrK_Wzx5g6OF8fdrXu4Lju9d-_CflrOZ4z9MSZ1xlH38tUyZy_LJ_u0q3siriJuJxP8kGJ4lf9jw3iagKoWYZH8nD7sB1xgQqXeSe5b_wW9FYBq3-HxVZxvIYpyK_mQZRylQ22w8KYs4ybkXIXivGiF97jadphqePGIHz8M_fjz_-Cv96_nuNYNNWBscIZghm2EKwYVbRyFGnR17VosiRvcDaP4Jlmh4zTB2LWEamqNVys21y2WAAizj90EZqf9RTJ22f8UFUZ0LurT0C6AvVkkkRYZFLG0KJdyGjQJC7BOSukL28FJo5Wmg7ItSJVk0k8T8EI2_Z1VxU5LXExyJlUqQcN523hJy0seZq8wntcU9MODvyLp02uTqtn7TvU-SSzsZ8tFw6yoUetwV9jiex30FwtY3UQ-7SRu4KI3ulcJFX151RsFfOk8rdd0hvbOO1WQSLXai6gDIJ_rEQcdszA3KpctqSXUiJewaxdJfemIuePHiA3CXtYW81AYjWvFY-b9IutF3SqcFPHRv1HWfmOQ7xbI8Erktn1P1ponZ85wE21IMluHQFm6dRbN35KOugrSsD74Hw_VPInaslBHS2cQjxXVgDmT21_Kebh9llrYhx0uRRSM2Wq-5z-4BaUR-B3-p32MuQ6qbVE0WwKEMgo1y77-WzsC7yHwtl-jCsJixEaPdYCDYINjhpdG8yzKSoVIIJvYktQBHahrKXWC08YNC3CJb6r5XpqAGWk8HD2cRBm6D6dkzp1Im0VZOLpq6IpmFhEmJ6Slq1YA1qG2N1vl2s51u1E4fDYCc6jId-pIYywWqN8QhPTVHLnPES10qoAcuGEtM2U61B2-lhNIBM0KeC1Liu-A9qibZZgwdLsOyW-oh7fk495Zy72nx_T4mJx3aJlRDzAEYwU7qD22DQJW-3yO8tlX5kFZdNlWMdhdG6CUqlQcZE_mENwQP-dVFIZSVyGe5ZvQ_1u-fpcIxQmTKpXuJD5SDc8p120weDcVRFNoQ7nku2vVo8lfcFe1icp3K0B-V4kZ56pCiZev0Koyo6p49Qz3B9gDDggGJehjgEcp2qV5joTUxjgNqEE23CnUBdcH8L2JiXLoWN-Y782O5NY3RojP6RMRgag68b61v6uhnVoHq7Zcg_MEaHxr6-W23rHBj7VJg3sxV-t4K6R1S_hga876mi27jGQG1HQG2_DGrYxXgeq3atu1ZU5JK_SozcNSavG3O1r1vvWjcNmtxqyjemmasvOO6zz332uc8-99nnU7PPyOgzMgNoqcMfDkjK8aFPicFIYSj9wg4d48ZDRyTaTV-j-7KpezRcqnxl2DLXt81cg6eajsN4HQr1Bsbxie2d8HuD2XUo3zWMqas38308Vt5HtvvIdh_Z7iPbfWS7j2z_ypFtEs_tOLADNuFz6hGYOe4Mgsl-7jt-4AQxc6MI4tgnDgUIWOJ5TkSSLYknYg4EbArUpTbxSGAB-Myjvu1yhwURAeQQnjGRWml6zKyi2k1EXTd87rkz4kxStuVp3f0oX82V0HTb7GrkkFTUsj6rSSFTPm9y_lrySPL48vdIkZu3PfOj5PS5njRVOt9LWdbIXrRvhDsh983WiooMwUbZNh_TsioOPJIINhpfjWCjIf4_AAD__14gl5I">