I'd like to understand all the instructions that can end a basic block.
So far, after analyzing a .ll file converted from .bc, I found the
following 4 instructions. Are there other instructions that I miss?
What you are looking for is the list of terminator instructions: https://llvm.org/docs/LangRef.html#terminator-instructions
This is ret, br, switch, indirectbr, unreachable, invoke, resume, catchswitch, catchret, and cleanupret. Note that every instruction from invoke on in that list is related to exception handling.