Make AArch64FastISel::EmitIntExt explicitly check its source and destination types
authorLouis Gerbarg <lgg@apple.com>
Wed, 9 Jul 2014 17:54:32 +0000 (17:54 +0000)
committerLouis Gerbarg <lgg@apple.com>
Wed, 9 Jul 2014 17:54:32 +0000 (17:54 +0000)
This is a follow up to r212492. There should be no functional difference, but
this patch makes it clear that SrcVT must be an i1/i8/16/i32 and DestVT must be
an i8/i16/i32/i64.

rdar://17516686

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

lib/Target/AArch64/AArch64FastISel.cpp

index d822c1bf327ba0bc71a08ce64c9c3a7f6d185c81..c4e0ff0c38c91ae670e1d4ea7a9446821c457b51 100644 (file)
@@ -1751,9 +1751,14 @@ unsigned AArch64FastISel::EmitIntExt(MVT SrcVT, unsigned SrcReg, MVT DestVT,
                                      bool isZExt) {
   assert(DestVT != MVT::i1 && "ZeroExt/SignExt an i1?");
 
-  // FastISel does not have plumbing to deal with an MVT::i128, if we see one
-  // so rather than return one we need to bail out to SelectionDAG.
-  if (DestVT == MVT::i128)
+  // FastISel does not have plumbing to deal with extensions where the SrcVT or
+  // DestVT are odd things, so test to make sure that they are both types we can
+  // handle (i1/i8/i16/i32 for SrcVT and i8/i16/i32/i64 for DestVT), otherwise
+  // bail out to SelectionDAG.
+  if (((DestVT != MVT::i8) && (DestVT != MVT::i16) &&
+       (DestVT != MVT::i32) && (DestVT != MVT::i64)) ||
+      ((SrcVT !=  MVT::i1) && (SrcVT !=  MVT::i8) &&
+       (SrcVT !=  MVT::i16) && (SrcVT !=  MVT::i32)))
     return 0;
 
   unsigned Opc;