SKIP: FAILED

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;
}
