Index: src/IceConverter.cpp |
diff --git a/src/IceConverter.cpp b/src/IceConverter.cpp |
index 654d5e87532022dc27d5db8220de8a768c33de46..9a0b04e5e61ccad917e2c64fe47da163f9e54b05 100644 |
--- a/src/IceConverter.cpp |
+++ b/src/IceConverter.cpp |
@@ -165,6 +165,43 @@ private: |
} |
} |
+ Ice::Type convertVectorType(const VectorType *VecTy) const { |
+ unsigned NumElements = VecTy->getNumElements(); |
+ const Type *ElementType = VecTy->getElementType(); |
+ |
+ if (ElementType->isFloatTy()) { |
+ if (NumElements == 4) |
+ return Ice::IceType_v4f32; |
+ } else if (ElementType->isIntegerTy()) { |
+ switch (cast<IntegerType>(ElementType)->getBitWidth()) { |
+ case 1: |
+ if (NumElements == 4) |
+ return Ice::IceType_v4i1; |
+ if (NumElements == 8) |
+ return Ice::IceType_v8i1; |
+ if (NumElements == 16) |
+ return Ice::IceType_v16i1; |
+ break; |
+ case 8: |
+ if (NumElements == 16) |
+ return Ice::IceType_v16i8; |
+ break; |
+ case 16: |
+ if (NumElements == 8) |
+ return Ice::IceType_v8i16; |
+ break; |
+ case 32: |
+ if (NumElements == 4) |
+ return Ice::IceType_v4i32; |
+ break; |
+ } |
+ } |
+ |
+ report_fatal_error(std::string("Unhandled vector type: ") + |
+ LLVMObjectAsString(VecTy)); |
+ return Ice::IceType_void; |
+ } |
+ |
Ice::Type convertType(const Type *Ty) const { |
switch (Ty->getTypeID()) { |
case Type::VoidTyID: |
@@ -179,6 +216,8 @@ private: |
return SubzeroPointerType; |
case Type::FunctionTyID: |
return SubzeroPointerType; |
+ case Type::VectorTyID: |
+ return convertVectorType(cast<VectorType>(Ty)); |
default: |
report_fatal_error(std::string("Invalid PNaCl type: ") + |
LLVMObjectAsString(Ty)); |