fn test(x : prod(i32, f32), b: bool) -> prod(i32, f32)
  zero = constant(u64, 0)
  one = constant(i32, 1)
  two = constant(u64, 2)
  three = constant(f32, 3.0)

  f_ctrl = fork(start, 10)
  idx = thread_id(f_ctrl, 0)
  
  mod2 = rem(idx, two)
  is_even = eq(mod2, zero)
  field0 = read(res, field(0))
  field1 = read(res, field(1))
  add = add(field0, one)
  mul = mul(field1, three)
  upd0 = write(res, add, field(0))
  upd1 = write(res, mul, field(1))
  select = select(is_even, upd0, upd1)
  
  j_ctrl = join(f_ctrl)
  res = reduce(j_ctrl, x, select)

  r = return(j_ctrl, res)