IR: MDNode => Value: Add Instruction::getMDNode()
[oota-llvm.git] / lib / IR / MDBuilder.cpp
index 1d8a83dae7f740c8b822b28e0504e4364d8124c0..3ec613c2f664066d2b127555913c50be5048ade8 100644 (file)
@@ -23,7 +23,7 @@ MDString *MDBuilder::createString(StringRef Str) {
 
 MDNode *MDBuilder::createFPMath(float Accuracy) {
   if (Accuracy == 0.0)
-    return 0;
+    return nullptr;
   assert(Accuracy > 0.0 && "Invalid fpmath accuracy!");
   Value *Op = ConstantFP::get(Type::getFloatTy(Context), Accuracy);
   return MDNode::get(Context, Op);
@@ -60,10 +60,17 @@ MDNode *MDBuilder::createRange(const APInt &Lo, const APInt &Hi) {
   return MDNode::get(Context, Range);
 }
 
-MDNode *MDBuilder::createAnonymousTBAARoot() {
+MDNode *MDBuilder::createAnonymousAARoot(StringRef Name, MDNode *Extra) {
   // To ensure uniqueness the root node is self-referential.
-  MDNode *Dummy = MDNode::getTemporary(Context, ArrayRef<Value *>());
-  MDNode *Root = MDNode::get(Context, Dummy);
+  MDNode *Dummy = MDNode::getTemporary(Context, None);
+
+  SmallVector<Value *, 3> Args(1, Dummy);
+  if (Extra)
+    Args.push_back(Extra);
+  if (!Name.empty())
+    Args.push_back(createString(Name));
+  MDNode *Root = MDNode::get(Context, Args);
+
   // At this point we have
   //   !0 = metadata !{}            <- dummy
   //   !1 = metadata !{metadata !0} <- root
@@ -93,6 +100,15 @@ MDNode *MDBuilder::createTBAANode(StringRef Name, MDNode *Parent,
   }
 }
 
+MDNode *MDBuilder::createAliasScopeDomain(StringRef Name) {
+  return MDNode::get(Context, createString(Name));
+}
+
+MDNode *MDBuilder::createAliasScope(StringRef Name, MDNode *Domain) {
+  Value *Ops[2] = { createString(Name), Domain };
+  return MDNode::get(Context, Ops);
+}
+
 /// \brief Return metadata for a tbaa.struct node with the given
 /// struct field descriptions.
 MDNode *MDBuilder::createTBAAStructNode(ArrayRef<TBAAStructField> Fields) {