Optimize away cases like:
authorChris Lattner <sabre@nondot.org>
Mon, 23 Sep 2002 23:39:43 +0000 (23:39 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 23 Sep 2002 23:39:43 +0000 (23:39 +0000)
        %cast109 = cast uint %cast212 to short          ; <short> [#uses=1]
        %cast214 = cast short %cast109 to uint          ; <uint> [#uses=1]
        %cast215 = cast uint %cast214 to short          ; <short> [#uses=1]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3897 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InstructionCombining.cpp

index 082dc020b00900293e71c4968e70e5e06ff9da10..b60d1fa9720ff7f4044950bba12d82961f23c099 100644 (file)
@@ -536,6 +536,12 @@ static inline bool isEliminableCastOfCast(const CastInst &CI,
     if (SrcSize >= MidSize && MidSize >= DstSize)
       return true;
 
+    // Cases where the source and destination type are the same, but the middle
+    // type is bigger are noops.
+    //
+    if (SrcSize == DstSize && MidSize > SrcSize)
+      return true;
+
     // If we are monotonically growing, things are more complex.
     //
     if (SrcSize <= MidSize && MidSize <= DstSize) {