<br><div class="gmail_extra"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+static void detectLog2OfHalf(Value *&Op, Value *&Y, IntrinsicInst *&Log2) {<br>
+   if (Op->hasOneUse()) {<br>
+    if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Op)) {<br>
+      if (II->getIntrinsicID() == Intrinsic::log2 &&<br>
+          II->hasUnsafeAlgebra()) {<br>
+        Log2 = II;<br>
+        Value *OpLog2Of = II->getArgOperand(0);<br>
+        if (OpLog2Of->hasOneUse()) {<br>
+          if (Instruction *I = dyn_cast<Instruction>(OpLog2Of)) {<br>
+            if (I->getOpcode() == Instruction::FMul &&<br>
+                I->hasUnsafeAlgebra()) {<br>
+              ConstantFP *CFP = dyn_cast<ConstantFP>(I->getOperand(0));<br>
+              if (CFP && CFP->isExactlyValue(0.5)) {<br>
+                Y = I->getOperand(1);<br>
+              } else {<br>
+                CFP = dyn_cast<ConstantFP>(I->getOperand(1));<br>
+                if (CFP && CFP->isExactlyValue(0.5)) {<br>
+                  Y = I->getOperand(0);<br>
+                }<br>
+              }<br>
+            }<br>
+          }<br>
+        }<br>
+      }<br>
+    }<br>
+  }<br>
+}<br>
+<br></blockquote><div><br></div><div>Trivially fwiw,</div><div><br></div><div>if (!Op->hasOneUse()) return false;</div><div>if (!isa<IntrinsicInst>(Op)) return false;</div><div><br></div><div>and just change it to return true/false if you've managed to do something or not.</div>
<div><br></div><div>-eric </div></div></div>