diff options
Diffstat (limited to 'contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp')
| -rw-r--r-- | contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp | 56 |
1 files changed, 33 insertions, 23 deletions
diff --git a/contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp b/contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp index ba793ad9b938..06e44e3b57c1 100644 --- a/contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp +++ b/contrib/llvm/utils/TableGen/IntrinsicEmitter.cpp @@ -34,7 +34,7 @@ public: IntrinsicEmitter(RecordKeeper &R, bool T) : Records(R), TargetOnly(T) {} - void run(raw_ostream &OS); + void run(raw_ostream &OS, bool Enums); void EmitPrefix(raw_ostream &OS); @@ -56,7 +56,7 @@ public: // IntrinsicEmitter Implementation //===----------------------------------------------------------------------===// -void IntrinsicEmitter::run(raw_ostream &OS) { +void IntrinsicEmitter::run(raw_ostream &OS, bool Enums) { emitSourceFileHeader("Intrinsic Function Source Fragment", OS); CodeGenIntrinsicTable Ints(Records, TargetOnly); @@ -66,29 +66,31 @@ void IntrinsicEmitter::run(raw_ostream &OS) { EmitPrefix(OS); - // Emit the enum information. - EmitEnumInfo(Ints, OS); - - // Emit the target metadata. - EmitTargetInfo(Ints, OS); + if (Enums) { + // Emit the enum information. + EmitEnumInfo(Ints, OS); + } else { + // Emit the target metadata. + EmitTargetInfo(Ints, OS); - // Emit the intrinsic ID -> name table. - EmitIntrinsicToNameTable(Ints, OS); + // Emit the intrinsic ID -> name table. + EmitIntrinsicToNameTable(Ints, OS); - // Emit the intrinsic ID -> overload table. - EmitIntrinsicToOverloadTable(Ints, OS); + // Emit the intrinsic ID -> overload table. + EmitIntrinsicToOverloadTable(Ints, OS); - // Emit the intrinsic declaration generator. - EmitGenerator(Ints, OS); + // Emit the intrinsic declaration generator. + EmitGenerator(Ints, OS); - // Emit the intrinsic parameter attributes. - EmitAttributes(Ints, OS); + // Emit the intrinsic parameter attributes. + EmitAttributes(Ints, OS); - // Emit code to translate GCC builtins into LLVM intrinsics. - EmitIntrinsicToBuiltinMap(Ints, true, OS); + // Emit code to translate GCC builtins into LLVM intrinsics. + EmitIntrinsicToBuiltinMap(Ints, true, OS); - // Emit code to translate MS builtins into LLVM intrinsics. - EmitIntrinsicToBuiltinMap(Ints, false, OS); + // Emit code to translate MS builtins into LLVM intrinsics. + EmitIntrinsicToBuiltinMap(Ints, false, OS); + } EmitSuffix(OS); } @@ -172,7 +174,7 @@ void IntrinsicEmitter::EmitIntrinsicToOverloadTable( } -// NOTE: This must be kept in synch with the copy in lib/VMCore/Function.cpp! +// NOTE: This must be kept in synch with the copy in lib/IR/Function.cpp! enum IIT_Info { // Common values should be encoded with 0-15. IIT_Done = 0, @@ -217,7 +219,8 @@ enum IIT_Info { IIT_V1024 = 37, IIT_STRUCT6 = 38, IIT_STRUCT7 = 39, - IIT_STRUCT8 = 40 + IIT_STRUCT8 = 40, + IIT_F128 = 41 }; static void EncodeFixedValueType(MVT::SimpleValueType VT, @@ -240,6 +243,7 @@ static void EncodeFixedValueType(MVT::SimpleValueType VT, case MVT::f16: return Sig.push_back(IIT_F16); case MVT::f32: return Sig.push_back(IIT_F32); case MVT::f64: return Sig.push_back(IIT_F64); + case MVT::f128: return Sig.push_back(IIT_F128); case MVT::token: return Sig.push_back(IIT_TOKEN); case MVT::Metadata: return Sig.push_back(IIT_METADATA); case MVT::x86mmx: return Sig.push_back(IIT_MMX); @@ -839,6 +843,12 @@ void IntrinsicEmitter::EmitIntrinsicToBuiltinMap( OS << "#endif\n\n"; } -void llvm::EmitIntrinsics(RecordKeeper &RK, raw_ostream &OS, bool TargetOnly) { - IntrinsicEmitter(RK, TargetOnly).run(OS); +void llvm::EmitIntrinsicEnums(RecordKeeper &RK, raw_ostream &OS, + bool TargetOnly) { + IntrinsicEmitter(RK, TargetOnly).run(OS, /*Enums=*/true); +} + +void llvm::EmitIntrinsicImpl(RecordKeeper &RK, raw_ostream &OS, + bool TargetOnly) { + IntrinsicEmitter(RK, TargetOnly).run(OS, /*Enums=*/false); } |
