disable this transformation in the one obscure case that really pessimizes
pointer analysis.

llvm-svn: 20916
diff --git a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
index e944672..40088ba 100644
--- a/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/llvm/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -4646,6 +4646,9 @@
           }
 
       if ((SrcPTy->isInteger() || isa<PointerType>(SrcPTy)) &&
+          // Do not allow turning this into a load of an integer, which is then
+          // casted to a pointer, this pessimizes pointer analysis a lot.
+          (isa<PointerType>(SrcPTy) == isa<PointerType>(LI.getType())) &&
           IC.getTargetData().getTypeSize(SrcPTy) == 
                IC.getTargetData().getTypeSize(DestPTy)) {