Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(358)

Unified Diff: src/IceConverter.cpp

Issue 353553004: Add support for vector types and vector constants. (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Print out types in error messages. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/IceGlobalContext.cpp » ('j') | src/IceTargetLoweringX8632.cpp » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
« no previous file with comments | « no previous file | src/IceGlobalContext.cpp » ('j') | src/IceTargetLoweringX8632.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698