Optimization levels in llvm

Hi all,
Can anyone tell how changing the optimization levels ( -O) in llvm changes if the arguments are passed to a function by value or by reference? For example if we pass an argument by value to a function can changing the optimization level can force it to be pass by reference if at all it makes the code optimized in some way. Please guide.