[llvm] r329369 - [LLVM-C] Audit Inline Assembly APIs for Consistency

Andrea Di Biagio via llvm-commits llvm-commits at lists.llvm.org
Tue Apr 10 06:33:54 PDT 2018


On Fri, Apr 6, 2018 at 3:31 AM, Robert Widmann via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: codafi
> Date: Thu Apr  5 19:31:29 2018
> New Revision: 329369
>
> URL: http://llvm.org/viewvc/llvm-project?rev=329369&view=rev
> Log:
> [LLVM-C] Audit Inline Assembly APIs for Consistency
>
> Summary:
> - Add a missing getter for module-level inline assembly
> - Add a missing append function for module-level inline assembly
> - Deprecate LLVMSetModuleInlineAsm and replace it with
> LLVMSetModuleInlineAsm2 which takes an explicit length parameter
> - Deprecate LLVMConstInlineAsm and replace it with LLVMGetInlineAsm, a
> function that allows passing a dialect and is not mis-classified as a
> constant operation
>
> Reviewers: whitequark, deadalnix
>
> Reviewed By: whitequark
>
> Subscribers: llvm-commits
>
> Differential Revision: https://reviews.llvm.org/D45346
>
> Modified:
>     llvm/trunk/include/llvm-c/Core.h
>     llvm/trunk/lib/IR/Core.cpp
>     llvm/trunk/test/Bindings/llvm-c/echo.ll
>     llvm/trunk/tools/llvm-c-test/echo.cpp
>
> Modified: llvm/trunk/lib/IR/Core.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/
> Core.cpp?rev=329369&r1=329368&r2=329369&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/IR/Core.cpp (original)
> +++ llvm/trunk/lib/IR/Core.cpp Thu Apr  5 19:31:29 2018
> @@ -304,10 +304,42 @@ char *LLVMPrintModuleToString(LLVMModule
>  }
>
>  /*--.. Operations on inline assembler ..............................
> ........--*/
> +void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t
> Len) {
> +  unwrap(M)->setModuleInlineAsm(StringRef(Asm, Len));
> +}
> +
>  void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm) {
>    unwrap(M)->setModuleInlineAsm(StringRef(Asm));
>  }
>
> +void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t
> Len) {
> +  unwrap(M)->appendModuleInlineAsm(StringRef(Asm, Len));
> +}
> +
> +const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len) {
> +  auto &Str = unwrap(M)->getModuleInlineAsm();
> +  *Len = Str.length();
> +  return Str.c_str();
> +}
> +
> +LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty,
> +                              char *AsmString, size_t AsmStringSize,
> +                              char *Constraints, size_t ConstraintsSize,
> +                              LLVMBool HasSideEffects, LLVMBool
> IsAlignStack,
> +                              LLVMInlineAsmDialect Dialect) {
> +  InlineAsm::AsmDialect AD;
> +  switch (Dialect) {
> +  case LLVMInlineAsmDialectATT:
> +    AD = InlineAsm::AD_ATT;
> +  case LLVMInlineAsmDialectIntel:
> +    AD = InlineAsm::AD_Intel;
> +  }
>

This fall-through doesn't sound right.
Is it intentional?

See:
http://lab.llvm.org:8011/builders/ubuntu-gcc7.1-werror/builds/6977/steps/build-unified-tree/logs/stdio



> +  return wrap(InlineAsm::get(unwrap<FunctionType>(Ty),
> +                             StringRef(AsmString, AsmStringSize),
> +                             StringRef(Constraints, ConstraintsSize),
> +                             HasSideEffects, IsAlignStack, AD));
> +}
> +
>
>  /*--.. Operations on module contexts ..............................
> ........--*/
>  LLVMContextRef LLVMGetModuleContext(LLVMModuleRef M) {
>
> Modified: llvm/trunk/test/Bindings/llvm-c/echo.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> Bindings/llvm-c/echo.ll?rev=329369&r1=329368&r2=329369&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/Bindings/llvm-c/echo.ll (original)
> +++ llvm/trunk/test/Bindings/llvm-c/echo.ll Thu Apr  5 19:31:29 2018
> @@ -6,6 +6,8 @@ source_filename = "/test/Bindings/echo.l
>  target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128"
>  target triple = "x86_64-apple-macosx10.11.0"
>
> +module asm "classical GAS"
> +
>  %S = type { i64, %S* }
>
>  @var = global i32 42
>
> Modified: llvm/trunk/tools/llvm-c-test/echo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-
> c-test/echo.cpp?rev=329369&r1=329368&r2=329369&view=diff
> ============================================================
> ==================
> --- llvm/trunk/tools/llvm-c-test/echo.cpp (original)
> +++ llvm/trunk/tools/llvm-c-test/echo.cpp Thu Apr  5 19:31:29 2018
> @@ -1002,6 +1002,10 @@ int llvm_echo(void) {
>    if (strcmp(LLVMGetDataLayoutStr(M), LLVMGetDataLayoutStr(Src)))
>      report_fatal_error("Inconsistent DataLayout string representation");
>
> +  size_t ModuleInlineAsmLen;
> +  const char *ModuleAsm = LLVMGetModuleInlineAsm(Src,
> &ModuleInlineAsmLen);
> +  LLVMSetModuleInlineAsm2(M, ModuleAsm, ModuleInlineAsmLen);
> +
>    declare_symbols(Src, M);
>    clone_symbols(Src, M);
>    char *Str = LLVMPrintModuleToString(M);
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180410/facab3d2/attachment.html>


More information about the llvm-commits mailing list