SKIP: FAILED - TIMEOUT

static int x_GLF_global_loop_count = 0;
cbuffer cbuffer_x_7 : register(b0, space0) {
  uint4 x_7[3];
};
cbuffer cbuffer_x_10 : register(b1, space0) {
  uint4 x_10[4];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  float f = 0.0f;
  int i = 0;
  int i_1 = 0;
  int i_2 = 0;
  int i_3 = 0;
  int i_4 = 0;
  int i_5 = 0;
  int i_6 = 0;
  int i_7 = 0;
  int i_8 = 0;
  int i_9 = 0;
  int i_10 = 0;
  int i_11 = 0;
  int i_12 = 0;
  int i_13 = 0;
  int i_14 = 0;
  float sum = 0.0f;
  int r = 0;
  x_GLF_global_loop_count = 0;
  const float x_53 = asfloat(x_7[1].x);
  f = x_53;
  const int x_55 = asint(x_10[1].x);
  i = x_55;
  [loop] while (true) {
    const int x_60 = i;
    const uint scalar_offset = ((16u * 0u)) / 4;
    const int x_62 = asint(x_10[scalar_offset / 4][scalar_offset % 4]);
    if ((x_60 < x_62)) {
    } else {
      break;
    }
    const int x_66 = asint(x_10[1].x);
    i_1 = x_66;
    [loop] while (true) {
      const int x_71 = i_1;
      const uint scalar_offset_1 = ((16u * 0u)) / 4;
      const int x_73 = asint(x_10[scalar_offset_1 / 4][scalar_offset_1 % 4]);
      if ((x_71 < x_73)) {
      } else {
        break;
      }
      const int x_77 = asint(x_10[1].x);
      i_2 = x_77;
      [loop] while (true) {
        const int x_82 = i_2;
        const uint scalar_offset_2 = ((16u * 0u)) / 4;
        const int x_84 = asint(x_10[scalar_offset_2 / 4][scalar_offset_2 % 4]);
        if ((x_82 < x_84)) {
        } else {
          break;
        }
        const int x_88 = asint(x_10[1].x);
        i_3 = x_88;
        [loop] while (true) {
          const int x_93 = i_3;
          const uint scalar_offset_3 = ((16u * 0u)) / 4;
          const int x_95 = asint(x_10[scalar_offset_3 / 4][scalar_offset_3 % 4]);
          if ((x_93 < x_95)) {
          } else {
            break;
          }
          const int x_99 = asint(x_10[1].x);
          i_4 = x_99;
          [loop] while (true) {
            const int x_104 = i_4;
            const uint scalar_offset_4 = ((16u * 0u)) / 4;
            const int x_106 = asint(x_10[scalar_offset_4 / 4][scalar_offset_4 % 4]);
            if ((x_104 < x_106)) {
            } else {
              break;
            }
            const int x_110 = asint(x_10[1].x);
            i_5 = x_110;
            [loop] while (true) {
              const int x_115 = i_5;
              const uint scalar_offset_5 = ((16u * 0u)) / 4;
              const int x_117 = asint(x_10[scalar_offset_5 / 4][scalar_offset_5 % 4]);
              if ((x_115 < x_117)) {
              } else {
                break;
              }
              const int x_121 = asint(x_10[1].x);
              i_6 = x_121;
              [loop] while (true) {
                const int x_126 = i_6;
                const uint scalar_offset_6 = ((16u * 0u)) / 4;
                const int x_128 = asint(x_10[scalar_offset_6 / 4][scalar_offset_6 % 4]);
                if ((x_126 < x_128)) {
                } else {
                  break;
                }
                const int x_132 = asint(x_10[1].x);
                i_7 = x_132;
                [loop] while (true) {
                  const int x_137 = i_7;
                  const uint scalar_offset_7 = ((16u * 0u)) / 4;
                  const int x_139 = asint(x_10[scalar_offset_7 / 4][scalar_offset_7 % 4]);
                  if ((x_137 < x_139)) {
                  } else {
                    break;
                  }
                  const int x_143 = asint(x_10[1].x);
                  i_8 = x_143;
                  [loop] while (true) {
                    const int x_148 = i_8;
                    const uint scalar_offset_8 = ((16u * 0u)) / 4;
                    const int x_150 = asint(x_10[scalar_offset_8 / 4][scalar_offset_8 % 4]);
                    if ((x_148 < x_150)) {
                    } else {
                      break;
                    }
                    const int x_154 = asint(x_10[1].x);
                    i_9 = x_154;
                    [loop] while (true) {
                      const int x_159 = i_9;
                      const uint scalar_offset_9 = ((16u * 0u)) / 4;
                      const int x_161 = asint(x_10[scalar_offset_9 / 4][scalar_offset_9 % 4]);
                      if ((x_159 < x_161)) {
                      } else {
                        break;
                      }
                      const int x_165 = asint(x_10[1].x);
                      i_10 = x_165;
                      [loop] while (true) {
                        const int x_170 = i_10;
                        const uint scalar_offset_10 = ((16u * 0u)) / 4;
                        const int x_172 = asint(x_10[scalar_offset_10 / 4][scalar_offset_10 % 4]);
                        if ((x_170 < x_172)) {
                        } else {
                          break;
                        }
                        const int x_176 = asint(x_10[1].x);
                        i_11 = x_176;
                        [loop] while (true) {
                          const int x_181 = i_11;
                          const int x_183 = asint(x_10[2].x);
                          if ((x_181 < x_183)) {
                          } else {
                            break;
                          }
                          const int x_187 = asint(x_10[1].x);
                          i_12 = x_187;
                          [loop] while (true) {
                            const int x_192 = i_12;
                            const uint scalar_offset_11 = ((16u * 0u)) / 4;
                            const int x_194 = asint(x_10[scalar_offset_11 / 4][scalar_offset_11 % 4]);
                            if ((x_192 < x_194)) {
                            } else {
                              break;
                            }
                            const int x_198 = asint(x_10[1].x);
                            i_13 = x_198;
                            [loop] while (true) {
                              const int x_203 = i_13;
                              const uint scalar_offset_12 = ((16u * 0u)) / 4;
                              const int x_205 = asint(x_10[scalar_offset_12 / 4][scalar_offset_12 % 4]);
                              if ((x_203 < x_205)) {
                              } else {
                                break;
                              }
                              const int x_209 = asint(x_10[1].x);
                              i_14 = x_209;
                              [loop] while (true) {
                                const int x_214 = i_14;
                                const int x_216 = asint(x_10[2].x);
                                if ((x_214 < x_216)) {
                                } else {
                                  break;
                                }
                                [loop] while (true) {
                                  x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
                                  {
                                    const int x_225 = x_GLF_global_loop_count;
                                    const int x_227 = asint(x_10[3].x);
                                    if ((x_225 < (100 - x_227))) {
                                    } else {
                                      break;
                                    }
                                  }
                                }
                                const uint scalar_offset_13 = ((16u * 0u)) / 4;
                                const float x_231 = asfloat(x_7[scalar_offset_13 / 4][scalar_offset_13 % 4]);
                                f = (f + x_231);
                                {
                                  i_14 = (i_14 + 1);
                                }
                              }
                              {
                                i_13 = (i_13 + 1);
                              }
                            }
                            {
                              i_12 = (i_12 + 1);
                            }
                          }
                          {
                            i_11 = (i_11 + 1);
                          }
                        }
                        {
                          i_10 = (i_10 + 1);
                        }
                      }
                      {
                        i_9 = (i_9 + 1);
                      }
                    }
                    {
                      i_8 = (i_8 + 1);
                    }
                  }
                  {
                    i_7 = (i_7 + 1);
                  }
                }
                {
                  i_6 = (i_6 + 1);
                }
              }
              {
                i_5 = (i_5 + 1);
              }
            }
            {
              i_4 = (i_4 + 1);
            }
          }
          {
            i_3 = (i_3 + 1);
          }
        }
        {
          i_2 = (i_2 + 1);
        }
      }
      {
        i_1 = (i_1 + 1);
      }
    }
    {
      i = (i + 1);
    }
  }
  const float x_265 = asfloat(x_7[1].x);
  sum = x_265;
  const int x_267 = asint(x_10[1].x);
  r = x_267;
  {
    [loop] for(; (x_GLF_global_loop_count < 100); r = (r + 1)) {
      x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
      sum = (sum + f);
    }
  }
  const float x_282 = sum;
  const float x_284 = asfloat(x_7[2].x);
  if ((x_282 == x_284)) {
    const uint scalar_offset_14 = ((16u * 0u)) / 4;
    const int x_290 = asint(x_10[scalar_offset_14 / 4][scalar_offset_14 % 4]);
    const int x_293 = asint(x_10[1].x);
    const int x_296 = asint(x_10[1].x);
    const uint scalar_offset_15 = ((16u * 0u)) / 4;
    const int x_299 = asint(x_10[scalar_offset_15 / 4][scalar_offset_15 % 4]);
    x_GLF_color = float4(float(x_290), float(x_293), float(x_296), float(x_299));
  } else {
    const int x_303 = asint(x_10[1].x);
    const float x_304 = float(x_303);
    x_GLF_color = float4(x_304, x_304, x_304, x_304);
  }
  return;
}

struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol {
  float4 x_GLF_color_1 : SV_Target0;
};

main_out main_inner() {
  main_1();
  const main_out tint_symbol_3 = {x_GLF_color};
  return tint_symbol_3;
}

tint_symbol main() {
  const main_out inner_result = main_inner();
  tint_symbol wrapper_result = (tint_symbol)0;
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}
