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

    <tr>
        <th>Summary</th>
        <td>
            Unexpected results in optimizations when 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 timeout         FA5BEE67        FA5BEE67        FA5BEE67        FA5BEE67 FA5BEE67      
file2.c        timeout         AC3672BB        FA5BEE67 FA5BEE67        FA5BEE67        FA5BEE67
```
The ```timeout``` means the ```./a.out``` had been running for a long time and still didn't terminate.
using command line:
```
clang <filename.c> <optimization level> -lm -I $CSMITH_HOME/include && ./a.out
```
Besides, I ran the command line ```clang <filename.c> <optimization level> -fsanitize=<option> -I /usr/include/csmith/ && ./a.out```, options include **address**, **undefined** and **memory**, and the terminal showed that my programs have no undefined behavior. Meanwhile, both test cases appear not to be relying on uninitialized memory, at least according to **valgrind**.

Please help me to explain why these two files produced different output results when using the same optimization level(i.e. -O1), while the transformation of loop is equivalent when using other optimization levels,  thank you.

version: clang+llvm 14.0.0
os: ubuntu 22.04

And the content of ```csmith.h``` is as follows.
```
/* -*- mode: C -*-
 *
 * Copyright (c) 2007-2011, 2013, 2014 The University of Utah
 * All rights reserved.
 *
 * This file is part of `csmith', a random generator of C programs.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   * Redistributions of source code must retain the above copyright notice,
 *     this list of conditions and the following disclaimer.
 *
 *   * Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef RANDOM_RUNTIME_H
#define RANDOM_RUNTIME_H

#ifdef CSMITH_MINIMAL
#include "csmith_minimal.h"
#else

/*****************************************************************************/

#include <string.h>
#include <float.h>
#include <math.h>

#define __STDC_LIMIT_MACROS
#include "random_inc.h"

static uint32_t crc32_tab[256];
static uint32_t crc32_context = 0xFFFFFFFFUL;

static void 
crc32_gentab (void)
{
        uint32_t crc;
        const uint32_t poly = 0xEDB88320UL;
        int i, j;
        
        for (i = 0; i < 256; i++) {
                crc = i;
                for (j = 8; j > 0; j--) {
                        if (crc & 1) {
                                crc = (crc >> 1) ^ poly;
                        } else {
                                crc >>= 1;
                        }
                }
                crc32_tab[i] = crc;
        }
}

static void 
crc32_byte (uint8_t b) {
        crc32_context = 
                ((crc32_context >> 8) & 0x00FFFFFF) ^ 
                crc32_tab[(crc32_context ^ b) & 0xFF];
}

#if defined(__SPLAT__) || defined(NO_LONGLONG)
static void 
crc32_8bytes (uint32_t val)
{
        crc32_byte ((val>>0) & 0xff);
        crc32_byte ((val>>8) & 0xff);
        crc32_byte ((val>>16) & 0xff);
        crc32_byte ((val>>24) & 0xff);
}

static void 
transparent_crc (uint32_t val, char* vname, int flag)
{
        crc32_8bytes(val);
        if (flag) {
                printf("...checksum after hashing %s : %X\n", vname, crc32_context ^ 0xFFFFFFFFU);
        }
}
#else
static void 
crc32_8bytes (uint64_t val)
{
        crc32_byte ((val>>0) & 0xff);
        crc32_byte ((val>>8) & 0xff);
        crc32_byte ((val>>16) & 0xff);
        crc32_byte ((val>>24) & 0xff);
        crc32_byte ((val>>32) & 0xff);
        crc32_byte ((val>>40) & 0xff);
        crc32_byte ((val>>48) & 0xff);
        crc32_byte ((val>>56) & 0xff);
}

static void 
transparent_crc (uint64_t val, char* vname, int flag)
{
        crc32_8bytes(val);
        if (flag) {
                printf("...checksum after hashing %s : %lX\n", vname, crc32_context ^ 0xFFFFFFFFUL);
        }
}

#endif

static void 
transparent_crc_bytes (char *ptr, int nbytes, char* vname, int flag)
{
    int i;
    for (i=0; i<nbytes; i++) {
 crc32_byte(ptr[i]);
    }
        if (flag) {
                printf("...checksum after hashing %s : %lX\n", vname, crc32_context ^ 0xFFFFFFFFUL);
        }
}

/*****************************************************************************/

#endif

#endif /* RANDOM_RUNTIME_H */

/*
 * Local Variables:
 * c-basic-offset: 4
 * tab-width: 4
 * End:
 */

