Don't assert in BasicTTI::getMemoryOpCost for non-simple types

BasicTTI::getMemoryOpCost must explicitly check for non-simple types; setting
AllowUnknown=true with TLI->getSimpleValueType is not sufficient because, for
example, non-power-of-two vector types return non-simple EVTs (not MVT::Other).

llvm-svn: 206150
diff --git a/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp b/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp
index 26bc621..ecb403a 100644
--- a/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp
+++ b/llvm/lib/CodeGen/BasicTargetTransformInfo.cpp
@@ -424,12 +424,14 @@
     // This is a vector load that legalizes to a larger type than the vector
     // itself. Unless the corresponding extending load or truncating store is
     // legal, then this will scalarize.
-    TargetLowering::LegalizeAction LA;
-    MVT MemVT = getTLI()->getSimpleValueType(Src, true);
-    if (Opcode == Instruction::Store)
-      LA = getTLI()->getTruncStoreAction(LT.second, MemVT);
-    else
-      LA = getTLI()->getLoadExtAction(ISD::EXTLOAD, MemVT);
+    TargetLowering::LegalizeAction LA = TargetLowering::Expand;
+    EVT MemVT = getTLI()->getValueType(Src, true);
+    if (MemVT.isSimple() && MemVT != MVT::Other) {
+      if (Opcode == Instruction::Store)
+        LA = getTLI()->getTruncStoreAction(LT.second, MemVT.getSimpleVT());
+      else
+        LA = getTLI()->getLoadExtAction(ISD::EXTLOAD, MemVT.getSimpleVT());
+    }
 
     if (LA != TargetLowering::Legal && LA != TargetLowering::Custom) {
       // This is a vector load/store for some illegal type that is scalarized.