<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Oct 4, 2013 at 12:07 AM, Katya Romanova <span dir="ltr"><<a href="mailto:Katya_Romanova@playstation.sony.com" target="_blank" class="cremed">Katya_Romanova@playstation.sony.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">  Few more minor corrections are done based on the feedback.<br>
  I was wondering what is the common set of options to pass to clang-format for formatting the patch to comply with the Clang/LLVM style?<br></blockquote><div><br></div><div>You basically don't need options. clang-format should already default to LLVM style. You can use cfe/tools/clang-format/clang-format-diff.py (it has usage instructions in comments) to just reformat the changed lines in your patch.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  Thanks!<br>
<div class="im"><br>
Hi rafael,<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D1806" target="_blank" class="cremed">http://llvm-reviews.chandlerc.com/D1806</a><br>
<br>
CHANGE SINCE LAST DIFF<br>
</div>  <a href="http://llvm-reviews.chandlerc.com/D1806?vs=4643&id=4644#toc" target="_blank" class="cremed">http://llvm-reviews.chandlerc.com/D1806?vs=4643&id=4644#toc</a><br>
<div class="im"><br>
Files:<br>
  test/CodeGen/X86/ident-metadata.ll<br>
  test/Verifier/ident-meta2.ll<br>
  test/Verifier/ident-meta1.ll<br>
  test/Verifier/ident-meta3.ll<br>
  include/llvm/CodeGen/AsmPrinter.h<br>
  lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
  lib/IR/Verifier.cpp<br>
<br>
Index: test/CodeGen/X86/ident-metadata.ll<br>
===================================================================<br>
--- test/CodeGen/X86/ident-metadata.ll<br>
+++ test/CodeGen/X86/ident-metadata.ll<br>
</div>@@ -0,0 +1,9 @@<br>
<div class="im">+; RUN: llc -march=x86 < %s | FileCheck %s<br>
</div><div class="im">+; Verify that llvm.ident metadata is emitted as .ident<br>
+; directives in assembly files, and in the .comment section in ELF object files.<br>
+<br>
+; CHECK: .ident  "clang version x.x"<br>
+; CHECK-NEXT: .ident  "something else"<br>
</div><div><div class="h5">+!llvm.ident = !{!0, !1}<br>
+!0 = metadata !{metadata !"clang version x.x"}<br>
+!1 = metadata !{metadata !"something else"}<br>
Index: test/Verifier/ident-meta2.ll<br>
===================================================================<br>
--- test/Verifier/ident-meta2.ll<br>
+++ test/Verifier/ident-meta2.ll<br>
@@ -0,0 +1,13 @@<br>
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s<br>
+; Verify that llvm.ident is properly structured.<br>
+; llvm.ident takes a list of metadata entries.<br>
+; Each metadata entry can contain one string only.<br>
+<br>
+!llvm.ident = !{!0, !1, !2, !3}<br>
+!0 = metadata !{metadata !"str1"}<br>
+!1 = metadata !{metadata !"str2"}<br>
+!2 = metadata !{metadata !"str3"}<br>
+!3 = metadata !{i32 1}<br>
+; CHECK: assembly parsed, but does not verify as correct!<br>
+; CHECK-NEXT: invalid value for llvm.ident metadata entry operand(the operand should be a string)<br>
+; CHECK-NEXT: i32 1<br>
Index: test/Verifier/ident-meta1.ll<br>
===================================================================<br>
--- test/Verifier/ident-meta1.ll<br>
+++ test/Verifier/ident-meta1.ll<br>
@@ -0,0 +1,12 @@<br>
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s<br>
+; Verify that llvm.ident is properly structured.<br>
+; llvm.ident takes a list of metadata entries.<br>
+; Each metadata entry can have only one string.<br>
+<br>
+!llvm.ident = !{!0, !1}<br>
+!0 = metadata !{metadata !"version string"}<br>
+!1 = metadata !{metadata !"string1", metadata !"string2"}<br>
+; CHECK: assembly parsed, but does not verify as correct!<br>
+; CHECK-NEXT: incorrect number of operands in llvm.ident metadata<br>
+; CHECK-NEXT: metadata !1<br>
+<br>
Index: test/Verifier/ident-meta3.ll<br>
===================================================================<br>
--- test/Verifier/ident-meta3.ll<br>
+++ test/Verifier/ident-meta3.ll<br>
@@ -0,0 +1,10 @@<br>
+; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s<br>
+; Verify that llvm.ident is properly structured.<br>
+; llvm.ident takes a list of metadata entries.<br>
+; Each metadata entry can contain one string only.<br>
+<br>
+!llvm.ident = !{!0}<br>
+!0 = metadata !{metadata !{metadata !"nested metadata"}}<br>
+; CHECK: assembly parsed, but does not verify as correct!<br>
+; CHECK-NEXT: invalid value for llvm.ident metadata entry operand(the operand should be a string)<br>
+; CHECK-NEXT: metadata !1<br>
Index: include/llvm/CodeGen/AsmPrinter.h<br>
===================================================================<br>
--- include/llvm/CodeGen/AsmPrinter.h<br>
+++ include/llvm/CodeGen/AsmPrinter.h<br>
@@ -487,6 +487,8 @@<br>
                             const MachineBasicBlock *MBB,<br>
                             unsigned uid) const;<br>
     void EmitLLVMUsedList(const ConstantArray *InitList);<br>
