If/else is just as made up as for loops - it’s all if/goto underneath.

Unless you compile your program with movfuscator: https://github.com/xoreaxeaxeax/movfuscator

Or you decide to execute code on The Fungus: https://www.bedroomlan.org/hardware/fungus

I also recall reading a paper that got into implementing a GC on silicon for a graph rewriting based architecture

WebAssembly is if/else blocks. There's a potential future where it gets implemented directly as a CPU ISA (albeit it'd likely involve some dynamic translation, but the CPU may decide to have SSA as its internal representation)

It's important to understand there's a real distinction between semantics & implementation. Otherwise you risk emulating your implementation when some new hardware comes out (say GPUs, or Quantum computers, or out of order CPUs working backwards to create something like SSA for register renaming/pipelining, or cmov)

See also the debates over C code being executed in the C abstract machine for optimizers while programmers rely on implementation of the end result. But in a language without undefined / implementation-defined behavior you won't have these ways of having the program self observe its implementation