title: Why would *&param be used in a function?
body: <p>I've been trying to make sense of LLVM's instruction combining code and noticed this function:</p>
  
  <pre><code>static void detectLog2OfHalf(Value *&amp;Op, Value *&amp;Y, IntrinsicInst *&amp;Log2) {
  
     if (!Op-&gt;hasOneUse())
       return;
  
     IntrinsicInst *II = dyn_cast&lt;IntrinsicInst&gt;(Op);
     if (!II)
       return;
     if (II-&gt;getIntrinsicID() != Intrinsic::log2 || !II-&gt;hasUnsafeAlgebra())
       return;
     Log2 = II;
  
     Value *OpLog2Of = II-&gt;getArgOperand(0);
     if (!OpLog2Of-&gt;hasOneUse())
       return;
  
     Instruction *I = dyn_cast&lt;Instruction&gt;(OpLog2Of);
     if (!I)
       return;
     if (I-&gt;getOpcode() != Instruction::FMul || !I-&gt;hasUnsafeAlgebra())
       return;
  
     if (match(I-&gt;getOperand(0), m_SpecificFP(0.5)))
       Y = I-&gt;getOperand(1);
     else if (match(I-&gt;getOperand(1), m_SpecificFP(0.5)))
       Y = I-&gt;getOperand(0);
  }
  </code></pre>
  
  <p>Why would <code>*&amp;</code> by used in the parameters? Does it have some meaning or would <code>Op</code> be equivalent to <code>*&amp;Op</code>?</p>