Does anyone know how LLVM decides what goes in the constant pool?

For example:

const int i = 10; // does not go in the constant pool, even if &i is present


const char * hello = "hello"; // the string "hello" does go into the constant pool

For fast-isel, I am seeing the high level clang IR and I need to emit a different load sequence to get the
address of a normal variable as opposed to something in the constant pool (.rdata).

it makes a difference for Mips because some objects, constant string for example, are accessed
in a special way, apparanently to avoid using an extra GOT entry to access them.

The GOT entry for the constant data (.rdata) section for that module is used and the address of the string relative
to the .rdata reference is added to it.