]> granicus.if.org Git - llvm/commitdiff
[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.

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

lib/Target/X86/X86FastISel.cpp

index 7d38abbc2cef741cff41a0aa246d98d4c8a9a328..be1efa66f12f6381106acdf1ef0553d7af8e228c 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;