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;
  while (true) {
    const int x_60 = i;
    const int x_62 = asint(x_10[0].x);
    if ((x_60 < x_62)) {
    } else {
      break;
    }
    const int x_66 = asint(x_10[1].x);
    i_1 = x_66;
    while (true) {
      const int x_71 = i_1;
      const int x_73 = asint(x_10[0].x);
      if ((x_71 < x_73)) {
      } else {
        break;
      }
      const int x_77 = asint(x_10[1].x);
      i_2 = x_77;
      while (true) {
        const int x_82 = i_2;
        const int x_84 = asint(x_10[0].x);
        if ((x_82 < x_84)) {
        } else {
          break;
        }
        const int x_88 = asint(x_10[1].x);
        i_3 = x_88;
        while (true) {
          const int x_93 = i_3;
          const int x_95 = asint(x_10[0].x);
          if ((x_93 < x_95)) {
          } else {
            break;
          }
          const int x_99 = asint(x_10[1].x);
          i_4 = x_99;
          while (true) {
            const int x_104 = i_4;
            const int x_106 = asint(x_10[0].x);
            if ((x_104 < x_106)) {
            } else {
              break;
            }
            const int x_110 = asint(x_10[1].x);
            i_5 = x_110;
            while (true) {
              const int x_115 = i_5;
              const int x_117 = asint(x_10[0].x);
              if ((x_115 < x_117)) {
              } else {
                break;
              }
              const int x_121 = asint(x_10[1].x);
              i_6 = x_121;
              while (true) {
                const int x_126 = i_6;
                const int x_128 = asint(x_10[0].x);
                if ((x_126 < x_128)) {
                } else {
                  break;
                }
                const int x_132 = asint(x_10[1].x);
                i_7 = x_132;
                while (true) {
                  const int x_137 = i_7;
                  const int x_139 = asint(x_10[0].x);
                  if ((x_137 < x_139)) {
                  } else {
                    break;
                  }
                  const int x_143 = asint(x_10[1].x);
                  i_8 = x_143;
                  while (true) {
                    const int x_148 = i_8;
                    const int x_150 = asint(x_10[0].x);
                    if ((x_148 < x_150)) {
                    } else {
                      break;
                    }
                    const int x_154 = asint(x_10[1].x);
                    i_9 = x_154;
                    while (true) {
                      const int x_159 = i_9;
                      const int x_161 = asint(x_10[0].x);
                      if ((x_159 < x_161)) {
                      } else {
                        break;
                      }
                      const int x_165 = asint(x_10[1].x);
                      i_10 = x_165;
                      while (true) {
                        const int x_170 = i_10;
                        const int x_172 = asint(x_10[0].x);
                        if ((x_170 < x_172)) {
                        } else {
                          break;
                        }
                        const int x_176 = asint(x_10[1].x);
                        i_11 = x_176;
                        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;
                          while (true) {
                            const int x_192 = i_12;
                            const int x_194 = asint(x_10[0].x);
                            if ((x_192 < x_194)) {
                            } else {
                              break;
                            }
                            const int x_198 = asint(x_10[1].x);
                            i_13 = x_198;
                            while (true) {
                              const int x_203 = i_13;
                              const int x_205 = asint(x_10[0].x);
                              if ((x_203 < x_205)) {
                              } else {
                                break;
                              }
                              const int x_209 = asint(x_10[1].x);
                              i_14 = x_209;
                              while (true) {
                                const int x_214 = i_14;
                                const int x_216 = asint(x_10[2].x);
                                if ((x_214 < x_216)) {
                                } else {
                                  break;
                                }
                                while (true) {
                                  const int x_223 = x_GLF_global_loop_count;
                                  x_GLF_global_loop_count = (x_223 + 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)))) { break; }
                                  }
                                }
                                const float x_231 = asfloat(x_7[0].x);
                                const float x_232 = f;
                                f = (x_232 + x_231);
                                {
                                  const int x_234 = i_14;
                                  i_14 = (x_234 + 1);
                                }
                              }
                              {
                                const int x_236 = i_13;
                                i_13 = (x_236 + 1);
                              }
                            }
                            {
                              const int x_238 = i_12;
                              i_12 = (x_238 + 1);
                            }
                          }
                          {
                            const int x_240 = i_11;
                            i_11 = (x_240 + 1);
                          }
                        }
                        {
                          const int x_242 = i_10;
                          i_10 = (x_242 + 1);
                        }
                      }
                      {
                        const int x_244 = i_9;
                        i_9 = (x_244 + 1);
                      }
                    }
                    {
                      const int x_246 = i_8;
                      i_8 = (x_246 + 1);
                    }
                  }
                  {
                    const int x_248 = i_7;
                    i_7 = (x_248 + 1);
                  }
                }
                {
                  const int x_250 = i_6;
                  i_6 = (x_250 + 1);
                }
              }
              {
                const int x_252 = i_5;
                i_5 = (x_252 + 1);
              }
            }
            {
              const int x_254 = i_4;
              i_4 = (x_254 + 1);
            }
          }
          {
            const int x_256 = i_3;
            i_3 = (x_256 + 1);
          }
        }
        {
          const int x_258 = i_2;
          i_2 = (x_258 + 1);
        }
      }
      {
        const int x_260 = i_1;
        i_1 = (x_260 + 1);
      }
    }
    {
      const int x_262 = i;
      i = (x_262 + 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;
  while (true) {
    const int x_272 = x_GLF_global_loop_count;
    if ((x_272 < 100)) {
    } else {
      break;
    }
    const int x_275 = x_GLF_global_loop_count;
    x_GLF_global_loop_count = (x_275 + 1);
    const float x_277 = f;
    const float x_278 = sum;
    sum = (x_278 + x_277);
    {
      const int x_280 = r;
      r = (x_280 + 1);
    }
  }
  const float x_282 = sum;
  const float x_284 = asfloat(x_7[2].x);
  if ((x_282 == x_284)) {
    const int x_290 = asint(x_10[0].x);
    const int x_293 = asint(x_10[1].x);
    const int x_296 = asint(x_10[1].x);
    const int x_299 = asint(x_10[0].x);
    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_1 = {x_GLF_color};
  return tint_symbol_1;
}

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