[llvm-commits] [llvm] r104910 - in /llvm/trunk/utils/TableGen: CMakeLists.txt NeonEmitter.cpp NeonEmitter.h TableGen.cpp

Bill Wendling wendling at apple.com
Thu May 27 18:24:13 PDT 2010


hi Nate,

This is causing build failures here:

	http://google1.osuosl.org:8011/builders/llvm-gcc-x86_64-darwin10-self-mingw32/builds/408

-bw

On May 27, 2010, at 6:08 PM, Nate Begeman wrote:

> Author: sampo
> Date: Thu May 27 20:08:32 2010
> New Revision: 104910
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=104910&view=rev
> Log:
> Add support to tablegen for auto-generating arm_neon.h from a tablegen description
> of the intrinsics.  The goal is to auto-generate both support for GCC-style (vector)
> and ARM-style (struct of vector) intrinsics.
> 
> This is work in progress, but will be completed soon.
> 
> Added:
>    llvm/trunk/utils/TableGen/NeonEmitter.cpp
>    llvm/trunk/utils/TableGen/NeonEmitter.h
> Modified:
>    llvm/trunk/utils/TableGen/CMakeLists.txt
>    llvm/trunk/utils/TableGen/TableGen.cpp
> 
> Modified: llvm/trunk/utils/TableGen/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CMakeLists.txt?rev=104910&r1=104909&r2=104910&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/CMakeLists.txt (original)
> +++ llvm/trunk/utils/TableGen/CMakeLists.txt Thu May 27 20:08:32 2010
> @@ -22,6 +22,7 @@
>   InstrInfoEmitter.cpp
>   IntrinsicEmitter.cpp
>   LLVMCConfigurationEmitter.cpp
> +  NeonEmitter.cpp
>   OptParserEmitter.cpp
>   Record.cpp
>   RegisterInfoEmitter.cpp
> 
> Added: llvm/trunk/utils/TableGen/NeonEmitter.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/NeonEmitter.cpp?rev=104910&view=auto
> ==============================================================================
> --- llvm/trunk/utils/TableGen/NeonEmitter.cpp (added)
> +++ llvm/trunk/utils/TableGen/NeonEmitter.cpp Thu May 27 20:08:32 2010
> @@ -0,0 +1,62 @@
> +//===- NeonEmitter.cpp - Generate arm_neon.h for use with clang -*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This tablegen backend is responsible for emitting arm_neon.h, which includes
> +// a declaration and definition of each function specified by the ARM NEON 
> +// compiler interface.  See ARM document DUI0348B.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#include "NeonEmitter.h"
> +#include "Record.h"
> +#include "llvm/ADT/StringExtras.h"
> +#include "llvm/ADT/StringMap.h"
> +#include <string>
> +
> +using namespace llvm;
> +
> +void NeonEmitter::run(raw_ostream &OS) {
> +  EmitSourceFileHeader("ARM NEON Header", OS);
> +  
> +  // FIXME: emit license into file?
> +  
> +  OS << "#ifndef __ARM_NEON_H\n";
> +  OS << "#define __ARM_NEON_H\n\n";
> +  
> +  OS << "#ifndef __ARM_NEON__\n";
> +  OS << "#error \"NEON support not enabled\"\n";
> +  OS << "#endif\n\n";
> +
> +  OS << "#include <stdint.h>\n\n";
> +  
> +  // EmitTypedefs(OS);
> +  
> +  // Process Records
> +  
> +  std::vector<Record*> RV = Records.getAllDerivedDefinitions("Inst");
> +  
> +  // Unique the pattern types, and assign them 
> +  
> +  // emit #define directives for uniq'd prototypes
> +  
> +  // emit record directives
> +  
> +  for (unsigned i = 0, e = RV.size(); i != e; ++i) {
> +    Record *R = RV[i];
> +    
> +    OS << LowercaseString(R->getName()) << "\n";
> +
> +    std::string Types = R->getValueAsString("Types");
> +    std::string Pattern = R->getValueAsString("Pattern");
> +    
> +    OS << Types << "\n" << Pattern << "\n\n";
> +  }
> +  
> +  OS << "#endif /* __ARM_NEON_H */\n";
> +}
> 
> Added: llvm/trunk/utils/TableGen/NeonEmitter.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/NeonEmitter.h?rev=104910&view=auto
> ==============================================================================
> --- llvm/trunk/utils/TableGen/NeonEmitter.h (added)
> +++ llvm/trunk/utils/TableGen/NeonEmitter.h Thu May 27 20:08:32 2010
> @@ -0,0 +1,34 @@
> +//===- NeonEmitter.h - Generate arm_neon.h for use with clang ---*- C++ -*-===//
> +//
> +//                     The LLVM Compiler Infrastructure
> +//
> +// This file is distributed under the University of Illinois Open Source
> +// License. See LICENSE.TXT for details.
> +//
> +//===----------------------------------------------------------------------===//
> +//
> +// This tablegen backend is responsible for emitting arm_neon.h, which includes
> +// a declaration and definition of each function specified by the ARM NEON 
> +// compiler interface.  See ARM document DUI0348B.
> +//
> +//===----------------------------------------------------------------------===//
> +
> +#ifndef NEON_EMITTER_H
> +#define NEON_EMITTER_H
> +
> +#include "TableGenBackend.h"
> +
> +namespace llvm {
> +  
> +  class NeonEmitter : public TableGenBackend {
> +    RecordKeeper &Records;
> +  public:
> +    NeonEmitter(RecordKeeper &R) : Records(R) {}
> +    
> +    // runHeader - Emit a header file that allows use of the instruction table.
> +    void run(raw_ostream &o);
> +  };
> +  
> +} // End llvm namespace
> +
> +#endif
> 
> Modified: llvm/trunk/utils/TableGen/TableGen.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=104910&r1=104909&r2=104910&view=diff
> ==============================================================================
> --- llvm/trunk/utils/TableGen/TableGen.cpp (original)
> +++ llvm/trunk/utils/TableGen/TableGen.cpp Thu May 27 20:08:32 2010
> @@ -29,6 +29,7 @@
> #include "InstrInfoEmitter.h"
> #include "IntrinsicEmitter.h"
> #include "LLVMCConfigurationEmitter.h"
> +#include "NeonEmitter.h"
> #include "OptParserEmitter.h"
> #include "Record.h"
> #include "RegisterInfoEmitter.h"
> @@ -63,6 +64,7 @@
>   GenTgtIntrinsic,
>   GenLLVMCConf,
>   GenEDHeader, GenEDInfo,
> +  GenNeonHeader,
>   PrintEnums
> };
> 
> @@ -119,6 +121,8 @@
>                                "Generate enhanced disassembly info header"),
>                     clEnumValN(GenEDInfo, "gen-enhanced-disassembly-info",
>                                "Generate enhanced disassembly info"),
> +                    clEnumValN(GenNeonHeader, "gen-arm-neon-header",
> +                               "Generate arm_neon.h for clang"),
>                     clEnumValN(PrintEnums, "print-enums",
>                                "Print enum values for a class"),
>                     clEnumValEnd));
> @@ -280,6 +284,9 @@
>     case GenEDInfo:
>       EDEmitter(Records).run(Out);
>       break;
> +    case GenNeonHeader:
> +      NeonEmitter(Records).run(*Out);
> +      break;
>     case PrintEnums:
>     {
>       std::vector<Record*> Recs = Records.getAllDerivedDefinitions(Class);
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits





More information about the llvm-commits mailing list