#include <metal_stdlib>

using namespace metal;
int2 tint_sign(int2 v) {
  return select(select(int2(-1), int2(1), (v > int2(0))), int2(0), (v == int2(0)));
}

void sign_926015(device int2* const tint_symbol_1) {
  int2 arg_0 = int2(1);
  int2 res = tint_sign(arg_0);
  *(tint_symbol_1) = res;
}

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

float4 vertex_main_inner(device int2* const tint_symbol_2) {
  sign_926015(tint_symbol_2);
  return float4(0.0f);
}

vertex tint_symbol vertex_main(device int2* tint_symbol_3 [[buffer(0)]]) {
  float4 const inner_result = vertex_main_inner(tint_symbol_3);
  tint_symbol wrapper_result = {};
  wrapper_result.value = inner_result;
  return wrapper_result;
}

fragment void fragment_main(device int2* tint_symbol_4 [[buffer(0)]]) {
  sign_926015(tint_symbol_4);
  return;
}

kernel void compute_main(device int2* tint_symbol_5 [[buffer(0)]]) {
  sign_926015(tint_symbol_5);
  return;
}

