SKIP: FAILED

cbuffer cbuffer_x_5 : register(b0, space0) {
  uint4 x_5[1];
};
static float4 x_GLF_color = float4(0.0f, 0.0f, 0.0f, 0.0f);

void main_1() {
  bool x_36 = false;
  bool x_37 = false;
  int x_7 = 0;
  bool x_38 = false;
  float3 color = float3(0.0f, 0.0f, 0.0f);
  bool x_40 = false;
  float3 x_43 = float3(0.0f, 0.0f, 0.0f);
  bool x_40_phi = false;
  float3 x_42_phi = float3(0.0f, 0.0f, 0.0f);
  bool x_56_phi = false;
  bool x_58_phi = false;
  x_40_phi = false;
  x_42_phi = float3(0.0f, 0.0f, 0.0f);
  while (true) {
    float3 x_43_phi = float3(0.0f, 0.0f, 0.0f);
    x_40 = x_40_phi;
    const float3 x_42 = x_42_phi;
    const float x_47 = asfloat(x_5[0].y);
    x_43_phi = x_42;
    if ((x_47 < 0.0f)) {
      color = float3(1.0f, 1.0f, 1.0f);
      x_43_phi = float3(1.0f, 1.0f, 1.0f);
    }
    x_43 = x_43_phi;
    {
      x_40_phi = x_40;
      x_42_phi = x_43;
      if (false) {
      } else {
        break;
      }
    }
  }
  x_36 = false;
  x_56_phi = x_40;
  x_58_phi = false;
  while (true) {
    bool x_62 = false;
    bool x_62_phi = false;
    bool x_64_phi = false;
    int x_65_phi = 0;
    bool x_70_phi = false;
    bool x_71_phi = false;
    const bool x_56 = x_56_phi;
    const bool x_58 = x_58_phi;
    x_7 = 0;
    x_62_phi = x_56;
    x_64_phi = false;
    x_65_phi = 0;
    while (true) {
      x_62 = x_62_phi;
      const bool x_64 = x_64_phi;
      const int x_65 = x_65_phi;
      const bool x_68 = (0 < 1);
      x_70_phi = x_62;
      x_71_phi = false;
      if (true) {
      } else {
        break;
      }
      x_36 = true;
      x_37 = true;
      x_70_phi = true;
      x_71_phi = true;
      break;
      {
        x_62_phi = false;
        x_64_phi = false;
        x_65_phi = 0;
      }
    }
    const bool x_70 = x_70_phi;
    const bool x_71 = x_71_phi;
    if (true) {
      break;
    }
    x_36 = true;
    break;
    {
      x_56_phi = false;
      x_58_phi = false;
    }
  }
  x_38 = true;
  const float x_73 = (true ? 1.0f : 0.0f);
  x_GLF_color = (float4(x_43.x, x_43.y, x_43.z, 1.0f) + float4(x_73, x_73, x_73, x_73));
  x_GLF_color = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

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

tint_symbol main() {
  main_1();
  const main_out tint_symbol_1 = {x_GLF_color};
  const tint_symbol tint_symbol_3 = {tint_symbol_1.x_GLF_color_1};
  return tint_symbol_3;
}

