diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index 256b2fd41ab676ae29d5fc3f18a6a0aa4e280af8..482e1722c92e21a2b0931217c7402daa56968cf5 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -7767,11 +7767,6 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
   const FunctionType *FT = Callee->getFunctionType();
   const Type *OldRetTy = Caller->getType();
 
-  // Check to see if we are changing the return type...
-  if (OldRetTy != FT->getReturnType()) {
-    if (Callee->isDeclaration() && !Caller->use_empty() && 
-        // Conversion is ok if changing from pointer to int of same size.
-        !(isa<PointerType>(FT->getReturnType()) &&
   const FunctionType *ActualFT =
     cast<FunctionType>(cast<PointerType>(CE->getType())->getElementType());
   
@@ -7780,6 +7775,11 @@ bool InstCombiner::transformConstExprCastCall(CallSite CS) {
   if (FT->getParamAttrs() != ActualFT->getParamAttrs())
     return false;
   
+  // Check to see if we are changing the return type...
+  if (OldRetTy != FT->getReturnType()) {
+    if (Callee->isDeclaration() && !Caller->use_empty() && 
+        // Conversion is ok if changing from pointer to int of same size.
+        !(isa<PointerType>(FT->getReturnType()) &&
           TD->getIntPtrType() == OldRetTy))
       return false;   // Cannot transform this return value.