Hi Jakub,
The PNaCl backend (pnacl-llc) is pretty much the same as the standard LLVM backend (llc), but with sandboxing restrictions. These include bundling requirements, forcing bundle-aligned jump/call/ret targets, and sometimes sandboxed memory accesses. These requirements generally don't affect the calling convention. On top of that, the higher-level PNaCl bitcode ABI restricts bitcode to the C calling convention, removes varargs, and removes struct args and other arg types other than i{8,16,32,64} and f{32,64} and the PNaCl vector types.
When you apply all these restrictions and let the dust settle, you should find that "sibling call" or "sibcall" should still be generally amenable to tailcall lowering. (I haven't actually tested this, but it should be fairly simple to construct small test cases and test across different target architectures and optimization levels by inspecting the assembly code.)
I think part of this project would involve changing the ghc-generated calls as necessary to ensure tailcall optimization in the backend.
Jim