#include <metal_stdlib>

using namespace metal;
uint2 tint_first_trailing_bit(uint2 v) {
  uint2 x = uint2(v);
  uint2 const b16 = select(uint2(16u), uint2(0u), bool2((x & uint2(65535u))));
  x = (x >> b16);
  uint2 const b8 = select(uint2(8u), uint2(0u), bool2((x & uint2(255u))));
  x = (x >> b8);
  uint2 const b4 = select(uint2(4u), uint2(0u), bool2((x & uint2(15u))));
  x = (x >> b4);
  uint2 const b2 = select(uint2(2u), uint2(0u), bool2((x & uint2(3u))));
  x = (x >> b2);
  uint2 const b1 = select(uint2(1u), uint2(0u), bool2((x & uint2(1u))));
  uint2 const is_zero = select(uint2(0u), uint2(4294967295u), (x == uint2(0u)));
  return uint2((((((b16 | b8) | b4) | b2) | b1) | is_zero));
}

void firstTrailingBit_45eb10() {
  uint2 arg_0 = uint2(1u);
  uint2 res = tint_first_trailing_bit(arg_0);
}

struct tint_symbol {
  float4 value [[position]];
};

float4 vertex_main_inner() {
  firstTrailingBit_45eb10();
  return float4(0.0f);
}

vertex tint_symbol vertex_main() {
  float4 const inner_result = vertex_main_inner();
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main() {
  firstTrailingBit_45eb10();
  return;
}

kernel void compute_main() {
  firstTrailingBit_45eb10();
  return;
}

