//
// fragment_main
//
#include <metal_stdlib>
using namespace metal;

void select_089657() {
  bool arg_2 = true;
  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
}

fragment void fragment_main() {
  select_089657();
}
//
// compute_main
//
#include <metal_stdlib>
using namespace metal;

void select_089657() {
  bool arg_2 = true;
  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
}

kernel void compute_main() {
  select_089657();
}
//
// vertex_main
//
#include <metal_stdlib>
using namespace metal;

struct VertexOutput {
  float4 pos;
};

struct vertex_main_outputs {
  float4 VertexOutput_pos [[position]];
};

void select_089657() {
  bool arg_2 = true;
  float3 res = select(float3(1.0f), float3(1.0f), arg_2);
}

VertexOutput vertex_main_inner() {
  VertexOutput out = {};
  out.pos = float4(0.0f);
  select_089657();
  return out;
}

vertex vertex_main_outputs vertex_main() {
  vertex_main_outputs tint_wrapper_result = {};
  tint_wrapper_result.VertexOutput_pos = vertex_main_inner().pos;
  return tint_wrapper_result;
}
