There are a few interesting places where Galois Theory touches on compilation/programming.
Abstract interpretation models a potentially infinite set of program behaviors onto a simpler (often finite) model that is (soundly) approximate and easier to reason about (via Galois connections); here the analogy is to Galois Theory connecting infinite fields with finite groups. I often think about this when working on Value Numbering for instance.
Also (perhaps a bit of stretch) it's interesting to think of extending a computational domain (say integers) with additional values (say an error value) as a kind of field extension, and as with field extensions, sometimes (perhaps unexpectedly) complications arise (eg loss of unique factorization :: LLVM's poison & undef, or NaNs).
To extend on this, while abstract interpretation may sound a bit "abstract" (pun not intended), it is the basis for many techniques for software verification and compiler optimizations. At its core it basically allows you to soundly approximate the set of reachable states in a program, which in turn can be used to check that no "bad" state can be reached (for software verification) or that e.g. some checks are useless and can be removed (for compiler optimizations). Other applications include the new borrow checker for the Rust programming language, which is built on various dataflow passes to determine at each program point which variable is "live" and/or "borrowed".
Something closer to a "pure codegen/runtime" example perhaps: I have data showing Roslyn (the C# compiler, itself written in C#) speeds up between ~2x and ~3x running on .NET 8 vs .NET 4.7.1. Roslyn is built so that it can run either against full framework or core, so it's largely the same application IL.
Am I correct in thinking that PGO documentation will be coming later as part of the official release? Searching for DOTNET_TieredPGO (mentioned in Stephen's post) doesn't turn up much.
Might give it a spin on Preview 7 this week regardless, Stephen's post has more than enough to get started :)
Abstract interpretation models a potentially infinite set of program behaviors onto a simpler (often finite) model that is (soundly) approximate and easier to reason about (via Galois connections); here the analogy is to Galois Theory connecting infinite fields with finite groups. I often think about this when working on Value Numbering for instance.
Also (perhaps a bit of stretch) it's interesting to think of extending a computational domain (say integers) with additional values (say an error value) as a kind of field extension, and as with field extensions, sometimes (perhaps unexpectedly) complications arise (eg loss of unique factorization :: LLVM's poison & undef, or NaNs).