I have some thoughts over this. First of all, relay IR is not strictly ANF. It is dataflow(graph) with let binding and functional support, while have structured control flow blocks.
In particular, supporting structured control flow and dataflow(graph) makes it easy to do rewriting and automatic differentiation. And a few other computational graph rewriting in the way folks usually understand
The advantage of SSA, on the other hand, is the ability to support low level code generation of arbitrary control flow, so it definitely makes sense for LLVM to do so, and we shall use llvm to generate low level code. Never the less, general SSA might complicate some high level optimizations.
I find the current IR design sufficient for now, but we might consider add SSA support on top of functional basic blocks when we find such need