[AVX-512] Punt on fast-isel of truncates to i1 when AVX512 is enabled.
authorCraig Topper <craig.topper@gmail.com>
Tue, 28 Mar 2017 23:20:37 +0000 (23:20 +0000)
committerCraig Topper <craig.topper@gmail.com>
Tue, 28 Mar 2017 23:20:37 +0000 (23:20 +0000)
We should be masking the value and emitting a register copy like we do in non-fast isel. Instead we were just updating the value map and emitting nothing.

After r298928 we started seeing cases where we would create a copy from GR8 to GR32 because the source register in a VK1 to GR32 copy was replaced by the GR8 going into a truncate.

This fixes PR32451.

llvm-svn: 298957

llvm/lib/Target/X86/X86FastISel.cpp

index 7d38abb..be1efa6 100644 (file)
@@ -2512,7 +2512,8 @@ bool X86FastISel::X86SelectTrunc(const Instruction *I) {
   EVT DstVT = TLI.getValueType(DL, I->getType());
 
   // This code only handles truncation to byte.
-  if (DstVT != MVT::i8 && DstVT != MVT::i1)
+  // TODO: Support truncate to i1 with AVX512.
+  if (DstVT != MVT::i8 && (DstVT != MVT::i1 || Subtarget->hasAVX512()))
     return false;
   if (!TLI.isTypeLegal(SrcVT))
     return false;