#include <metal_stdlib>
using namespace metal;

struct tint_module_vars_struct {
  device half4* prevent_dce;
};

half4 subgroupShuffleUp_0990cd() {
  half4 res = simd_shuffle_up(half4(1.0h), 1u);
  return res;
}

fragment void fragment_main(device half4* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  (*tint_module_vars.prevent_dce) = subgroupShuffleUp_0990cd();
}

kernel void compute_main(device half4* prevent_dce [[buffer(0)]]) {
  tint_module_vars_struct const tint_module_vars = tint_module_vars_struct{.prevent_dce=prevent_dce};
  (*tint_module_vars.prevent_dce) = subgroupShuffleUp_0990cd();
}
