This is noteworthy because it took me far too long to figure out. If you want to isolate an LLVM optimization pass (i.e. run it on otherwise unoptimized LLVM bitcode), it might not be sufficient to simply compile the program with clang. In particular, compiling with the clang -O0 flag (which is the default if no optimization level is specified) explicitly adds the optnone property to every function in the LLVM bitcode. Then, running an optimization pass with the opt command will result in the pass being skipped on those functions.
To avoid this, the program should be compiled with the following clang flags:
clang -O -Xclang -disable-llvm-passes -emit-llvm
Note the inclusion of the -O flag with no optimization level specified. Now, you should be able to run an optimization pass with opt without the pass being skipped by the pass manager.