Change inferred getCast into specific getCast. Passes all tests.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32469 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Transforms/Utils/LowerInvoke.cpp b/lib/Transforms/Utils/LowerInvoke.cpp
index dfeb834..4fbd43c 100644
--- a/lib/Transforms/Utils/LowerInvoke.cpp
+++ b/lib/Transforms/Utils/LowerInvoke.cpp
@@ -215,8 +215,12 @@
     unsigned NumArgs = FT->getNumParams();
     for (unsigned i = 0; i != 3; ++i)
       if (i < NumArgs && FT->getParamType(i) != Args[i]->getType())
-        Args[i] = ConstantExpr::getCast(cast<Constant>(Args[i]),
-                                        FT->getParamType(i));
+        if (Args[i]->getType()->isInteger())
+          Args[i] = ConstantExpr::getIntegerCast(cast<Constant>(Args[i]),
+                                                 FT->getParamType(i), true);
+        else
+          Args[i] = ConstantExpr::getBitCast(cast<Constant>(Args[i]),
+                                             FT->getParamType(i));
 
     (new CallInst(WriteFn, Args, "", IB))->setTailCall();
   }