diff --git a/internal/ceres/autodiff_benchmarks/CMakeLists.txt b/internal/ceres/autodiff_benchmarks/CMakeLists.txt
index 454e04b..06b3cf6 100644
--- a/internal/ceres/autodiff_benchmarks/CMakeLists.txt
+++ b/internal/ceres/autodiff_benchmarks/CMakeLists.txt
@@ -1,8 +1,4 @@
 # TODO: Add support for other compilers
-if(CODE_GENERATION)
-  list(APPEND CERES_BENCHMARK_FLAGS "-DWITH_CODE_GENERATION")
-endif()
-
 if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
   list(APPEND CERES_BENCHMARK_FLAGS "-mllvm" "-inline-threshold=1000000")
 endif()
@@ -16,23 +12,3 @@
 add_executable(autodiff_benchmarks_fast_math autodiff_benchmarks.cc)
 add_dependencies_to_benchmark(autodiff_benchmarks_fast_math)
 target_compile_options(autodiff_benchmarks_fast_math PRIVATE ${CERES_BENCHMARK_FAST_MATH_FLAGS})
-
-if(CODE_GENERATION)
-  macro (generate_benchmark_functor FUNCTOR_NAME FUNCTOR_FILE)
-    ceres_generate_cost_function_implementation_for_functor(
-      NAME ${FUNCTOR_NAME}
-      INPUT_FILE ${FUNCTOR_FILE}
-      OUTPUT_DIRECTORY benchmarks
-      NAMESPACE ceres
-      )
-  endmacro()
-  include(CeresCodeGeneration)
-
-  generate_benchmark_functor(SnavelyReprojectionError snavely_reprojection_error.h)
-  generate_benchmark_functor(Linear1CostFunction linear_cost_functions.h)
-  generate_benchmark_functor(Linear10CostFunction linear_cost_functions.h)
-  generate_benchmark_functor(Brdf brdf_cost_function.h)
-
-  target_link_libraries(autodiff_benchmarks PUBLIC SnavelyReprojectionError Linear1CostFunction Linear10CostFunction Brdf)
-  target_link_libraries(autodiff_benchmarks_fast_math PUBLIC SnavelyReprojectionError Linear1CostFunction Linear10CostFunction Brdf)
-endif()
diff --git a/internal/ceres/autodiff_benchmarks/autodiff_benchmarks.cc b/internal/ceres/autodiff_benchmarks/autodiff_benchmarks.cc
index 38b3632..cf2d558 100644
--- a/internal/ceres/autodiff_benchmarks/autodiff_benchmarks.cc
+++ b/internal/ceres/autodiff_benchmarks/autodiff_benchmarks.cc
@@ -101,25 +101,6 @@
 BENCHMARK_TEMPLATE(BM_ConstantAnalytic, 60);
 BENCHMARK_TEMPLATE(BM_ConstantAutodiff, 60);
 
-#ifdef WITH_CODE_GENERATION
-static void BM_Linear1CodeGen(benchmark::State& state) {
-  double parameter_block1[] = {1.};
-  double* parameters[] = {parameter_block1};
-
-  double jacobian1[1];
-  double residuals[1];
-  double* jacobians[] = {jacobian1};
-
-  std::unique_ptr<ceres::CostFunction> cost_function(new Linear1CostFunction());
-
-  for (auto _ : state) {
-    cost_function->Evaluate(
-        parameters, residuals, state.range(0) ? jacobians : nullptr);
-  }
-}
-BENCHMARK(BM_Linear1CodeGen)->Arg(0)->Arg(1);
-#endif
-
 static void BM_Linear1AutoDiff(benchmark::State& state) {
   using FunctorType =
       ceres::internal::CostFunctionToFunctor<Linear1CostFunction>;
@@ -141,26 +122,6 @@
 }
 BENCHMARK(BM_Linear1AutoDiff)->Arg(0)->Arg(1);
 
-#ifdef WITH_CODE_GENERATION
-static void BM_Linear10CodeGen(benchmark::State& state) {
-  double parameter_block1[] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.};
-  double* parameters[] = {parameter_block1};
-
-  double jacobian1[10 * 10];
-  double residuals[10];
-  double* jacobians[] = {jacobian1};
-
-  std::unique_ptr<ceres::CostFunction> cost_function(
-      new Linear10CostFunction());
-
-  for (auto _ : state) {
-    cost_function->Evaluate(
-        parameters, residuals, state.range(0) ? jacobians : nullptr);
-  }
-}
-BENCHMARK(BM_Linear10CodeGen)->Arg(0)->Arg(1);
-#endif
-
 static void BM_Linear10AutoDiff(benchmark::State& state) {
   using FunctorType =
       ceres::internal::CostFunctionToFunctor<Linear10CostFunction>;
@@ -221,31 +182,6 @@
 }
 BENCHMARK(BM_Rat43AutoDiff)->Arg(0)->Arg(1);
 
