diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-03-01 02:16:57 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-03-01 02:16:57 +0000 |
commit | acd78d50921c32db8b82603c66a0d56555b286cb (patch) | |
tree | 4e5d11a0941f6e98249794846d2d2e2a32e6089d /llvm/utils/TableGen/IntrinsicEmitter.cpp | |
parent | d18cd186d0280043415f3102b206b219f184d1e8 (diff) | |
download | bcm5719-llvm-acd78d50921c32db8b82603c66a0d56555b286cb.tar.gz bcm5719-llvm-acd78d50921c32db8b82603c66a0d56555b286cb.zip |
Emit the "is an intrinsic overloaded" table as a bitfield.
llvm-svn: 151792
Diffstat (limited to 'llvm/utils/TableGen/IntrinsicEmitter.cpp')
-rw-r--r-- | llvm/utils/TableGen/IntrinsicEmitter.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/utils/TableGen/IntrinsicEmitter.cpp b/llvm/utils/TableGen/IntrinsicEmitter.cpp index c5e36239a53..578b3aa2439 100644 --- a/llvm/utils/TableGen/IntrinsicEmitter.cpp +++ b/llvm/utils/TableGen/IntrinsicEmitter.cpp @@ -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"; } |