/* End of file. */
```
**file1.c**
```

#include "csmith.h"

struct S0 {
  unsigned f0 : 28;
  signed f1 : 3;
  signed f2 : 26;
  signed f3 : 29;
};

static int64_t g_31 = 0x9117A540F8278B72LL;
static struct S0 g_41 = {14571, -0, 4770, 6340};
static struct S0 *volatile g_220[1] = {&g_41};

static void func_1(void);

static void func_1() {
  int32_t l_34 = 0xDFE53505L;
  // unswitching
  for (g_31 = (-27); (g_31 < 19); g_31++) {
    uint64_t l_42[2];
    int i;
    for (i = 0; i < 2; i++) {
      l_42[i] = 0xE971521F00BB6E74LL;
    }
    if (l_42[1]) {
      if ((*g_220[0]).f1) {
        break;
      }
      for (l_34 = (-22); (l_34 != (-14)); l_34 = safe_add_func_uint16_t_u_u(l_34, 8)) {
      }
 }
  }
}

int main(void) {
  int print_hash_value = 0;
 platform_main_begin();
  crc32_gentab();
  func_1();
 transparent_crc(g_31, "g_31", print_hash_value);
 transparent_crc(g_41.f0, "g_41.f0", print_hash_value);
 transparent_crc(g_41.f1, "g_41.f1", print_hash_value);
 transparent_crc(g_41.f2, "g_41.f2", print_hash_value);
 transparent_crc(g_41.f3, "g_41.f3", print_hash_value);
 platform_main_end(crc32_context ^ 0xFFFFFFFFUL, print_hash_value);
 return 0;
}

```
**file2.c**
```
#include <math.h>
#include <stdlib.h>

#include "csmith.h"

struct S0 {
  unsigned f0 : 28;
  signed f1 : 3;
  signed f2 : 26;
  signed f3 : 29;
};

static int64_t g_31 = 0x9117A540F8278B72LL;
static struct S0 g_41 = {14571, -0, 4770, 6340};
static struct S0 *volatile g_220[1] = {&g_41};

static void func_1(void);

static void func_1() {
  int32_t l_34 = 0xDFE53505L;
  // unswitching
  if ((*g_220[0]).f1) {
    for (g_31 = (-27); (g_31 < 19); g_31++) {
 uint64_t l_42[2];
      int i;
      for (i = 0; i < 2; i++) {
 l_42[i] = 0xE971521F00BB6E74LL;
      }
      if (l_42[1]) {
 { break; }
        for (l_34 = (-22); (l_34 != (-14)); l_34 = safe_add_func_uint16_t_u_u(l_34, 8)) {
        }
      }
    }
 } else {
    for (g_31 = (-27); (g_31 < 19); g_31++) {
      uint64_t l_42[2];
      int i;
      for (i = 0; i < 2; i++) {
 l_42[i] = 0xE971521F00BB6E74LL;
      }
      if (l_42[1]) {
 for (l_34 = (-22); (l_34 != (-14)); l_34 = safe_add_func_uint16_t_u_u(l_34, 8)) {
        }
      }
    }
  }
}

