<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 6, 2018 at 3:31 AM, Robert Widmann via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: codafi<br>
Date: Thu Apr  5 19:31:29 2018<br>
New Revision: 329369<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=329369&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=329369&view=rev</a><br>
Log:<br>
[LLVM-C] Audit Inline Assembly APIs for Consistency<br>
<br>
Summary:<br>
- Add a missing getter for module-level inline assembly<br>
- Add a missing append function for module-level inline assembly<br>
- Deprecate LLVMSetModuleInlineAsm and replace it with LLVMSetModuleInlineAsm2 which takes an explicit length parameter<br>
- Deprecate LLVMConstInlineAsm and replace it with LLVMGetInlineAsm, a function that allows passing a dialect and is not mis-classified as a constant operation<br>
<br>
Reviewers: whitequark, deadalnix<br>
<br>
Reviewed By: whitequark<br>
<br>
Subscribers: llvm-commits<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D45346" rel="noreferrer" target="_blank">https://reviews.llvm.org/<wbr>D45346</a><br>
<br>
Modified:<br>
    llvm/trunk/include/llvm-c/<wbr>Core.h<br>
    llvm/trunk/lib/IR/Core.cpp<br>
    llvm/trunk/test/Bindings/llvm-<wbr>c/echo.ll<br>
    llvm/trunk/tools/llvm-c-test/<wbr>echo.cpp<br>
<br>
Modified: llvm/trunk/lib/IR/Core.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Core.cpp?rev=329369&r1=329368&r2=329369&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/lib/IR/<wbr>Core.cpp?rev=329369&r1=329368&<wbr>r2=329369&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/lib/IR/Core.cpp (original)<br>
+++ llvm/trunk/lib/IR/Core.cpp Thu Apr  5 19:31:29 2018<br>
@@ -304,10 +304,42 @@ char *LLVMPrintModuleToString(<wbr>LLVMModule<br>
 }<br>
<br>
 /*--.. Operations on inline assembler ..............................<wbr>........--*/<br>
+void LLVMSetModuleInlineAsm2(<wbr>LLVMModuleRef M, const char *Asm, size_t Len) {<br>
+  unwrap(M)->setModuleInlineAsm(<wbr>StringRef(Asm, Len));<br>
+}<br>
+<br>
 void LLVMSetModuleInlineAsm(<wbr>LLVMModuleRef M, const char *Asm) {<br>
   unwrap(M)->setModuleInlineAsm(<wbr>StringRef(Asm));<br>
 }<br>
<br>
+void LLVMAppendModuleInlineAsm(<wbr>LLVMModuleRef M, const char *Asm, size_t Len) {<br>
+  unwrap(M)-><wbr>appendModuleInlineAsm(<wbr>StringRef(Asm, Len));<br>
+}<br>
+<br>
+const char *LLVMGetModuleInlineAsm(<wbr>LLVMModuleRef M, size_t *Len) {<br>
+  auto &Str = unwrap(M)->getModuleInlineAsm(<wbr>);<br>
+  *Len = Str.length();<br>
+  return Str.c_str();<br>
+}<br>
+<br>
+LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty,<br>
+                              char *AsmString, size_t AsmStringSize,<br>
+                              char *Constraints, size_t ConstraintsSize,<br>
+                              LLVMBool HasSideEffects, LLVMBool IsAlignStack,<br>
+                              LLVMInlineAsmDialect Dialect) {<br>
+  InlineAsm::AsmDialect AD;<br>
+  switch (Dialect) {<br>
+  case LLVMInlineAsmDialectATT:<br>
+    AD = InlineAsm::AD_ATT;<br>
+  case LLVMInlineAsmDialectIntel:<br>
+    AD = InlineAsm::AD_Intel;<br>
+  }<br></blockquote><div><br>
This fall-through doesn't sound right.<br></div><div>Is it intentional?<br></div><div><br>See: <a href="http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/6977/steps/build-unified-tree/logs/stdio">http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/6977/steps/build-unified-tree/logs/stdio</a><br><br></div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+  return wrap(InlineAsm::get(unwrap<<wbr>FunctionType>(Ty),<br>
+                             StringRef(AsmString, AsmStringSize),<br>
+                             StringRef(Constraints, ConstraintsSize),<br>
+                             HasSideEffects, IsAlignStack, AD));<br>
+}<br>
+<br>
<br>
 /*--.. Operations on module contexts ..............................<wbr>........--*/<br>
 LLVMContextRef LLVMGetModuleContext(<wbr>LLVMModuleRef M) {<br>
<br>
Modified: llvm/trunk/test/Bindings/llvm-<wbr>c/echo.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bindings/llvm-c/echo.ll?rev=329369&r1=329368&r2=329369&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/test/<wbr>Bindings/llvm-c/echo.ll?rev=<wbr>329369&r1=329368&r2=329369&<wbr>view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/test/Bindings/llvm-<wbr>c/echo.ll (original)<br>
+++ llvm/trunk/test/Bindings/llvm-<wbr>c/echo.ll Thu Apr  5 19:31:29 2018<br>
@@ -6,6 +6,8 @@ source_filename = "/test/Bindings/echo.l<br>
 target datalayout = "e-m:o-i64:64-f80:128-n8:16:<wbr>32:64-S128"<br>
 target triple = "x86_64-apple-macosx10.11.0"<br>
<br>
+module asm "classical GAS"<br>
+<br>
 %S = type { i64, %S* }<br>
<br>
 @var = global i32 42<br>
<br>
Modified: llvm/trunk/tools/llvm-c-test/<wbr>echo.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-c-test/echo.cpp?rev=329369&r1=329368&r2=329369&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/llvm/trunk/tools/llvm-<wbr>c-test/echo.cpp?rev=329369&r1=<wbr>329368&r2=329369&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- llvm/trunk/tools/llvm-c-test/<wbr>echo.cpp (original)<br>
+++ llvm/trunk/tools/llvm-c-test/<wbr>echo.cpp Thu Apr  5 19:31:29 2018<br>
@@ -1002,6 +1002,10 @@ int llvm_echo(void) {<br>
   if (strcmp(LLVMGetDataLayoutStr(<wbr>M), LLVMGetDataLayoutStr(Src)))<br>
     report_fatal_error("<wbr>Inconsistent DataLayout string representation");<br>
<br>
+  size_t ModuleInlineAsmLen;<br>
+  const char *ModuleAsm = LLVMGetModuleInlineAsm(Src, &ModuleInlineAsmLen);<br>
+  LLVMSetModuleInlineAsm2(M, ModuleAsm, ModuleInlineAsmLen);<br>
+<br>
   declare_symbols(Src, M);<br>
   clone_symbols(Src, M);<br>
   char *Str = LLVMPrintModuleToString(M);<br>
<br>
<br>
______________________________<wbr>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>