svn commit: r354429 - head/contrib/llvm/lib/Target/X86

Dimitry Andric dim at FreeBSD.org
Thu Nov 7 06:59:10 UTC 2019


Author: dim
Date: Thu Nov  7 06:59:09 2019
New Revision: 354429
URL: https://svnweb.freebsd.org/changeset/base/354429

Log:
  Merge commit 8e34dd941 from llvm git (by Sanjay Patel):
  
    [x86] avoid crashing when splitting AVX stores with non-simple type
    (PR43916)
  
    The store splitting transform was assuming a simple type (MVT), but
    that's not necessarily the case as shown in the test.
  
  This should fix 'Assertion failed: (isSimple() && "Expected a
  SimpleValueType!")' when building the security/openssl111 port targeting
  a CPU that supports AVX, but not AVX2, such as sandybridge.
  
  PR:		241747
  MFC after:	1 month
  X-MFC-With:	r353358

Modified:
  head/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp

Modified: head/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp
==============================================================================
--- head/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp	Thu Nov  7 04:04:06 2019	(r354428)
+++ head/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp	Thu Nov  7 06:59:09 2019	(r354429)
@@ -21182,12 +21182,14 @@ static SDValue splitVectorStore(StoreSDNode *Store, Se
          "Expecting 256/512-bit op");
 
   // Splitting volatile memory ops is not allowed unless the operation was not
-  // legal to begin with. We are assuming the input op is legal (this transform
-  // is only used for targets with AVX).
+  // legal to begin with. Assume the input store is legal (this transform is
+  // only used for targets with AVX). Note: It is possible that we have an
+  // illegal type like v2i128, and so we could allow splitting a volatile store
+  // in that case if that is important.
   if (Store->isVolatile())
     return SDValue();
 
-  MVT StoreVT = StoredVal.getSimpleValueType();
+  EVT StoreVT = StoredVal.getValueType();
   unsigned NumElems = StoreVT.getVectorNumElements();
   unsigned HalfSize = StoredVal.getValueSizeInBits() / 2;
   unsigned HalfAlign = (128 == HalfSize ? 16 : 32);


More information about the svn-src-all mailing list