[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