-#ifdef WITH_CODE_GENERATION
-static void BM_SnavelyReprojectionCodeGen(benchmark::State& state) {
-  double parameter_block1[] = {1., 2., 3., 4., 5., 6., 7., 8., 9.};
-  double parameter_block2[] = {1., 2., 3.};
-  double* parameters[] = {parameter_block1, parameter_block2};
-
-  double jacobian1[2 * 9];
-  double jacobian2[2 * 3];
-  double residuals[2];
-  double* jacobians[] = {jacobian1, jacobian2};
-
-  const double x = 0.2;
-  const double y = 0.3;
-
-  std::unique_ptr<ceres::CostFunction> cost_function(
-      new SnavelyReprojectionError(x, y));
-
-  for (auto _ : state) {
-    cost_function->Evaluate(
-        parameters, residuals, state.range(0) ? jacobians : nullptr);
-  }
-}
-BENCHMARK(BM_SnavelyReprojectionCodeGen)->Arg(0)->Arg(1);
-#endif
-
 static void BM_SnavelyReprojectionAutoDiff(benchmark::State& state) {
   using FunctorType =
       ceres::internal::CostFunctionToFunctor<SnavelyReprojectionError>;
@@ -367,44 +303,6 @@
 
 BENCHMARK(BM_RelativePoseAutoDiff)->Arg(0)->Arg(1);
 
-#ifdef WITH_CODE_GENERATION
-static void BM_BrdfCodeGen(benchmark::State& state) {
-  using FunctorType = ceres::internal::CostFunctionToFunctor<Brdf>;
-
-  double material[] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.};
-  auto c = Eigen::Vector3d(0.1, 0.2, 0.3);
-  auto n = Eigen::Vector3d(-0.1, 0.5, 0.2).normalized();
-  auto v = Eigen::Vector3d(0.5, -0.2, 0.9).normalized();
-  auto l = Eigen::Vector3d(-0.3, 0.4, -0.3).normalized();
-  auto x = Eigen::Vector3d(0.5, 0.7, -0.1).normalized();
-  auto y = Eigen::Vector3d(0.2, -0.2, -0.2).normalized();
-
-  double* parameters[7] = {
-      material, c.data(), n.data(), v.data(), l.data(), x.data(), y.data()};
-
-  double jacobian[(10 + 6 * 3) * 3];
-  double residuals[3];
-  double* jacobians[7] = {
-      jacobian + 0,
-      jacobian + 10 * 3,
-      jacobian + 13 * 3,
-      jacobian + 16 * 3,
-      jacobian + 19 * 3,
-      jacobian + 22 * 3,
-      jacobian + 25 * 3,
-  };
-
-  std::unique_ptr<ceres::CostFunction> cost_function(new Brdf());
-
-  for (auto _ : state) {
-    cost_function->Evaluate(
-        parameters, residuals, state.range(0) ? jacobians : nullptr);
-  }
-}
-
-BENCHMARK(BM_BrdfCodeGen)->Arg(0)->Arg(1);
-#endif
-
 static void BM_BrdfAutoDiff(benchmark::State& state) {
   using FunctorType = ceres::internal::CostFunctionToFunctor<Brdf>;
 
diff --git a/internal/ceres/autodiff_benchmarks/brdf_cost_function.h b/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
index de69cdd..4134181 100644
--- a/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
+++ b/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
@@ -35,7 +35,6 @@
 #include <Eigen/Core>
 #include <cmath>
 
-#include "ceres/codegen/codegen_cost_function.h"
 namespace ceres {
 
 // The brdf is based on:
@@ -44,7 +43,7 @@
 //
 // The implementation is based on:
 // https://github.com/wdas/brdf/blob/master/src/brdfs/disney.brdf
-struct Brdf : public ceres::CodegenCostFunction<3, 10, 3, 3, 3, 3, 3, 3> {
+struct Brdf {
  public:
   Brdf() {}
 
@@ -57,7 +56,6 @@
                   const T* const x_ptr,
                   const T* const y_ptr,
                   T* residual) const {
-    using ceres::Ternary;
     using Vec3 = Eigen::Matrix<T, 3, 1>;
 
     T metallic = material[0];
@@ -121,8 +119,8 @@
     const T aspct = Aspect(anisotropic);
     const T ax_temp = Square(roughness) / aspct;
     const T ay_temp = Square(roughness) * aspct;
-    const T ax = Ternary(ax_temp < eps, eps, ax_temp);
-    const T ay = Ternary(ay_temp < eps, eps, ay_temp);
+    const T ax = (ax_temp < eps ? eps : ax_temp);
+    const T ay = (ay_temp < eps ? eps : ay_temp);
     const T ds = GTR2Aniso(n_dot_h, h_dot_x, h_dot_y, ax, ay);
     const T fh = SchlickFresnel(l_dot_h);
     const Vec3 fs = Lerp(c_spec0, Vec3(T(1), T(1), T(1)), fh);
@@ -180,13 +178,13 @@
   T GTR1(const T& n_dot_h, const T& a) const {
     T result = T(0);
 
-    CERES_IF(a >= T(1)) { result = T(1 / M_PI); }
-    CERES_ELSE {
+    if (a >= T(1)) {
+      result = T(1 / M_PI);
+    } else {
       const T a2 = a * a;
       const T t = T(1) + (a2 - T(1)) * n_dot_h * n_dot_h;
       result = (a2 - T(1)) / (T(M_PI) * T(log(a2) * t));
     }
-    CERES_ENDIF;
     return result;
   }
 
@@ -217,16 +215,6 @@
   inline T Square(const T& x) const {
     return x * x;
   }
-
-#ifdef WITH_CODE_GENERATION
-#include "benchmarks/brdf.h"
-#else
-  virtual bool Evaluate(double const* const* parameters,
-                        double* residuals,
-                        double** jacobians) const {
-    return false;
-  }
-#endif
 };
 
 }  // namespace ceres
diff --git a/internal/ceres/autodiff_benchmarks/linear_cost_functions.h b/internal/ceres/autodiff_benchmarks/linear_cost_functions.h
index e009ee2..4ead04a 100644
--- a/internal/ceres/autodiff_benchmarks/linear_cost_functions.h
+++ b/internal/ceres/autodiff_benchmarks/linear_cost_functions.h
@@ -32,29 +32,19 @@
 #ifndef CERES_INTERNAL_AUTODIFF_BENCHMARKS_LINEAR_COST_FUNCTIONS_H_
 #define CERES_INTERNAL_AUTODIFF_BENCHMARKS_LINEAR_COST_FUNCTIONS_H_
 
-#include "ceres/codegen/codegen_cost_function.h"
 #include "ceres/rotation.h"
 
 namespace ceres {
 
-struct Linear1CostFunction : public ceres::CodegenCostFunction<1, 1> {
+struct Linear1CostFunction {
   template <typename T>
   bool operator()(const T* const x, T* residuals) const {
     residuals[0] = x[0] + T(10);
     return true;
   }
-#ifdef WITH_CODE_GENERATION
-#include "benchmarks/linear1costfunction.h"
-#else
-  virtual bool Evaluate(double const* const* parameters,
-                        double* residuals,
-                        double** jacobians) const {
-    return false;
-  }
-#endif
 };
 
-struct Linear10CostFunction : public ceres::CodegenCostFunction<10, 10> {
+struct Linear10CostFunction {
   template <typename T>
   bool operator()(const T* const x, T* residuals) const {
     for (int i = 0; i < 10; ++i) {
@@ -62,15 +52,6 @@
     }
     return true;
   }
-#ifdef WITH_CODE_GENERATION
-#include "benchmarks/linear10costfunction.h"
-#else
-  virtual bool Evaluate(double const* const* parameters,
-                        double* residuals,
-                        double** jacobians) const {
-    return false;
-  }
-#endif
 };
 }  // namespace ceres
 
diff --git a/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h b/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h
index aa86fd7..b1b5081 100644
--- a/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h
+++ b/internal/ceres/autodiff_benchmarks/snavely_reprojection_error.h
@@ -32,12 +32,11 @@
 #ifndef CERES_INTERNAL_AUTODIFF_BENCHMARK_SNAVELY_REPROJECTION_ERROR_H_
 #define CERES_INTERNAL_AUTODIFF_BENCHMARK_SNAVELY_REPROJECTION_ERROR_H_
 
-#include "ceres/codegen/codegen_cost_function.h"
 #include "ceres/rotation.h"
 
 namespace ceres {
 
-struct SnavelyReprojectionError : public ceres::CodegenCostFunction<2, 9, 3> {
+struct SnavelyReprojectionError  {
   SnavelyReprojectionError(double observed_x, double observed_y)
       : observed_x(observed_x), observed_y(observed_y) {}
 
@@ -81,15 +80,6 @@
 
     return true;
   }
-#ifdef WITH_CODE_GENERATION
-#include "benchmarks/snavelyreprojectionerror.h"
-#else
-  virtual bool Evaluate(double const* const* parameters,
-                        double* residuals,
-                        double** jacobians) const {
-    return false;
-  }
-#endif
   double observed_x;
   double observed_y;
 };
