#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 res = tint_first_trailing_bit(uint2());
}

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

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

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

