#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  threadgroup int* a;
  threadgroup float4* b;
  threadgroup float2x2* c;
};

int tint_div_i32(int lhs, int rhs) {
  return (lhs / select(rhs, 1, ((rhs == 0) | ((lhs == (-2147483647 - 1)) & (rhs == -1)))));
}

void foo(tint_module_vars_struct tint_module_vars) {
  (*tint_module_vars.a) = tint_div_i32((*tint_module_vars.a), 2);
  (*tint_module_vars.b) = ((*tint_module_vars.b) * float4x4(float4(0.0f), float4(0.0f), float4(0.0f), float4(0.0f)));
  (*tint_module_vars.c) = ((*tint_module_vars.c) * 2.0f);
}
