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,