LLVM is certainly not a recommended way to start. That would be to start with a small lisp or ocaml compiler. There you have all the batteries included and the project would still be small enough.
Honestly I've read a ton of scaremongering about how awful and complex LLVM was, and I too assumed the worst, but the API is surprisingly benign and well documented for how difficult a task it accomplishes.
I also checked out Cranelift which was recommended to me as a battle-tested but easier to use alternative, and honestly I haven't found it to be that much simpler.
I've got compiler jobs without ever touching LLVM. Even gcc has a better codebase and performance. If just its maintainers would behave as nice as the LLVM maintainers who are really nice.
Eg with gcc you can write a jit in pure C. With LLVM you'd still need C++ for name lookup hooks. With qbe you won't need any of this. With lisp much less.
You got me to check out GCC and QBE, and I say, not having to bother with SSA does seem to make things a bit easier, with GCC's Gimple being a kind of pseudo-assembly language, and Generic being almost C.
Still I think once you get over the hurdle of SSA-ifying your procedural code, LLVM is all right, and seems to be a lot more feature rich (I might be stupid, but I don't see how to make stack maps in GCC).
Also GCC is very lightly documented while LLVM seems to have quite good docs and tutorials.
Just emit load and store instructions, and it'll be converted automatically.
What SSA gives you is substantially easier analysis and optimizations on the intermediate representation, so much that all compilers use it (yes, even GCC).