diff --git a/loopy/preprocess.py b/loopy/preprocess.py
index 8172051cc9184d31bf5f78698e7803a52079bfab..ced1aaaa13ed8275c1e3a376d1c24895287b3239 100644
--- a/loopy/preprocess.py
+++ b/loopy/preprocess.py
@@ -749,9 +749,6 @@ def _hackily_ensure_multi_assignment_return_values_are_scoped_private(kernel):
 
     # }}}
 
-    from loopy.type_inference import TypeInferenceMapper
-    type_inf_mapper = TypeInferenceMapper(kernel)
-
     from loopy.kernel.instruction import CallInstruction
     for insn in kernel.instructions:
         if not isinstance(insn, CallInstruction):
@@ -773,24 +770,6 @@ def _hackily_ensure_multi_assignment_return_values_are_scoped_private(kernel):
 
         FIRST_POINTER_ASSIGNEE_IDX = 1  # noqa
 
-        param_dtypes = tuple(type_inf_mapper(param)
-                for param in insn.expression.parameters)
-
-        func_id = insn.expression.function
-
-        from pymbolic.primitives import Variable
-        if isinstance(func_id, Variable):
-            func_id = func_id.name
-
-        mangle_result = kernel.mangle_function(func_id, param_dtypes)
-
-        if mangle_result.target_name == "loopy_make_tuple":
-            # Skip loopy_make_tuple. This is lowered without a function call.
-            continue
-
-        assignee_dtypes, = type_inf_mapper(
-                insn.expression, return_tuple=True, return_dtype_set=True)
-
         for assignee_nr, assignee_var_name, assignee in zip(
                 range(FIRST_POINTER_ASSIGNEE_IDX, len(assignees)),
                 assignee_var_names[FIRST_POINTER_ASSIGNEE_IDX:],
@@ -818,11 +797,11 @@ def _hackily_ensure_multi_assignment_return_values_are_scoped_private(kernel):
 
             newly_added_assignments_ids.add(new_assignment_id)
 
+            import loopy as lp
             new_temporaries[new_assignee_name] = (
                     TemporaryVariable(
                         name=new_assignee_name,
-                        dtype=assignee_dtypes[assignee_nr].with_target(
-                            kernel.target),
+                        dtype=lp.auto,
                         scope=temp_var_scope.PRIVATE))
 
             from pymbolic import var
@@ -1001,19 +980,12 @@ def realize_reduction(kernel, insn_id_filter=None, unknown_types_ok=True,
                 var_name_gen(id + "_arg" + str(i))
                 for i in range(nresults)]
 
-        from loopy.type_inference import (
-                infer_arg_and_reduction_dtypes_for_reduction_expression)
-
-        _, reduction_dtypes = (
-                infer_arg_and_reduction_dtypes_for_reduction_expression(
-                    temp_kernel, expr, unknown_types_ok=False))
-
-        for name, dtype in zip(temp_var_names, reduction_dtypes):
+        for name in temp_var_names:
             from loopy.kernel.data import TemporaryVariable, temp_var_scope
             new_temporary_variables[name] = TemporaryVariable(
                     name=name,
                     shape=(),
-                    dtype=dtype,
+                    dtype=lp.auto,
                     scope=temp_var_scope.PRIVATE)
 
         from pymbolic import var