]> git.lizzy.rs Git - rust.git/blobdiff - src/ci/pgo.sh
Auto merge of #95669 - nnethercote:call-compute_locs-once-per-rule, r=petrochenkov
[rust.git] / src / ci / pgo.sh
index eaf92b033a1a84be842a7e4cce06730689c7d6cf..88a03c05d9fe26dced4b098f05f58c0a69fcd040 100755 (executable)
@@ -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,19 @@ 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
+
+# Build the collector ahead of time, which is needed to make sure the rustc-fake
+# binary used by the collector is present.
+RUSTC=/checkout/obj/build/$PGO_HOST/stage0/bin/rustc \
+RUSTC_BOOTSTRAP=1 \
+/checkout/obj/build/$PGO_HOST/stage0/bin/cargo build -p collector
+
+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,
 # which likely has a different version than our in-tree clang.
@@ -36,38 +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
-
-cp -r /tmp/rustc-perf ./
-chown -R $(whoami): ./rustc-perf
-cd rustc-perf
-
-# Build the collector ahead of time, which is needed to make sure the rustc-fake
-# binary used by the collector is present.
-RUSTC=/checkout/obj/build/$PGO_HOST/stage0/bin/rustc \
-RUSTC_BOOTSTRAP=1 \
-/checkout/obj/build/$PGO_HOST/stage0/bin/cargo build -p collector
-
-# 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 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 \