type RTArr = [[stride(4)]] array<f32>;

type RTArr_1 = [[stride(4)]] array<f32>;

[[block]]
struct ssbOut {
  result : RTArr_1;
};

[[block]]
struct ssbA {
  A : RTArr_1;
};

[[block]]
struct Uniforms {
  NAN : f32;
  aShape : i32;
  outShape : i32;
  outShapeStrides : i32;
  size : i32;
};

[[group(0), binding(0)]] var<storage, read_write> x_16 : ssbOut;

[[group(0), binding(1)]] var<storage, read> x_20 : ssbA;

var<private> gl_GlobalInvocationID : vec3<u32>;

[[group(0), binding(2)]] var<uniform> x_24 : Uniforms;

fn getAAtOutCoords_() -> f32 {
  let x_42 : u32 = gl_GlobalInvocationID.x;
  let x_44 : f32 = x_20.A[x_42];
  return x_44;
}

fn unaryOperation_f1_(a : ptr<function, f32>) -> f32 {
  let x_47 : f32 = *(a);
  if ((x_47 < 0.0)) {
    return 0x1p+128;
  }
  let x_55 : f32 = *(a);
  return log(x_55);
}

fn setOutput_i1_f1_(flatIndex : ptr<function, i32>, value : ptr<function, f32>) {
  let x_27 : i32 = *(flatIndex);
  let x_28 : f32 = *(value);
  x_16.result[x_27] = x_28;
  return;
}

fn main_1() {
  var index : i32;
  var a_1 : f32;
  var param : f32;
  var param_1 : i32;
  var param_2 : f32;
  let x_61 : u32 = gl_GlobalInvocationID.x;
  index = bitcast<i32>(x_61);
  let x_63 : i32 = index;
  let x_70 : i32 = x_24.size;
  if ((x_63 < x_70)) {
    let x_75 : f32 = getAAtOutCoords_();
    a_1 = x_75;
    let x_77 : f32 = a_1;
    param = x_77;
    let x_78 : f32 = unaryOperation_f1_(&(param));
    let x_80 : i32 = index;
    param_1 = x_80;
    param_2 = x_78;
    setOutput_i1_f1_(&(param_1), &(param_2));
  }
  return;
}

[[stage(compute), workgroup_size(128, 1, 1)]]
fn main([[builtin(global_invocation_id)]] gl_GlobalInvocationID_param : vec3<u32>) {
  gl_GlobalInvocationID = gl_GlobalInvocationID_param;
  main_1();
}