int main(void) {
  int print_hash_value = 0;
  platform_main_begin();
 crc32_gentab();
  func_1();
  transparent_crc(g_31, "g_31", print_hash_value);
  transparent_crc(g_41.f0, "g_41.f0", print_hash_value);
  transparent_crc(g_41.f1, "g_41.f1", print_hash_value);
  transparent_crc(g_41.f2, "g_41.f2", print_hash_value);
  transparent_crc(g_41.f3, "g_41.f3", 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/eJzsWltzm8qy_jX4pUsqGHR98ANCKKZKFj6AkpUnagSDNFlcdGCQ4_XrT_WAEMhy4nhnV6199nIpgaFnunu-vg4SLUu-zxi7V8YLZby8o5U45MW9leTPLBt8-_Z8t8ujl_tVXoA4MIjzJMmfebYH8ZxDCDFPWKkQE2w4siLOi5RFciL734qfaMIyAaKgWYkkKnieQR5DkudHiIs8leu1YQgil7dkGA7BhoJmyKRkUoqUAQUrjywU_MSSF6hKVCHiccwKFJEfBU_5X7WAhJ1YUgLPwqSKcN7AUVHFgaPVF1Jf9PpS1peYlmIIPqr-nYYC8kocK4Fiq0SUCpnxIRtCeGDhn2WVwokmFe58DrRgim4o6lJRDWWiNh85hP7fwFGvxtrVmKBaV8_KqzEqesUYanEtmDxleXWZtDLGC8uaTH953CdchJBheJ57Lcsw9cmULBY_4fW20JtAolnaR43Idgwpo1kpva59NlTIig57sw40gh1jGRRVlqFbxHkBFJIcnZmnDGgWQSl4kkDEo0whUwGCFSnPqGDDWo_a78I8TXFywrM3TR8mNNuDopuIV0ZTNgwV3cIHr30VCYMkhYENChmZ3qPtPwQPzqOlkFXtxQwUMlHIBC77uiV0wUoeneOxCaKetheAflm_uKQZF_wvpujLZlaeSQpqvarK4qKtQlZhmXJxUMjqteatzsSEms05WHGbhkIMGkUFK8t6gNPquyqLWMwzFtVDabD6NmVpXrxc5iMF997YL4HykD_LzEQFpC9wLPJ9QdMSDvTEIMuhZQ07dqAnnhdDeGQ0ez7whCHHXS4OIFgpIKQlK4Eej4wWkOUCc9eOQcGSF3SOPIMq4wgVTfhfLIKzbiZQAQnD6KVhmBcyNYm82cGJJvuCZ83WGner_3_CRQwOLDlCynAJ-35MKM_g-fDyKk8eizyqQhZ1s2MvlcHzgWVNBkWMSpqyGwn0nPFk1pyj-hKLGtbbGZ2X3bTfEZOLAytuJWlki0bJ_oSXvOrt-sSKUnqYAdJXFbJIklMK2mioDht_z0skV7sqExUQMlRHXQ5G4wRhngkJQ9xxf-mew8MlPfASaNnUt3J4M7wUskK3GyjEGECaRxj8YNbjJuGj-do7MPPjS8H3BwEKmYVYLIiqTgdE1WQlIqqmN9eRrDzbjMttixdUdivoocPMSBKQzGQtZMWJRcObUv0DL6Uz4J6OtDjv_BySU-mLmB-iPIU9y1hBRV7gLLONjNusXRbxUhR8V0kjYphVJQOeQZlXRVjn0B3PaPGC6TWVBn7m4gB5Ia9t5pLs0jziMQ-lR0ilCoZtRMqFYBGqcuLROWr73UeYZxGvUwcuSploE_GVynBD8RL32mgc5hGDtCoxPgQGFQqiu_yEpLP5slzwEPNAjzG6Li8h4aWEuKtT43oXhSNehgnlKStuI3tbTZ510Tyr2YT4LU2v9Gv1_pCmUKNxxTPKwyplmaBnF1AIdod1jKdUsILTpLxYT5ofRXS39obnPtgeeM7K_2K4FtgePLnOZ3tpLWHxFfwHC0zn6atrf3rw4cFZLy3XA2OzBNPZ-K692PqO64FCiOGB7SmEdINnswRj8xWsP55cy_PAccF-fFrb1hK-GK5rbHzb8mTd3Jjr7dLefMLBYuvDxvFhbT_avrUE38Gn_oPV4fyaDTgreLRc88HY-MbCXtv-Vyl_ZfsblL1yXDDgyXB929yuDReetu6T43WZ4vaXtmeuDfvRWg4B7A1sHLA-WxsfvAdjvb6Cw_mysVzcVQ-LRZfn2jYWa6uWvvkKS9u1TL_ecvfetJfWxjfWOPKeLNOub60_rMenteF-xYHjdpOcs_Gs_9laG9821rA0Ho1PFpph9g4on1zH3LrWI27LWXWYetuF59v-1rfgk-MspcE8y_1sm5an6AtYO57EeetZyGdp-EatGLJc2b6c5Liw2Ho2gt412Ma3XHf75NvOBlPyg_PF-my5YBpbz1pKSzkbCZH_YDnuVxSD2ElDopAvD5b_YLlgb_oo-K5Rg-j5rm36_UWOC77j-j1cYGN9WtufrI1pId1Brl9s3NG85wu2h5PtWqkvxldwtgiXdIGtZ9W3nciR9vpsbcBegbH8bOO26ukdtk-O59mNdzor8LbmQ2O8bmySVbeiKkTnMXZK4BqbpfMYuNuNbz9awUNLr9uot-gXLsik6XQf7Y39aKwvxLYXJHXJClKe8ZQmw0Mb1ArRWVKyPtvVuQH8f_95ZZUzZLqJOTbbDw-Kbt0ix0lOxZvUlMqmqCVeWTUIPH9pBjKGg0fDdB3vltXqziLgWdi1mPy_xLIRQsUzoZNAQFiEeKU7Zbwg44kyXir64kdTZTP3XYCiL0H9vmr-tut2WW_xKedRc26tl--xcO0wCpHUBpoybVfPuwI7XOdhnpXios4xT14aLazlYjbTidrTYs4zARxD8Vv3aXuDp0_ssWsemK7w1gREAQcKWcjPHLrKoR5FKNfwPtszw2-SOEMeeGvVvL8NBjdYoZax7E2RJ5mAdntSR-p5sm4h73r-2JJoXOmDn-kSMEx_xNKSnyVoN5f3nvSHXdfhyngp1buy2WXJZe2P3GP3ItCDZ2jlWSBgd43HayfsaUhmNT69ORKpmeREJqB-V9Xaac_YvbWp16zGVqOR5LNadcPlaocyyUJ7Xp4Fgfe0NvwgqHdkKlOzQ904wdrZfMJ_bUy8hdEMQSrPKMlYONHkZij1QcWgo0mNh3rZRhzjWv09q2YfWqVNPrSMjN5c9jNnkufjI8XDd1CH1hVWJoQHWmAZPmU0lQ06pos4ofsfAFkj3-jY30Ydxs36i8dC7VXHgmcilvsjw-GwfYlJY8EKONDygI2_QsYl4JFWIeM_lLGZYe4m5kXF197YycBXCt2IvG7Jfp9zTUb_hc71o2U6-dCy0ccQGX0MkvHbkHwwcC5-8LcPnOTXI2f989BpAyiLePxLEAZtQCFw2NMfRXGGLWtw-SVUAQDq3kbvPDm3M4q-rJsZRTcb9m90M3DxIIXMUKu6jnfRkF87dMr-W9b6e5rrv_c88spPz8-geYd6fT68ediU-HVeYOQhTeAzLTjdJehXXWI42NGSh4M8jkv5MhBGHaqgu8Ezj8ThmmBlUf_F4S0dcBbksXynOuzPun5BjJ_ma7gGm5vz3jzq3jgwFVUowFO73l5l8kvbCGJVOjKZdSLmTNIkSb9BIfWiyQ2SXpP6Kfvm0eqclveBrjXnoLmmTY3xSF3NyHS2mJL1-vowd9nNPhjVy5TpQhuNp_VXs_I7odF0Kq8TfaR2xb_ioRDjlCdU8ITBPiBEVcYL7XwSQLjIBMW8uQWZNeMqCwOtcyB8x9Sr5HNu7ZJAHzVQLFfWWB-r43UHY-lMKzTeMxchpqIzpUmeLZQKmQ3ItFamQzBBmzcP8cmtnAoAbcFMghHBY3X3lPDj5P3qLPpm7pZ_jYD28KV-t-ZTbUy0laouFhNrOlqvb6dyqYbM5Q0PrU781xLqOfJjnC2s1lOHsXZjAcCuYPTPntQrue12W3NJuMkF7ppAtDNNG8lvwCS5XVTSmAU0igLpFQi6NglEUAVVwwFdeFYvvNbyok9Hs7fqCJorpTy7uOiV74EsewGWt0D-LKE1YzPpmFAR50UaIJtgx_aSWb_Odl-PvCJ2Hf_y-KrTaPy0_rqW1LeyrF6r91MmI20Yqy2fZvRxVlqP1b-kFemxIv8KK73HSn8Pq74dWRbdfEPQb1V-wrJgoiqyjrNcNzFvFTjy4wL3w7eKV-8ro4Tvbr10_Kc4_lMcjV-uAb-vlv60kN4qpR8ppr9cR19VtJ_UUmW6aOvi9dK_QTl8tZ3esFcsr14n_16Dw7vap_8Yq__H2PXf2Pq8p_f5QOvze3qf39n8_M7u53e2P7-z__l3NEDv74Duons9mutzesfutalK5hrRZ_O7w_2MjWfzeaxPdhEdzeN5PJvQ-VjX9Km6G00nozt-T1Sia0SbaWNNV8lwNw3pbjqbTKJ4NBrNmDJSWUp5MkySUzrMi_0dL8uK3U_HM3V-l9AdS0r5A21CMvYMkoiAjZd3xT2uGeyqfamM1ISXorxwEVwk7H6bse9HFgoWtT8B5Fnv13i93wQOHG0Id1WR3B-EOMrXLLI277k4VLthmKcKWaGI5jI4Fvk3FgqFrKRipUJWUvH_CwAA__-SrIPG">