about summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/ci/pgo.sh77
1 files changed, 38 insertions, 39 deletions
diff --git a/src/ci/pgo.sh b/src/ci/pgo.sh
index 1917d4e6980..88a03c05d9f 100755
--- a/src/ci/pgo.sh
+++ b/src/ci/pgo.sh
@@ -2,6 +2,40 @@
 
 set -euxo pipefail
 
+# Compile several crates to gather execution PGO profiles.
+# Arg0 => builds (Debug, Opt)
+# Arg1 => runs (Full, IncrFull, All)
+# Arg2 => crates (syn, cargo, ...)
+gather_profiles () {
+  cd /checkout/obj
+
+  # Compile libcore, both in opt-level=0 and opt-level=3
+  RUSTC_BOOTSTRAP=1 ./build/$PGO_HOST/stage2/bin/rustc \
+      --edition=2021 --crate-type=lib ../library/core/src/lib.rs
+  RUSTC_BOOTSTRAP=1 ./build/$PGO_HOST/stage2/bin/rustc \
+      --edition=2021 --crate-type=lib -Copt-level=3 ../library/core/src/lib.rs
+
+  cd rustc-perf
+
+  # Run rustc-perf benchmarks
+  # Benchmark using profile_local with eprintln, which essentially just means
+  # don't actually benchmark -- just make sure we run rustc a bunch of times.
+  RUST_LOG=collector=debug \
+  RUSTC=/checkout/obj/build/$PGO_HOST/stage0/bin/rustc \
+  RUSTC_BOOTSTRAP=1 \
+  /checkout/obj/build/$PGO_HOST/stage0/bin/cargo run -p collector --bin collector -- \
+          profile_local \
+          eprintln \
+          /checkout/obj/build/$PGO_HOST/stage2/bin/rustc \
+          Test \
+          --builds $1 \
+          --cargo /checkout/obj/build/$PGO_HOST/stage0/bin/cargo \
+          --runs $2 \
+          --include $3
+
+  cd /checkout/obj
+}
+
 rm -rf /tmp/rustc-pgo
 
 # We collect LLVM profiling information and rustc profiling information in
@@ -19,6 +53,7 @@ RUSTC_BOOTSTRAP=1 ./build/$PGO_HOST/stage2/bin/rustc \
 RUSTC_BOOTSTRAP=1 ./build/$PGO_HOST/stage2/bin/rustc \
     --edition=2021 --crate-type=lib -Copt-level=3 ../library/core/src/lib.rs
 
+# Compile rustc perf
 cp -r /tmp/rustc-perf ./
 chown -R $(whoami): ./rustc-perf
 cd rustc-perf
@@ -29,23 +64,7 @@ RUSTC=/checkout/obj/build/$PGO_HOST/stage0/bin/rustc \
 RUSTC_BOOTSTRAP=1 \
 /checkout/obj/build/$PGO_HOST/stage0/bin/cargo build -p collector
 
-# Gather LLVM PGO profiles from real-world crates.
-# Benchmark using profile_local with eprintln, which essentially just means
-# don't actually benchmark -- just make sure we run rustc a bunch of times.
-RUST_LOG=collector=debug \
-RUSTC=/checkout/obj/build/$PGO_HOST/stage0/bin/rustc \
-RUSTC_BOOTSTRAP=1 \
-/checkout/obj/build/$PGO_HOST/stage0/bin/cargo run -p collector --bin collector -- \
-        profile_local \
-        eprintln \
-        /checkout/obj/build/$PGO_HOST/stage2/bin/rustc \
-        Test \
-        --builds Debug,Opt \
-        --cargo /checkout/obj/build/$PGO_HOST/stage0/bin/cargo \
-        --runs All \
-        --include syn,cargo,serde,ripgrep,regex,clap-rs,hyper-2
-
-cd /checkout/obj
+gather_profiles "Debug,Opt" "Full" "syn,cargo,serde,ripgrep,regex,clap-rs,hyper-2"
 
 # Merge the profile data we gathered for LLVM
 # Note that this uses the profdata from the clang we used to build LLVM,
@@ -64,28 +83,8 @@ python3 ../x.py build --target=$PGO_HOST --host=$PGO_HOST \
     --stage 2 library/std \
     --rust-profile-generate=/tmp/rustc-pgo
 
-# Profile libcore compilation in opt-level=0 and opt-level=3
-RUSTC_BOOTSTRAP=1 ./build/$PGO_HOST/stage2/bin/rustc \
-    --edition=2021 --crate-type=lib ../library/core/src/lib.rs
-RUSTC_BOOTSTRAP=1 ./build/$PGO_HOST/stage2/bin/rustc \
-    --edition=2021 --crate-type=lib -Copt-level=3 ../library/core/src/lib.rs
-
-cd rustc-perf
-
-RUST_LOG=collector=debug \
-RUSTC=/checkout/obj/build/$PGO_HOST/stage0/bin/rustc \
-RUSTC_BOOTSTRAP=1 \
-/checkout/obj/build/$PGO_HOST/stage0/bin/cargo run -p collector --bin collector -- \
-        profile_local \
-        eprintln \
-        /checkout/obj/build/$PGO_HOST/stage2/bin/rustc \
-        Test \
-        --builds Check,Debug,Opt \
-        --cargo /checkout/obj/build/$PGO_HOST/stage0/bin/cargo \
-        --runs All \
-        --include externs,ctfe-stress-4,inflate,cargo,token-stream-stress,match-stress-enum
-
-cd /checkout/obj
+gather_profiles "Check,Debug,Opt" "All" \
+  "externs,ctfe-stress-4,inflate,cargo,token-stream-stress,match-stress-enum"
 
 # Merge the profile data we gathered
 ./build/$PGO_HOST/llvm/bin/llvm-profdata \