[llvm-commits] [llvm] r63765 - in /llvm/trunk: ./ include/llvm/ include/llvm/Target/ lib/AsmParser/ lib/CodeGen/SelectionDAG/ lib/Target/ lib/VMCore/ utils/TableGen/

Bill Wendling isanbard at gmail.com
Wed Feb 4 14:16:36 PST 2009


Here's the error message:

g++ -m32 -c -g -DIN_GCC -W -Wall -Wwrite-strings
-Wmissing-format-attribute -mdynamic-no-pic -DHAVE_CONFIG_H
-Wno-unused -DTARGET_NAME=\"i686-apple-darwin9\" -DNDEBUG -I. -I.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../include
-I./../intl -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libcpp/include
 -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libdecnumber
-I../libdecnumber
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~obj/src/include
-DENABLE_LLVM -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include
 -D_DEBUG  -D_GNU_SOURCE -D__STDC_LIMIT_MACROS
-D__STDC_CONSTANT_MACROS -DLLVM_VERSION_INFO='"9999"'   -I. -I.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../include
-I./../intl -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libcpp/include
 -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libdecnumber
-I../libdecnumber
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~obj/src/include
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/llvm-debug.cpp
-o llvm-debug.o
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include/llvm/Intrinsics.gen:
In member function 'bool TreeToLLVM::EmitBuiltinCall(tree_node*,
tree_node*, const MemRef*, llvm::Value*&)':
/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include/llvm/Intrinsics.gen:5360:
error: a function-definition is not allowed here before '{' token
gcc -m32 -c   -g -DIN_GCC   -W -Wall -Wwrite-strings
-Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition
-Wmissing-format-attribute   -mdynamic-no-pic -DHAVE_CONFIG_H -I. -I.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/.
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../include
-I./../intl -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libcpp/include
 -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/../libdecnumber
-I../libdecnumber
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include
-I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~obj/src/include
-DENABLE_LLVM -I/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmCore.roots/llvmCore~dst/Developer/usr/local/include
 -D_DEBUG  -D_GNU_SOURCE -D__STDC_LIMIT_MACROS
-D__STDC_CONSTANT_MACROS -DLLVM_VERSION_INFO='"9999"'   \
		/Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvmgcc42.roots/llvmgcc42~obj/src/gcc/config/i386/i386.c
-o i386.o
make[4]: *** [llvm-convert.o] Error 1
make[4]: *** Waiting for unfinished jobs....

-bw

