diff --git a/doc/reference.rst b/doc/reference.rst
index 9aa9727cdd1253d0834e006149bf99db186172cc..52cd92bb8812565e71ba4cedf1826bf64633f247 100644
--- a/doc/reference.rst
+++ b/doc/reference.rst
@@ -430,6 +430,8 @@ Influencing data access
 
 .. autofunction:: tag_data_axes
 
+.. autofunction:: remove_unused_arguments
+
 Padding
 ^^^^^^^
 
diff --git a/loopy/__init__.py b/loopy/__init__.py
index 77da1e40ec9b66df15aa6bfe32eb31ad99a45358..10fac9cfce3eb5a9a1bb6686fabf453ec6b83a8d 100644
--- a/loopy/__init__.py
+++ b/loopy/__init__.py
@@ -2090,4 +2090,22 @@ def to_batched(knl, nbatches, batch_varying_args, batch_iname_prefix="ibatch"):
 
 # }}}
 
+
+# {{{ remove_unused_arguments
+
+def remove_unused_arguments(knl):
+    new_args = []
+
+    refd_vars = set(knl.all_params())
+    for insn in knl.instructions:
+        refd_vars.update(insn.dependency_names())
+
+    for arg in knl.args:
+        if arg.name in refd_vars:
+            new_args.append(arg)
+
+    return knl.copy(args=new_args)
+
+# }}}
+
 # vim: foldmethod=marker