LLVM IR as code

Hello everyone,
I’m quite new to LLVM, and recently had an idea for a project. For this project, however, I need some information which I could not find online.
First of all, how can LLVM IR instructions be reordered within a basic block? I am relatively sure an addition of integer constants, which would of course be inlined by basic optimization, can be moved anywhere (within that basic block), as long as it still precedes all instructions that use it, but the order of function calls (to external functions) should not be rearranged, regardless of dependencies.
Secondly, is there any ‘pseudocode version’ of LLVM IR instructions and intrinsics? I still have problems understanding how certain instructions, like the error handling, and some intrinsic functions work, but I need this knowledge to complete my project, since it involves working with arbitrary LLVM code.
I’m thankful for any response!