forked from OSchip/llvm-project
Emit the "is an intrinsic overloaded" table as a bitfield.
llvm-svn: 151792
This commit is contained in:
parent
d18cd186d0
commit
acd78d5092
|
@ -74,16 +74,13 @@ lookupGCCName(const char *Name) const {
|
|||
}
|
||||
|
||||
bool MBlazeIntrinsicInfo::isOverloaded(unsigned IntrID) const {
|
||||
// Overload Table
|
||||
const bool OTable[] = {
|
||||
if (IntrID == 0)
|
||||
return false;
|
||||
|
||||
unsigned id = IntrID - Intrinsic::num_intrinsics + 1;
|
||||
#define GET_INTRINSIC_OVERLOAD_TABLE
|
||||
#include "MBlazeGenIntrinsics.inc"
|
||||
#undef GET_INTRINSIC_OVERLOAD_TABLE
|
||||
};
|
||||
if (IntrID == 0)
|
||||
return false;
|
||||
else
|
||||
return OTable[IntrID - Intrinsic::num_intrinsics];
|
||||
}
|
||||
|
||||
/// This defines the "getAttributes(ID id)" method.
|
||||
|
|
|
@ -372,13 +372,9 @@ FunctionType *Intrinsic::getType(LLVMContext &Context,
|
|||
}
|
||||
|
||||
bool Intrinsic::isOverloaded(ID id) {
|
||||
static const bool OTable[] = {
|
||||
false,
|
||||
#define GET_INTRINSIC_OVERLOAD_TABLE
|
||||
#include "llvm/Intrinsics.gen"
|
||||
#undef GET_INTRINSIC_OVERLOAD_TABLE
|
||||
};
|
||||
return OTable[id];
|
||||
}
|
||||
|
||||
/// This defines the "Intrinsic::getAttributes(ID id)" method.
|
||||
|
|
|
@ -160,17 +160,20 @@ EmitIntrinsicToNameTable(const std::vector<CodeGenIntrinsic> &Ints,
|
|||
void IntrinsicEmitter::
|
||||
EmitIntrinsicToOverloadTable(const std::vector<CodeGenIntrinsic> &Ints,
|
||||
raw_ostream &OS) {
|
||||
OS << "// Intrinsic ID to overload table\n";
|
||||
OS << "// Intrinsic ID to overload bitset\n";
|
||||
OS << "#ifdef GET_INTRINSIC_OVERLOAD_TABLE\n";
|
||||
OS << " // Note that entry #0 is the invalid intrinsic!\n";
|
||||
OS << "static const uint8_t OTable[] = {\n";
|
||||
OS << " 0";
|
||||
for (unsigned i = 0, e = Ints.size(); i != e; ++i) {
|
||||
OS << " ";
|
||||
// Add one to the index so we emit a null bit for the invalid #0 intrinsic.
|
||||
if ((i+1)%8 == 0)
|
||||
OS << ",\n 0";
|
||||
if (Ints[i].isOverloaded)
|
||||
OS << "true";
|
||||
else
|
||||
OS << "false";
|
||||
OS << ",\n";
|
||||
OS << " | (1<<" << (i+1)%8 << ')';
|
||||
}
|
||||
OS << "\n};\n\n";
|
||||
// OTable contains a true bit at the position if the intrinsic is overloaded.
|
||||
OS << "return (OTable[id/8] & (1 << (id%8))) != 0;\n";
|
||||
OS << "#endif\n\n";
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue