#include <metal_stdlib>
using namespace metal;
struct tint_module_vars_struct {
  device uint2* prevent_dce;
};
struct vertex_main_outputs {
  float4 tint_symbol [[position]];
};

void countLeadingZeros_70783f(tint_module_vars_struct tint_module_vars) {
  uint2 arg_0 = uint2(1u);
  uint2 res = clz(arg_0);
  (*tint_module_vars.prevent_dce) = res;
}
float4 vertex_main_inner(tint_module_vars_struct tint_module_vars) {
  countLeadingZeros_70783f(tint_module_vars);
  return float4(0.0f);
}
fragment void fragment_main(device uint2* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  countLeadingZeros_70783f(tint_module_vars);
}
kernel void compute_main(device uint2* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  countLeadingZeros_70783f(tint_module_vars);
}
vertex vertex_main_outputs vertex_main(device uint2* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  return vertex_main_outputs{.tint_symbol=vertex_main_inner(tint_module_vars)};
}
