Fix missing slot metadata issue + cleanup ArrayRefs.
Temporary ArrayRefs are very bad (tm). This change converts all temporary
ArrayRefs to be implicitly created where necessary, rather than using explicit
API calls.
BUG=5028838
Change-Id: I5ffedc737aee17b529c66ed76e8080c9886c6153
diff --git a/slang_rs_backend.cpp b/slang_rs_backend.cpp
index b5b50ee..b10b27b 100644
--- a/slang_rs_backend.cpp
+++ b/slang_rs_backend.cpp
@@ -195,7 +195,6 @@
mExportVarMetadata = M->getOrInsertNamedMetadata(RS_EXPORT_VAR_MN);
llvm::SmallVector<llvm::Value*, 2> ExportVarInfo;
- llvm::SmallVector<llvm::Value*, 1> SlotVarInfo;
// We emit slot information (#rs_object_slots) for any reference counted
// RS type or pointer (which can also be bound).
@@ -250,13 +249,8 @@
}
}
- llvm::ArrayRef<llvm::Value*> ExportVarInfoArray(ExportVarInfo);
- llvm::ArrayRef<llvm::Value*> SlotVarInfoArray(SlotVarInfo);
-
mExportVarMetadata->addOperand(
- llvm::MDNode::get(mLLVMContext,
- ExportVarInfoArray));
-
+ llvm::MDNode::get(mLLVMContext, ExportVarInfo));
ExportVarInfo.clear();
if (mRSObjectSlotsMetadata == NULL) {
@@ -265,16 +259,11 @@
}
if (countsAsRSObject) {
- SlotVarInfo.push_back(
- llvm::MDString::get(mLLVMContext, llvm::utostr_32(slotCount)));
-
- mRSObjectSlotsMetadata->addOperand(
- llvm::MDNode::get(mLLVMContext,
- SlotVarInfoArray));
+ mRSObjectSlotsMetadata->addOperand(llvm::MDNode::get(mLLVMContext,
+ llvm::MDString::get(mLLVMContext, llvm::utostr_32(slotCount))));
}
slotCount++;
- SlotVarInfo.clear();
}
}
@@ -404,11 +393,8 @@
llvm::MDString::get(mLLVMContext, HelperFunctionName.c_str()));
}
- llvm::ArrayRef<llvm::Value*> ExportFuncInfoArray(ExportFuncInfo);
mExportFuncMetadata->addOperand(
- llvm::MDNode::get(mLLVMContext,
- ExportFuncInfoArray));
-
+ llvm::MDNode::get(mLLVMContext, ExportFuncInfo));
ExportFuncInfo.clear();
}
}
@@ -438,10 +424,8 @@
mExportTypeMetadata =
M->getOrInsertNamedMetadata(RS_EXPORT_TYPE_MN);
- llvm::ArrayRef<llvm::Value*> ExportTypeInfoArray(ExportTypeInfo);
mExportTypeMetadata->addOperand(
- llvm::MDNode::get(mLLVMContext,
- ExportTypeInfoArray));
+ llvm::MDNode::get(mLLVMContext, ExportTypeInfo));
// Now, export struct field information to %[struct name]
std::string StructInfoMetadataName("%");
@@ -488,10 +472,8 @@
}
}
- llvm::ArrayRef<llvm::Value*> FieldInfoArray(FieldInfo);
- StructInfoMetadata->addOperand(llvm::MDNode::get(mLLVMContext,
- FieldInfoArray));
-
+ StructInfoMetadata->addOperand(
+ llvm::MDNode::get(mLLVMContext, FieldInfo));
FieldInfo.clear();
}
} // ET->getClass() == RSExportType::ExportClassRecord