unsafe fn merge_values(
        &mut self,
        builder: LLVMBuilderRef,
        merge_ty: &Type,
        binop: BinOpKind,
        builder_value_pointer: LLVMValueRef,
        merge_value_pointer: LLVMValueRef,
    ) -> WeldResult<()> {
        match *merge_ty {
            Scalar(_) => {
                let merge_value = self.load(builder, merge_value_pointer)?;
                let builder_value = self.load(builder, builder_value_pointer)?;
                let merged =
                    numeric::gen_binop(builder, binop, builder_value, merge_value, merge_ty)?;
                LLVMBuildStore(builder, merged, builder_value_pointer);
            }
            Struct(ref elems) => {
                for (i, elem) in elems.iter().enumerate() {
                    let builder_elem_pointer =
                        LLVMBuildStructGEP(builder, builder_value_pointer, i as u32, c_str!(""));
                    let builder_value = self.load(builder, builder_elem_pointer)?;
                    let merge_elem_pointer =
                        LLVMBuildStructGEP(builder, merge_value_pointer, i as u32, c_str!(""));
                    let merge_value = self.load(builder, merge_elem_pointer)?;
                    let merged =
                        numeric::gen_binop(builder, binop, builder_value, merge_value, elem)?;
                    LLVMBuildStore(builder, merged, builder_elem_pointer);
                }
            }
            _ => unreachable!(),
        };
        Ok(())
    }
Merges two pointer values using the provided binary operator.

Specifically, performs `*builder_value = *builder_value <binop> *merge_value`
weld/src/codegen/llvm2/builder/mod.rs