On Wed, Feb 4, 2009 at 1:48 PM, Dale Johannesen <dalej at apple.com> wrote:
> This seems to have broken both llvm-gcc and clang.   Could you look?
>
> On Feb 4, 2009, at 11:47 AMPST, Nate Begeman wrote:
>
>> Author: sampo
>> Date: Wed Feb  4 13:47:21 2009
>> New Revision: 63765
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=63765&view=rev
>> Log:
>> New feature: add support for target intrinsics being defined in the
>> target directories themselves.  This also means that VMCore no longer
>> needs to know about every target's list of intrinsics.  Future work
>> will include converting the PowerPC target to this interface as an
>> example implementation.
>>
>> Added:
>>    llvm/trunk/include/llvm/Target/TargetIntrinsicInfo.h
>>    llvm/trunk/lib/Target/TargetIntrinsicInfo.cpp
>> Modified:
>>    llvm/trunk/Makefile.rules
>>    llvm/trunk/include/llvm/Function.h
>>    llvm/trunk/include/llvm/Intrinsics.h
>>    llvm/trunk/include/llvm/Intrinsics.td
>>    llvm/trunk/include/llvm/Module.h
>>    llvm/trunk/include/llvm/Target/TargetMachine.h
>>    llvm/trunk/lib/AsmParser/LLParser.cpp
>>    llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
>>    llvm/trunk/lib/VMCore/AutoUpgrade.cpp
>>    llvm/trunk/lib/VMCore/Function.cpp
>>    llvm/trunk/lib/VMCore/Module.cpp
>>    llvm/trunk/lib/VMCore/Verifier.cpp
>>    llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>>    llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h
>>    llvm/trunk/utils/TableGen/CodeGenIntrinsics.h
>>    llvm/trunk/utils/TableGen/CodeGenTarget.cpp
>>    llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp
>>    llvm/trunk/utils/TableGen/IntrinsicEmitter.h
>>    llvm/trunk/utils/TableGen/TableGen.cpp
>>
>> Modified: llvm/trunk/Makefile.rules
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/Makefile.rules (original)
>> +++ llvm/trunk/Makefile.rules Wed Feb  4 13:47:21 2009
>> @@ -1346,6 +1346,11 @@
>>       $(Echo) "Building $(<F) calling convention information with tblgen"
>>       $(Verb) $(TableGen) -gen-callingconv -o $(call SYSPATH, $@) $<
>>
>> +$(TARGET:%=$(ObjDir)/%GenIntrinsics.inc.tmp): \
>> +$(ObjDir)/%GenIntrinsics.inc.tmp : Intrinsics%.td $(ObjDir)/.dir
>> +     $(Echo) "Building $(<F) calling convention information with tblgen"
>> +     $(Verb) $(TableGen) -gen-tgt-intrinsic -o $(call SYSPATH, $@) $<
>> +
>> clean-local::
>>       -$(Verb) $(RM) -f $(INCFiles)
>>
>>
>> Modified: llvm/trunk/include/llvm/Function.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Function.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Function.h (original)
>> +++ llvm/trunk/include/llvm/Function.h Wed Feb  4 13:47:21 2009
>> @@ -129,7 +129,7 @@
>>   /// The particular intrinsic functions which correspond to this
>> value are
>>   /// defined in llvm/Intrinsics.h.
>>   ///
>> -  unsigned getIntrinsicID(bool noAssert = false) const;
>> +  unsigned getIntrinsicID() const;
>>   bool isIntrinsic() const { return getIntrinsicID() != 0; }
>>
>>   /// getCallingConv()/setCallingConv(uint) - These method get and
>> set the
>>
>> Modified: llvm/trunk/include/llvm/Intrinsics.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Intrinsics.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Intrinsics.h (original)
>> +++ llvm/trunk/include/llvm/Intrinsics.h Wed Feb  4 13:47:21 2009
>> @@ -63,6 +63,9 @@
>>   /// intrinsic.
>>   Function *getDeclaration(Module *M, ID id, const Type **Tys = 0,
>>                            unsigned numTys = 0);
>> +
>> +  /// Map a GCC builtin name to an intrinsic ID.
>> +  ID getIntrinsicForGCCBuiltin(const char *Prefix, const char
>> *BuiltinName);
>>
>> } // End Intrinsic namespace
>>
>>
>> Modified: llvm/trunk/include/llvm/Intrinsics.td
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Intrinsics.td?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Intrinsics.td (original)
>> +++ llvm/trunk/include/llvm/Intrinsics.td Wed Feb  4 13:47:21 2009
>> @@ -144,6 +144,8 @@
>>   list<LLVMType> RetTypes = ret_types;
>>   list<LLVMType> ParamTypes = param_types;
>>   list<IntrinsicProperty> Properties = properties;
>> +
>> +  bit isTarget = 0;
>> }
>>
>> /// GCCBuiltin - If this intrinsic exactly corresponds to a GCC
>> builtin, this
>>
>> Modified: llvm/trunk/include/llvm/Module.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Module.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Module.h (original)
>> +++ llvm/trunk/include/llvm/Module.h Wed Feb  4 13:47:21 2009
>> @@ -213,6 +213,10 @@
>>   Constant *getOrInsertFunction(const std::string &Name, const Type
>> *RetTy, ...)
>>     END_WITH_NULL;
>>
>> +  Constant *getOrInsertTargetIntrinsic(const std::string &Name,
>> +                                       const FunctionType *Ty,
>> +                                       AttrListPtr AttributeList);
>> +
>>   /// getFunction - Look up the specified function in the module
>> symbol table.
>>   /// If it does not exist, return null.
>>   Function *getFunction(const std::string &Name) const;
>>
>> Added: llvm/trunk/include/llvm/Target/TargetIntrinsicInfo.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetIntrinsicInfo.h?rev=63765&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Target/TargetIntrinsicInfo.h (added)
>> +++ llvm/trunk/include/llvm/Target/TargetIntrinsicInfo.h Wed Feb  4
>> 13:47:21 2009
>> @@ -0,0 +1,48 @@
>> +//===-- llvm/Target/TargetIntrinsicInfo.h - Instruction Info ----*-
>> C++ -*-===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file describes the target intrinsic instructions to the
>> code generator.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#ifndef LLVM_TARGET_TARGETINTRINSICINFO_H
>> +#define LLVM_TARGET_TARGETINTRINSICINFO_H
>> +
>> +namespace llvm {
>> +
>> +class Function;
>> +class Module;
>> +
>> +
>> //---------------------------------------------------------------------------
>> +///
>> +/// TargetIntrinsicInfo - Interface to description of machine
>> instruction set
>> +///
>> +class TargetIntrinsicInfo {
>> +
>> +  const char **Intrinsics;               // Raw array to allow
>> static init'n
>> +  unsigned NumIntrinsics;                // Number of entries in
>> the desc array
>> +
>> +  TargetIntrinsicInfo(const TargetIntrinsicInfo &);  // DO NOT
>> IMPLEMENT
>> +  void operator=(const TargetIntrinsicInfo &);   // DO NOT IMPLEMENT
>> +public:
>> +  TargetIntrinsicInfo(const char **desc, unsigned num);
>> +  virtual ~TargetIntrinsicInfo();
>> +
>> +  unsigned getNumIntrinsics() const { return NumIntrinsics; }
>> +
>> +  virtual Function *getDeclaration(Module *M, const char
>> *BuiltinName) const {
>> +    return 0;
>> +  }
>> +
>> +  virtual unsigned getIntrinsicID(Function *F) const { return 0; }
>> +};
>> +
>> +} // End llvm namespace
>> +
>> +#endif
>>
>> Modified: llvm/trunk/include/llvm/Target/TargetMachine.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Target/TargetMachine.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/include/llvm/Target/TargetMachine.h (original)
>> +++ llvm/trunk/include/llvm/Target/TargetMachine.h Wed Feb  4
>> 13:47:21 2009
>> @@ -23,6 +23,7 @@
>> class TargetData;
>> class TargetSubtarget;
>> class TargetInstrInfo;
>> +class TargetIntrinsicInfo;
>> class TargetJITInfo;
>> class TargetLowering;
>> class TargetFrameInfo;
>> @@ -118,7 +119,6 @@
>>   virtual       TargetLowering    *getTargetLowering() const
>> { return 0; }
>>   virtual const TargetData            *getTargetData() const
>> { return 0; }
>>
>> -
>>   /// getTargetAsmInfo - Return target specific asm information.
>>   ///
>>   const TargetAsmInfo *getTargetAsmInfo() const {
>> @@ -141,6 +141,11 @@
>>   /// details of graph coloring register allocation removed from it.
>>   ///
>>   virtual const TargetRegisterInfo *getRegisterInfo() const { return
>> 0; }
>> +
>> +  /// getIntrinsicInfo - If intrinsic information is available,
>> return it.  If
>> +  /// not, return null.
>> +  ///
>> +  virtual const TargetIntrinsicInfo *getIntrinsicInfo() const
>> { return 0; }
>>
>>   /// getJITInfo - If this target supports a JIT, return information
>> for it,
>>   /// otherwise return null.
>>
>> Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
>> +++ llvm/trunk/lib/AsmParser/LLParser.cpp Wed Feb  4 13:47:21 2009
>> @@ -2949,15 +2949,6 @@
>>   Value *Callee;
>>   if (ConvertValIDToValue(PFTy, CalleeID, Callee, PFS)) return true;
>>
>> -  // Check for call to invalid intrinsic to avoid crashing later.
>> -  if (Function *F = dyn_cast<Function>(Callee)) {
>> -    if (F->hasName() && F->getNameLen() >= 5 &&
>> -        !strncmp(F->getValueName()->getKeyData(), "llvm.", 5) &&
>> -        !F->getIntrinsicID(true))
>> -      return Error(CallLoc, "Call to invalid LLVM intrinsic
>> function '" +
>> -                   F->getNameStr() + "'");
>> -  }
>> -
>>   // FIXME: In LLVM 3.0, stop accepting zext, sext and inreg as
>> optional
>>   // function attributes.
>>   unsigned ObsoleteFuncAttrs = Attribute::ZExt|Attribute::SExt|
>> Attribute::InReg;
>>
>> Modified: llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
>> (original)
>> +++ llvm/trunk/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp Wed
>> Feb  4 13:47:21 2009
>> @@ -43,6 +43,7 @@
>> #include "llvm/Target/TargetData.h"
>> #include "llvm/Target/TargetFrameInfo.h"
>> #include "llvm/Target/TargetInstrInfo.h"
>> +#include "llvm/Target/TargetIntrinsicInfo.h"
>> #include "llvm/Target/TargetLowering.h"
>> #include "llvm/Target/TargetMachine.h"
>> #include "llvm/Target/TargetOptions.h"
>> @@ -4426,6 +4427,14 @@
>>   const char *RenameFn = 0;
>>   if (Function *F = I.getCalledFunction()) {
>>     if (F->isDeclaration()) {
>> +      const TargetIntrinsicInfo *II =
>> TLI.getTargetMachine().getIntrinsicInfo();
>> +      if (II) {
>> +        if (unsigned IID = II->getIntrinsicID(F)) {
>> +          RenameFn = visitIntrinsicCall(I, IID);
>> +          if (!RenameFn)
>> +            return;
>> +        }
>> +      }
>>       if (unsigned IID = F->getIntrinsicID()) {
>>         RenameFn = visitIntrinsicCall(I, IID);
>>         if (!RenameFn)
>>
>> Added: llvm/trunk/lib/Target/TargetIntrinsicInfo.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/TargetIntrinsicInfo.cpp?rev=63765&view=auto
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/Target/TargetIntrinsicInfo.cpp (added)
>> +++ llvm/trunk/lib/Target/TargetIntrinsicInfo.cpp Wed Feb  4
>> 13:47:21 2009
>> @@ -0,0 +1,22 @@
>> +//===-- TargetIntrinsicInfo.cpp - Target Instruction Information
>> ----------===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open
>> Source
>> +// License. See LICENSE.TXT for details.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +//
>> +// This file implements the TargetIntrinsicInfo class.
>> +//
>> +//
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>> +
>> +#include "llvm/Target/TargetIntrinsicInfo.h"
>> +using namespace llvm;
>> +
>> +TargetIntrinsicInfo::TargetIntrinsicInfo(const char **desc,
>> unsigned count)
>> +  : Intrinsics(desc), NumIntrinsics(count) {
>> +}
>> +
>> +TargetIntrinsicInfo::~TargetIntrinsicInfo() {
>> +}
>>
>> Modified: llvm/trunk/lib/VMCore/AutoUpgrade.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/AutoUpgrade.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/VMCore/AutoUpgrade.cpp (original)
>> +++ llvm/trunk/lib/VMCore/AutoUpgrade.cpp Wed Feb  4 13:47:21 2009
>> @@ -217,7 +217,7 @@
>>   // Upgrade intrinsic attributes.  This does not change the function.
>>   if (NewFn)
>>     F = NewFn;
>> -  if (unsigned id = F->getIntrinsicID(true))
>> +  if (unsigned id = F->getIntrinsicID())
>>     F->setAttributes(Intrinsic::getAttributes((Intrinsic::ID)id));
>>   return Upgraded;
>> }
>>
>> Modified: llvm/trunk/lib/VMCore/Function.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Function.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/VMCore/Function.cpp (original)
>> +++ llvm/trunk/lib/VMCore/Function.cpp Wed Feb  4 13:47:21 2009
>> @@ -175,7 +175,7 @@
>>     ParentModule->getFunctionList().push_back(this);
>>
>>   // Ensure intrinsics have the right parameter attributes.
>> -  if (unsigned IID = getIntrinsicID(true))
>> +  if (unsigned IID = getIntrinsicID())
>>     setAttributes(Intrinsic::getAttributes(Intrinsic::ID(IID)));
>>
>> }
>> @@ -304,7 +304,7 @@
>> /// particular intrinsic functions which correspond to this value
>> are defined in
>> /// llvm/Intrinsics.h.
>> ///
>> -unsigned Function::getIntrinsicID(bool noAssert) const {
>> +unsigned Function::getIntrinsicID() const {
>>   const ValueName *ValName = this->getValueName();
>>   if (!ValName)
>>     return 0;
>> @@ -315,12 +315,9 @@
>>       || Name[2] != 'v' || Name[3] != 'm')
>>     return 0;  // All intrinsics start with 'llvm.'
>>
>> -  assert((Len != 5 || noAssert) && "'llvm.' is an invalid intrinsic
>> name!");
>> -
>> #define GET_FUNCTION_RECOGNIZER
>> #include "llvm/Intrinsics.gen"
>> #undef GET_FUNCTION_RECOGNIZER
>> -  assert(noAssert && "Invalid LLVM intrinsic name");
>>   return 0;
>> }
>>
>> @@ -373,4 +370,9 @@
>>                                           getType(id, Tys, numTys)));
>> }
>>
>> +// This defines the "Intrinsic::getIntrinsicForGCCBuiltin()" method.
>> +#define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
>> +#include "llvm/Intrinsics.gen"
>> +#undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
>> +
>> // vim: sw=2 ai
>>
>> Modified: llvm/trunk/lib/VMCore/Module.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Module.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/VMCore/Module.cpp (original)
>> +++ llvm/trunk/lib/VMCore/Module.cpp Wed Feb  4 13:47:21 2009
>> @@ -171,6 +171,25 @@
>>   return F;
>> }
>>
>> +Constant *Module::getOrInsertTargetIntrinsic(const std::string &Name,
>> +                                             const FunctionType *Ty,
>> +                                             AttrListPtr
>> AttributeList) {
>> +  ValueSymbolTable &SymTab = getValueSymbolTable();
>> +
>> +  // See if we have a definition for the specified function already.
>> +  GlobalValue *F =
>> dyn_cast_or_null<GlobalValue>(SymTab.lookup(Name));
>> +  if (F == 0) {
>> +    // Nope, add it
>> +    Function *New = Function::Create(Ty,
>> GlobalVariable::ExternalLinkage, Name);
>> +    New->setAttributes(AttributeList);
>> +    FunctionList.push_back(New);
>> +    return New; // Return the new prototype.
>> +  }
>> +
>> +  // Otherwise, we just found the existing function or a prototype.
>> +  return F;
>> +}
>> +
>> Constant *Module::getOrInsertFunction(const std::string &Name,
>>                                       const FunctionType *Ty) {
>>   AttrListPtr AttributeList = AttrListPtr::get((AttributeWithIndex
>> *)0, 0);
>>
>> Modified: llvm/trunk/lib/VMCore/Verifier.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/VMCore/Verifier.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/lib/VMCore/Verifier.cpp (original)
>> +++ llvm/trunk/lib/VMCore/Verifier.cpp Wed Feb  4 13:47:21 2009
>> @@ -1004,10 +1004,9 @@
>> void Verifier::visitCallInst(CallInst &CI) {
>>   VerifyCallSite(&CI);
>>
>> -  if (Function *F = CI.getCalledFunction()) {
>> +  if (Function *F = CI.getCalledFunction())
>>     if (Intrinsic::ID ID = (Intrinsic::ID)F->getIntrinsicID())
>>       visitIntrinsicFunctionCall(ID, CI);
>> -  }
>> }
>>
>> void Verifier::visitInvokeInst(InvokeInst &II) {
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.cpp Wed Feb  4
>> 13:47:21 2009
>> @@ -1303,7 +1303,8 @@
>>
>> // FIXME: REMOVE OSTREAM ARGUMENT
>> CodeGenDAGPatterns::CodeGenDAGPatterns(RecordKeeper &R) : Records(R) {
>> -  Intrinsics = LoadIntrinsics(Records);
>> +  Intrinsics = LoadIntrinsics(Records, false);
>> +  TgtIntrinsics = LoadIntrinsics(Records, true);
>>   ParseNodeInfo();
>>   ParseNodeTransforms();
>>   ParseComplexPatterns();
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenDAGPatterns.h Wed Feb  4
>> 13:47:21 2009
>> @@ -465,6 +465,7 @@
>>   RecordKeeper &Records;
>>   CodeGenTarget Target;
>>   std::vector<CodeGenIntrinsic> Intrinsics;
>> +  std::vector<CodeGenIntrinsic> TgtIntrinsics;
>>
>>   std::map<Record*, SDNodeInfo> SDNodes;
>>   std::map<Record*, std::pair<Record*, std::string> > SDNodeXForms;
>> @@ -515,18 +516,25 @@
>>   const CodeGenIntrinsic &getIntrinsic(Record *R) const {
>>     for (unsigned i = 0, e = Intrinsics.size(); i != e; ++i)
>>       if (Intrinsics[i].TheDef == R) return Intrinsics[i];
>> +    for (unsigned i = 0, e = TgtIntrinsics.size(); i != e; ++i)
>> +      if (TgtIntrinsics[i].TheDef == R) return TgtIntrinsics[i];
>>     assert(0 && "Unknown intrinsic!");
>>     abort();
>>   }
>>
>>   const CodeGenIntrinsic &getIntrinsicInfo(unsigned IID) const {
>> -    assert(IID-1 < Intrinsics.size() && "Bad intrinsic ID!");
>> -    return Intrinsics[IID-1];
>> +    if (IID-1 < Intrinsics.size())
>> +      return Intrinsics[IID-1];
>> +    if (IID-Intrinsics.size()-1 < TgtIntrinsics.size())
>> +      return TgtIntrinsics[IID-Intrinsics.size()-1];
>> +    assert(0 && "Bad intrinsic ID!");
>>   }
>>
>>   unsigned getIntrinsicID(Record *R) const {
>>     for (unsigned i = 0, e = Intrinsics.size(); i != e; ++i)
>>       if (Intrinsics[i].TheDef == R) return i;
>> +    for (unsigned i = 0, e = TgtIntrinsics.size(); i != e; ++i)
>> +      if (TgtIntrinsics[i].TheDef == R) return i + Intrinsics.size();
>>     assert(0 && "Unknown intrinsic!");
>>     abort();
>>   }
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenIntrinsics.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenIntrinsics.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenIntrinsics.h (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenIntrinsics.h Wed Feb  4
>> 13:47:21 2009
>> @@ -80,7 +80,8 @@
>>
>>   /// LoadIntrinsics - Read all of the intrinsics defined in the
>> specified
>>   /// .td file.
>> -  std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper
>> &RC);
>> +  std::vector<CodeGenIntrinsic> LoadIntrinsics(const RecordKeeper
>> &RC,
>> +                                               bool TargetOnly);
>> }
>>
>> #endif
>>
>> Modified: llvm/trunk/utils/TableGen/CodeGenTarget.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/CodeGenTarget.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/CodeGenTarget.cpp (original)
>> +++ llvm/trunk/utils/TableGen/CodeGenTarget.cpp Wed Feb  4 13:47:21
>> 2009
>> @@ -426,13 +426,17 @@
>> // CodeGenIntrinsic Implementation
>> //
>> =
>> =
>> =
>> ----------------------------------------------------------------------=
>> ==//
>>
>> -std::vector<CodeGenIntrinsic> llvm::LoadIntrinsics(const
>> RecordKeeper &RC) {
>> +std::vector<CodeGenIntrinsic> llvm::LoadIntrinsics(const
>> RecordKeeper &RC,
>> +                                                   bool TargetOnly) {
>>   std::vector<Record*> I = RC.getAllDerivedDefinitions("Intrinsic");
>>
>>   std::vector<CodeGenIntrinsic> Result;
>>
>> -  for (unsigned i = 0, e = I.size(); i != e; ++i)
>> -    Result.push_back(CodeGenIntrinsic(I[i]));
>> +  for (unsigned i = 0, e = I.size(); i != e; ++i) {
>> +    bool isTarget = I[i]->getValueAsBit("isTarget");
>> +    if (isTarget == TargetOnly)
>> +      Result.push_back(CodeGenIntrinsic(I[i]));
>> +  }
>>   return Result;
>> }
>>
>>
>> Modified: llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp (original)
>> +++ llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp Wed Feb  4
>> 13:47:21 2009
>> @@ -25,7 +25,10 @@
>> void IntrinsicEmitter::run(std::ostream &OS) {
>>   EmitSourceFileHeader("Intrinsic Function Source Fragment", OS);
>>
>> -  std::vector<CodeGenIntrinsic> Ints = LoadIntrinsics(Records);
>> +  std::vector<CodeGenIntrinsic> Ints = LoadIntrinsics(Records,
>> TargetOnly);
>> +
>> +  if (TargetOnly && !Ints.empty())
>> +    TargetPrefix = Ints[0].TargetPrefix;
>>
>>   // Emit the enum information.
>>   EmitEnumInfo(Ints, OS);
>> @@ -91,12 +94,12 @@
>>     if (Ints[I->second].isOverloaded)
>>       OS << "    if (Len > " << I->first.size()
>>        << " && !memcmp(Name, \"" << I->first << ".\", "
>> -       << (I->first.size() + 1) << ")) return Intrinsic::"
>> +       << (I->first.size() + 1) << ")) return " << TargetPrefix <<
>> "Intrinsic::"
>>        << Ints[I->second].EnumName << ";\n";
>>     else
>>       OS << "    if (Len == " << I->first.size()
>>          << " && !memcmp(Name, \"" << I->first << "\", "
>> -         << I->first.size() << ")) return Intrinsic::"
>> +         << I->first.size() << ")) return " << TargetPrefix <<
>> "Intrinsic::"
>>          << Ints[I->second].EnumName << ";\n";
>>   }
>>   OS << "  }\n";
>> @@ -351,11 +354,13 @@
>>                              Ints[i].IS.ParamTypeDefs)].push_back(i);
>>
>>   // Loop through the array, emitting one generator for each batch.
>> +  std::string IntrinsicStr = TargetPrefix + "Intrinsic::";
>> +
>>   for (MapTy::iterator I = UniqueArgInfos.begin(),
>>        E = UniqueArgInfos.end(); I != E; ++I) {
>>     for (unsigned i = 0, e = I->second.size(); i != e; ++i)
>> -      OS << "  case Intrinsic::" << Ints[I->second[i]].EnumName <<
>> ":\t\t// "
>> -         << Ints[I->second[i]].Name << "\n";
>> +      OS << "  case " << IntrinsicStr << Ints[I->second[i]].EnumName
>> +         << ":\t\t// " << Ints[I->second[i]].Name << "\n";
>>
>>     const RecPair &ArgTypes = I->first;
>>     const std::vector<Record*> &RetTys = ArgTypes.first;
>> @@ -392,7 +397,11 @@
>> EmitAttributes(const std::vector<CodeGenIntrinsic> &Ints,
>> std::ostream &OS) {
>>   OS << "// Add parameter attributes that are not common to all
>> intrinsics.\n";
>>   OS << "#ifdef GET_INTRINSIC_ATTRIBUTES\n";
>> -  OS << "AttrListPtr Intrinsic::getAttributes(ID id) {";
>> +  if (TargetOnly)
>> +    OS << "static AttrListPtr getAttributes(" << TargetPrefix
>> +       << "Intrinsic::ID id) {";
>> +  else
>> +    OS << "AttrListPtr Intrinsic::getAttributes(ID id) {";
>>   OS << "  // No intrinsic can throw exceptions.\n";
>>   OS << "  Attributes Attr = Attribute::NoUnwind;\n";
>>   OS << "  switch (id) {\n";
>> @@ -404,7 +413,8 @@
>>     switch (Ints[i].ModRef) {
>>     default: break;
>>     case CodeGenIntrinsic::NoMem:
>> -      OS << "  case Intrinsic::" << Ints[i].EnumName << ":\n";
>> +      OS << "  case " << TargetPrefix << "Intrinsic::" <<
>> Ints[i].EnumName
>> +         << ":\n";
>>       break;
>>     }
>>   }
>> @@ -415,7 +425,8 @@
>>     default: break;
>>     case CodeGenIntrinsic::ReadArgMem:
>>     case CodeGenIntrinsic::ReadMem:
>> -      OS << "  case Intrinsic::" << Ints[i].EnumName << ":\n";
>> +      OS << "  case " << TargetPrefix << "Intrinsic::" <<
>> Ints[i].EnumName
>> +         << ":\n";
>>       break;
>>     }
>>   }
>> @@ -431,7 +442,8 @@
>>   for (unsigned i = 0, e = Ints.size(); i != e; ++i) {
>>     if (Ints[i].ArgumentAttributes.empty()) continue;
>>
>> -    OS << "  case Intrinsic::" << Ints[i].EnumName << ":\n";
>> +    OS << "  case " << TargetPrefix << "Intrinsic::" <<
>> Ints[i].EnumName
>> +       << ":\n";
>>
>>     std::vector<std::pair<unsigned, CodeGenIntrinsic::ArgAttribute>
>> > ArgAttrs =
>>       Ints[i].ArgumentAttributes;
>> @@ -495,7 +507,7 @@
>> typedef std::map<std::string, std::string>::const_iterator
>> StrMapIterator;
>> static void EmitBuiltinComparisons(StrMapIterator Start,
>> StrMapIterator End,
>>                                    unsigned CharStart, unsigned
>> Indent,
>> -                                   std::ostream &OS) {
>> +                                   std::string TargetPrefix,
>> std::ostream &OS) {
>>   if (Start == End) return; // empty range.
>>
>>   // Determine what, if anything, is the same about all these strings.
>> @@ -522,7 +534,8 @@
>>       OS << CommonString.size() - CharStart << "))\n";
>>       ++Indent;
>>     }
>> -    OS << std::string(Indent*2, ' ') << "IntrinsicID = Intrinsic::";
>> +    OS << std::string(Indent*2, ' ') << "IntrinsicID = " <<
>> TargetPrefix
>> +       << "Intrinsic::";
>>     OS << Start->second << ";\n";
>>     return;
>>   }
>> @@ -535,7 +548,8 @@
>>     OS << ", \"" << (CommonString.c_str()+CharStart) << "\", ";
>>     OS << CommonString.size()-CharStart << ")) {\n";
>>
>> -    EmitBuiltinComparisons(Start, End, CommonString.size(), Indent
>> +1, OS);
>> +    EmitBuiltinComparisons(Start, End, CommonString.size(), Indent+1,
>> +                           TargetPrefix, OS);
>>     OS << std::string(Indent*2, ' ') << "}\n";
>>     return;
>>   }
>> @@ -556,7 +570,7 @@
>>     for (++NextChar; NextChar != End && NextChar->first[CharStart]
>> == ThisChar;
>>          ++NextChar)
>>       /*empty*/;
>> -    EmitBuiltinComparisons(I, NextChar, CharStart+1, Indent+1, OS);
>> +    EmitBuiltinComparisons(I, NextChar, CharStart+1, Indent+1,
>> TargetPrefix,OS);
>>     OS << std::string(Indent*2, ' ') << "  break;\n";
>>     I = NextChar;
>>   }
>> @@ -566,6 +580,7 @@
>> /// EmitTargetBuiltins - All of the builtins in the specified map
>> are for the
>> /// same target, and we already checked it.
>> static void EmitTargetBuiltins(const std::map<std::string,
>> std::string> &BIM,
>> +                               const std::string &TargetPrefix,
>>                                std::ostream &OS) {
>>   // Rearrange the builtins by length.
>>   std::vector<std::map<std::string, std::string> > BuiltinsByLen;
>> @@ -584,7 +599,7 @@
>>     if (BuiltinsByLen[i].empty()) continue;
>>     OS << "    case " << i << ":\n";
>>     EmitBuiltinComparisons(BuiltinsByLen[i].begin(),
>> BuiltinsByLen[i].end(),
>> -                           0, 3, OS);
>> +                           0, 3, TargetPrefix, OS);
>>     OS << "      break;\n";
>>   }
>>   OS << "    }\n";
>> @@ -613,7 +628,22 @@
>>   OS << "// in as BuiltinName, and a target prefix (e.g. 'ppc') is
>> passed\n";
>>   OS << "// in as TargetPrefix.  The result is assigned to
>> 'IntrinsicID'.\n";
>>   OS << "#ifdef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN\n";
>> -  OS << "  IntrinsicID = Intrinsic::not_intrinsic;\n";
>> +
>> +  if (TargetOnly) {
>> +    OS << "static " << TargetPrefix << "Intrinsic::ID "
>> +       << "getIntrinsicForGCCBuiltin(const char "
>> +       << "*TargetPrefix, const char *BuiltinName) {\n";
>> +    OS << "  " << TargetPrefix << "Intrinsic::ID IntrinsicID = ";
>> +  } else {
>> +    OS << "Intrinsic::ID Intrinsic::getIntrinsicForGCCBuiltin(const
>> char "
>> +       << "*TargetPrefix, const char *BuiltinName) {\n";
>> +    OS << "  Intrinsic::ID IntrinsicID = ";
>> +  }
>> +
>> +  if (TargetOnly)
>> +    OS << "(" << TargetPrefix<< "Intrinsic::ID)";
>> +
>> +  OS << "Intrinsic::not_intrinsic;\n";
>>
>>   // Note: this could emit significantly better code if we cared.
>>   for (BIMTy::iterator I = BuiltinMap.begin(), E =
>> BuiltinMap.end();I != E;++I){
>> @@ -625,8 +655,10 @@
>>     OS << "{\n";
>>
>>     // Emit the comparisons for this target prefix.
>> -    EmitTargetBuiltins(I->second, OS);
>> +    EmitTargetBuiltins(I->second, TargetPrefix, OS);
>>     OS << "  }\n";
>>   }
>> +  OS << "  return IntrinsicID;\n";
>> +  OS << "}\n";
>>   OS << "#endif\n\n";
>> }
>>
>> Modified: llvm/trunk/utils/TableGen/IntrinsicEmitter.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/IntrinsicEmitter.h?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/IntrinsicEmitter.h (original)
>> +++ llvm/trunk/utils/TableGen/IntrinsicEmitter.h Wed Feb  4 13:47:21
>> 2009
>> @@ -20,9 +20,12 @@
>> namespace llvm {
>>   class IntrinsicEmitter : public TableGenBackend {
>>     RecordKeeper &Records;
>> +    bool TargetOnly;
>> +    std::string TargetPrefix;
>>
>>   public:
>> -    IntrinsicEmitter(RecordKeeper &R) : Records(R) {}
>> +    IntrinsicEmitter(RecordKeeper &R, bool T = false)
>> +      : Records(R), TargetOnly(T) {}
>>
>>     void run(std::ostream &OS);
>>
>>
>> Modified: llvm/trunk/utils/TableGen/TableGen.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=63765&r1=63764&r2=63765&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> ======================================================================
>> --- llvm/trunk/utils/TableGen/TableGen.cpp (original)
>> +++ llvm/trunk/utils/TableGen/TableGen.cpp Wed Feb  4 13:47:21 2009
>> @@ -49,6 +49,7 @@
>>   GenFastISel,
>>   GenSubtarget,
>>   GenIntrinsic,
>> +  GenTgtIntrinsic,
>>   GenLLVMCConf,
>>   PrintEnums
>> };
>> @@ -82,6 +83,8 @@
>>                                "Generate subtarget enumerations"),
>>                     clEnumValN(GenIntrinsic, "gen-intrinsic",
>>                                "Generate intrinsic information"),
>> +                    clEnumValN(GenTgtIntrinsic, "gen-tgt-intrinsic",
>> +                               "Generate target intrinsic
>> information"),
>>                     clEnumValN(GenLLVMCConf, "gen-llvmc",
>>                                "Generate LLVMC configuration
>> library"),
>>                     clEnumValN(PrintEnums, "print-enums",
>> @@ -190,6 +193,9 @@
>>     case GenIntrinsic:
>>       IntrinsicEmitter(Records).run(*Out);
>>       break;
>> +    case GenTgtIntrinsic:
>> +      IntrinsicEmitter(Records, true).run(*Out);
>> +      break;
>>     case GenLLVMCConf:
>>       LLVMCConfigurationEmitter(Records).run(*Out);
>>       break;
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
> _______________________________________________
> 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