+    /// Emit llvm.ident metadata in an '.ident' directive.<br>
+    void EmitModuleIdents(Module &M);<br>
     void EmitXXStructorList(const Constant *List, bool isCtor);<br>
     GCMetadataPrinter *GetOrCreateGCPrinter(GCStrategy *C);<br>
   };<br>
Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
===================================================================<br>
--- lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp<br>
@@ -953,6 +953,9 @@<br>
     if (GCMetadataPrinter *MP = GetOrCreateGCPrinter(*--I))<br>
       MP->finishAssembly(*this);<br>
<br>
+  // Emit llvm.ident metadata in an '.ident' directive.<br>
+  EmitModuleIdents(M);<br>
+<br>
   // If we don't have any trampolines, then we don't require stack memory<br>
   // to be executable. Some targets have a directive to declare this.<br>
   Function *InitTrampolineIntrinsic = M.getFunction("llvm.init.trampoline");<br>
@@ -1332,6 +1335,21 @@<br>
   }<br>
 }<br>
<br>
+void AsmPrinter::EmitModuleIdents(Module &M) {<br>
+  if (!MAI->hasIdentDirective())<br>
+    return;<br>
+<br>
+  if (const NamedMDNode *NMD = M.getNamedMetadata("llvm.ident")) {<br>
+    for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {<br>
+      const MDNode *N = NMD->getOperand(i);<br>
+      assert(N->getNumOperands() == 1 &&<br>
</div></div><div class="im">+             "llvm.ident metadata entry can have only one operand");<br>
</div>+      const MDString *S = cast<MDString>(N->getOperand(0));<br>
<div><div class="h5">+      OutStreamer.EmitIdent(S->getString());<br>
+    }<br>
+  }<br>
+}<br>
+<br>
 //===--------------------------------------------------------------------===//<br>
 // Emission and print routines<br>
 //<br>
Index: lib/IR/Verifier.cpp<br>
===================================================================<br>
--- lib/IR/Verifier.cpp<br>
+++ lib/IR/Verifier.cpp<br>
@@ -216,6 +216,7 @@<br>
         visitNamedMDNode(*I);<br>
<br>
       visitModuleFlags(M);<br>
+      visitModuleIdents(M);<br>
<br>
       // Verify Debug Info.<br>
       verifyDebugInfo(M);<br>
@@ -260,6 +261,7 @@<br>
     void visitGlobalAlias(GlobalAlias &GA);<br>
     void visitNamedMDNode(NamedMDNode &NMD);<br>
     void visitMDNode(MDNode &MD, Function *F);<br>
+    void visitModuleIdents(Module &M);<br>
     void visitModuleFlags(Module &M);<br>
     void visitModuleFlag(MDNode *Op, DenseMap<MDString*, MDNode*> &SeenIDs,<br>
                          SmallVectorImpl<MDNode*> &Requirements);<br>
</div></div>@@ -614,6 +616,24 @@<br>
   }<br>
 }<br>
<br>
+void Verifier::visitModuleIdents(Module &M) {<br>
<div class="im HOEnZb">+  const NamedMDNode *Idents = M.getNamedMetadata("llvm.ident");<br>
+  if (!Idents)<br>
</div><div class="HOEnZb"><div class="h5">+    return;<br>
+<br>
+  // llvm.ident takes a list of metadata entry. Each entry has only one string.<br>
+  // Scan each llvm.ident entry and make sure that this requirement is met.<br>
+  for (unsigned i = 0, e = Idents->getNumOperands(); i != e; ++i) {<br>
+    const MDNode *N = Idents->getOperand(i);<br>
+    Assert1(N->getNumOperands() == 1,<br>
+            "incorrect number of operands in llvm.ident metadata", N);<br>
+    Assert1(isa<MDString>(N->getOperand(0)),<br>
+            ("invalid value for llvm.ident metadata entry operand"<br>
+             "(the operand should be a string)"),<br>
+            N->getOperand(0));<br>
+  }<br>
+}<br>
+<br>
 void Verifier::visitModuleFlags(Module &M) {<br>
   const NamedMDNode *Flags = M.getModuleFlagsMetadata();<br>
   if (!Flags) return;<br>
</div></div><br>_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" class="cremed">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank" class="cremed">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
<br></blockquote></div><br></div></div>