diff --git a/rs_bindings_from_cc/BUILD b/rs_bindings_from_cc/BUILD
index 4692df2..357a593 100644
--- a/rs_bindings_from_cc/BUILD
+++ b/rs_bindings_from_cc/BUILD
@@ -363,15 +363,6 @@
     ],
 )
 
-rust_library(
-    name = "salsa_utils",
-    srcs = ["salsa_utils.rs"],
-    deps = [
-        "@crate_index//:proc-macro2",
-        "@crate_index//:quote",
-    ],
-)
-
 cc_library(
     name = "src_code_gen",
     srcs = ["src_code_gen.cc"],
@@ -393,7 +384,6 @@
     srcs = ["src_code_gen.rs"],
     deps = [
         ":ir",
-        ":salsa_utils",
         "//common:arc_anyhow",
         "//common:ffi_types",
         "//common:token_stream_printer",
diff --git a/rs_bindings_from_cc/salsa_utils.rs b/rs_bindings_from_cc/salsa_utils.rs
deleted file mode 100644
index 9b50951..0000000
--- a/rs_bindings_from_cc/salsa_utils.rs
+++ /dev/null
@@ -1,61 +0,0 @@
-// Part of the Crubit project, under the Apache License v2.0 with LLVM
-// Exceptions. See /LICENSE for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-
-//! Copyable, equality-comparable types for Salsa.
-//!
-//! TODO(jeanpierreda): give this module a better name.
-
-use proc_macro2::TokenStream;
-use quote::ToTokens;
-use std::ops::Deref;
-use std::rc::Rc;
-
-/// A wrapper for a smart pointer, which implements `Eq` as pointer equality.
-///
-/// This was directly inspired by Chalk's `ArcEq`, which does the same.
-#[derive(Debug, Default)]
-#[repr(transparent)]
-pub struct RcEq<T>(pub Rc<T>);
-
-impl<T> Clone for RcEq<T> {
-    fn clone(&self) -> Self {
-        Self(Rc::clone(&self.0))
-    }
-}
-
-impl<T> PartialEq<RcEq<T>> for RcEq<T> {
-    fn eq(&self, other: &Self) -> bool {
-        std::ptr::eq(&*self.0, &*other.0)
-    }
-}
-
-impl<T> Eq for RcEq<T> {}
-
-impl<T> Deref for RcEq<T> {
-    type Target = T;
-    fn deref(&self) -> &T {
-        &*self.0
-    }
-}
-
-impl<T> From<T> for RcEq<T> {
-    fn from(x: T) -> Self {
-        RcEq::new(x)
-    }
-}
-
-impl<T> RcEq<T> {
-    pub fn new(x: T) -> Self {
-        RcEq(Rc::new(x))
-    }
-}
-
-impl<T> ToTokens for RcEq<T>
-where
-    T: ToTokens,
-{
-    fn to_tokens(&self, tokens: &mut TokenStream) {
-        self.0.as_ref().to_tokens(tokens)
-    }
-}
diff --git a/rs_bindings_from_cc/src_code_gen.rs b/rs_bindings_from_cc/src_code_gen.rs
index 60e874c..ac8f005 100644
--- a/rs_bindings_from_cc/src_code_gen.rs
+++ b/rs_bindings_from_cc/src_code_gen.rs
@@ -9,7 +9,6 @@
 use once_cell::sync::Lazy;
 use proc_macro2::{Ident, Literal, TokenStream};
 use quote::{format_ident, quote, ToTokens};
-use salsa_utils::RcEq;
 use std::collections::{BTreeSet, HashMap, HashSet};
 use std::ffi::{OsStr, OsString};
 use std::fmt::Write as _;
@@ -88,7 +87,7 @@
     fn generate_func(
         &self,
         func: Rc<Func>,
-    ) -> Result<Option<RcEq<(RsSnippet, RsSnippet, Rc<FunctionId>)>>>;
+    ) -> Result<Option<Rc<(RsSnippet, RsSnippet, Rc<FunctionId>)>>>;
 
     fn overloaded_funcs(&self) -> Rc<HashSet<Rc<FunctionId>>>;
 }
@@ -183,6 +182,32 @@
     }
 }
 
+impl Eq for RsSnippet {}
+
+impl PartialEq for RsSnippet {
+    fn eq(&self, other: &Self) -> bool {
+        fn to_comparable_tuple(_x: &RsSnippet) -> (&BTreeSet<Ident>, String) {
+            // TokenStream doesn't implement `PartialEq`, so we convert to an equivalent
+            // `String`. This is a bit expensive, but should be okay (especially
+            // given that this code doesn't execute at this point).  Having a
+            // working `impl PartialEq` helps `salsa` reuse unchanged memoized
+            // results of previous computations (although this is a bit
+            // theoretical, since right now we don't re-set `salsa`'s inputs  - we only call
+            // `set_ir` once).
+            //
+            // TODO(lukasza): If incremental `salsa` computations are ever used in the
+            // future, we may end up hitting the `panic!` below.  At that point
+            // it should be okay to just remove the `panic!`, but we should also
+            // 1) think about improving performance of comparing `TokenStream`
+            // for equality and 2) add unit tests covering this `PartialEq` `impl`.
+            panic!("This code is not expected to execute in practice");
+            #[allow(unreachable_code)]
+            (&_x.features, _x.tokens.to_string())
+        }
+        to_comparable_tuple(self) == to_comparable_tuple(other)
+    }
+}
+
 /// If we know the original C++ function is codegenned and already compatible
 /// with `extern "C"` calling convention we skip creating/calling the C++ thunk
 /// since we can call the original C++ directly.
@@ -983,7 +1008,7 @@
 fn generate_func(
     db: &dyn BindingsGenerator,
     func: Rc<Func>,
-) -> Result<Option<RcEq<(RsSnippet, RsSnippet, Rc<FunctionId>)>>> {
+) -> Result<Option<Rc<(RsSnippet, RsSnippet, Rc<FunctionId>)>>> {
     let ir = db.ir();
     let mut features = BTreeSet::new();
     let mut param_types = func
@@ -1240,7 +1265,7 @@
         }
     }
 
-    Ok(Some(RcEq::new((
+    Ok(Some(Rc::new((
         RsSnippet { features, tokens: api_func },
         thunk.into(),
         Rc::new(function_id),
