diff --git a/cmd/bench/gotest.go b/cmd/bench/gotest.go
index 4044b6b..25cfe65 100644
--- a/cmd/bench/gotest.go
+++ b/cmd/bench/gotest.go
@@ -13,10 +13,30 @@
 	for _, tc := range tcs {
 		log.Printf("Running Go test benchmarks for %s", tc.Name)
 		fmt.Printf("toolchain: %s\n", tc.Name)
-		err := tc.Do("test", "-v", "-run=none", "-bench=.", "-count=5", "golang.org/x/benchmarks/...")
+		err := tc.Do("", "test", "-v", "-run=none", "-bench=.", "-count=5", "golang.org/x/benchmarks/...")
 		if err != nil {
 			return fmt.Errorf("error running gotest with toolchain %s: %w", tc.Name, err)
 		}
 	}
 	return nil
 }
+
+func goTestSubrepo(tc *toolchain, subRepo string, dirs []string) error {
+	switch subRepo {
+	case "tools":
+		log.Printf("Running sub-repo benchmarks for %s", subRepo)
+		fmt.Printf("toolchain: %s\n", tc.Name)
+
+		for _, dir := range dirs {
+			err := tc.Do(dir, "test", "-v", "-bench=.", "./gopls/internal/regtest/bench/", "-count=5")
+			if err != nil {
+				log.Printf("Error: %v", err)
+				return fmt.Errorf("error running sub-repo %s benchmark with toolchain %s in dir %s: %w", subRepo, tc.Name, dir, err)
+			}
+		}
+	default:
+		return fmt.Errorf("unsupported subrepo %s", subRepo)
+	}
+
+	return nil
+}
diff --git a/cmd/bench/main.go b/cmd/bench/main.go
index 6469b57..ae634b0 100644
--- a/cmd/bench/main.go
+++ b/cmd/bench/main.go
@@ -23,11 +23,13 @@
 )
 
 var (
-	wait             = flag.Bool("wait", true, "wait for system idle before starting benchmarking")
-	gorootExperiment = flag.String("goroot", "", "GOROOT to test (default $GOROOT or 'go env GOROOT')")
-	gorootBaseline   = flag.String("goroot-baseline", "", "baseline GOROOT to test against (optional) (default $BENCH_BASELINE_GOROOT)")
-	branch           = flag.String("branch", "", "branch of the commits we're testing against (default $BENCH_BRANCH or unknown)")
-	repository       = flag.String("repository", "", "repository name of the commits we're testing against (default $BENCH_REPOSITORY or 'go')")
+	wait              = flag.Bool("wait", true, "wait for system idle before starting benchmarking")
+	gorootExperiment  = flag.String("goroot", "", "GOROOT to test (default $GOROOT or 'go env GOROOT')")
+	gorootBaseline    = flag.String("goroot-baseline", "", "baseline GOROOT to test against (optional) (default $BENCH_BASELINE_GOROOT)")
+	branch            = flag.String("branch", "", "branch of the commits we're testing against (default $BENCH_BRANCH or unknown)")
+	repository        = flag.String("repository", "", "repository name of the commits we're testing against (default $BENCH_REPOSITORY or 'go')")
+	subRepoExperiment = flag.String("subrepo", "", "Sub-repo dir to test (default $BENCH_SUBREPO_PATH)")
+	subRepoBaseline   = flag.String("subrepo-baseline", "", "Sub-repo baseline to test against (default $BENCH_SUBREPO_BASELINE_PATH)")
 )
 
 func determineGOROOT() (string, error) {
@@ -141,11 +143,24 @@
 	}
 	fmt.Printf("branch: %s\n", branch)
 
-	if repository != "go" {
-		// TODO(go.dev/issue/53538): Support other repositories.
-		log.Fatalf("Unknown repository %q", repository)
+	subRepoExperiment := *subRepoExperiment
+	if subRepoExperiment == "" {
+		subRepoExperiment = os.Getenv("BENCH_SUBREPO_PATH")
 	}
+	subRepoBaseline := *subRepoBaseline
+	if subRepoBaseline == "" {
+		subRepoBaseline = os.Getenv("BENCH_SUBREPO_BASELINE_PATH")
+	}
+	dirs := []string{subRepoExperiment, subRepoBaseline}
 
+	if repository != "go" {
+		toolchain := toolchainFromGOROOT("baseline", gorootBaseline)
+		if err := goTestSubrepo(toolchain, repository, dirs); err != nil {
+			log.Print("FAIL")
+			os.Exit(1)
+		}
+		return
+	}
 	// Run benchmarks against the toolchains.
 	if err := run(toolchains); err != nil {
 		log.Print("FAIL")
diff --git a/sweet/common/gotool.go b/sweet/common/gotool.go
index b86c6d0..14d3d58 100644
--- a/sweet/common/gotool.go
+++ b/sweet/common/gotool.go
@@ -30,8 +30,11 @@
 	}, nil
 }
 
-func (g *Go) Do(args ...string) error {
+func (g *Go) Do(dir string, args ...string) error {
 	cmd := exec.Command(g.Tool, args...)
+	if dir != "" {
+		cmd.Dir = dir
+	}
 	cmd.Env = g.Env.Collapse()
 	if g.PassOutput {
 		cmd.Stdout = os.Stdout
@@ -66,7 +69,7 @@
 	if pkg[0] == '/' || pkg[0] == '.' {
 		return fmt.Errorf("path used as package in go build")
 	}
-	return g.Do("build", "-o", out, pkg)
+	return g.Do("", "build", "-o", out, pkg)
 }
 
 func (g *Go) BuildPath(path, out string) error {
@@ -81,7 +84,7 @@
 	if err := chdir(path); err != nil {
 		return fmt.Errorf("failed to enter build directory: %w", err)
 	}
-	return g.Do("build", "-o", out)
+	return g.Do("", "build", "-o", out)
 }
 
 func chdir(path string) error {
