Unify type spec by creating rs-spec-gen.
rs-spec-gen (slang_rs_spec_table.cpp) will help llvm-rs-cc to share
the RS spec it used across the other projects. This will makes code
cleaner and therefore easier to add new spec/synchronize the spec
between other project (e.g., libbcc and libRS).
This CL is the first part. It eliminated the needs of
slang_rs_export_element_support.inc and
slang_rs_export_type_support.inc.
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index 7f4c4cb..9d8684a 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -118,20 +118,38 @@
llvm::MDString::get(mLLVMContext, EV->getName().c_str()));
// Type name
- if (ET->getClass() == RSExportType::ExportClassPrimitive)
- ExportVarInfo.push_back(
- llvm::MDString::get(
+ switch (ET->getClass()) {
+ case RSExportType::ExportClassPrimitive: {
+ ExportVarInfo.push_back(
+ llvm::MDString::get(
mLLVMContext, llvm::utostr_32(
- static_cast<const RSExportPrimitiveType*>(ET)->getType())));
- else if (ET->getClass() == RSExportType::ExportClassPointer)
- ExportVarInfo.push_back(
- llvm::MDString::get(
+ static_cast<const RSExportPrimitiveType*>(ET)->getType())));
+ break;
+ }
+ case RSExportType::ExportClassPointer: {
+ ExportVarInfo.push_back(
+ llvm::MDString::get(
mLLVMContext, ("*" + static_cast<const RSExportPointerType*>(ET)
- ->getPointeeType()->getName()).c_str()));
- else
- ExportVarInfo.push_back(
- llvm::MDString::get(mLLVMContext,
- EV->getType()->getName().c_str()));
+ ->getPointeeType()->getName()).c_str()));
+ break;
+ }
+ case RSExportType::ExportClassMatrix: {
+ ExportVarInfo.push_back(
+ llvm::MDString::get(
+ mLLVMContext, llvm::utostr_32(
+ RSExportPrimitiveType::DataTypeRSMatrix2x2 +
+ static_cast<const RSExportMatrixType*>(ET)->getDim() - 2)));
+ break;
+ }
+ case RSExportType::ExportClassVector:
+ case RSExportType::ExportClassConstantArray:
+ case RSExportType::ExportClassRecord: {
+ ExportVarInfo.push_back(
+ llvm::MDString::get(mLLVMContext,
+ EV->getType()->getName().c_str()));
+ break;
+ }
+ }
mExportVarMetadata->addOperand(
llvm::MDNode::get(mLLVMContext,