[llvm] r335407 - [IR] Split Intrinsics.inc into enums and implementations

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Sat Jun 23 10:38:07 PDT 2018


That bot appears to build clang-llvm-proto-fuzzer, an off by default
target. I wasn't able to build it easily, but I made a speculative fix for
it in r335419.

On Sat, Jun 23, 2018 at 7:57 AM Kamil Rytarowski <n54 at gmx.com> wrote:

> This broke the NetBSD buildbot:
>
> http://lab.llvm.org:8011/builders/lldb-amd64-ninja-netbsd8/builds/13814
>
> On 23.06.2018 04:02, Reid Kleckner via llvm-commits wrote:
> > Author: rnk
> > Date: Fri Jun 22 19:02:38 2018
> > New Revision: 335407
> >
> > URL: http://llvm.org/viewvc/llvm-project?rev=335407&view=rev
> > Log:
> > [IR] Split Intrinsics.inc into enums and implementations
> >
> > Implements PR34259
> >
> > Intrinsics.h is a very popular header. Most LLVM TUs care about things
> > like dbg_value, but they don't care how they are implemented. After I
> > split these out, IntrinsicImpl.inc is 1.7 MB, so this saves each LLVM TU
> > from scanning 1.7 MB of source that gets pre-processed away.
> >
> > It also means we can modify intrinsic properties without triggering a
> > full rebuild, but that's probably less of a win.
> >
> > I think the next best thing to do would be to split out the target
> > intrinsics into their own header. Very, very few TUs care about
> > target-specific intrinsics. It's very hard to split up the target
> > independent intrinsics like llvm.expect, assume, and dbg.value, though.
> >
> > Modified:
> >     llvm/trunk/include/llvm/IR/CMakeLists.txt
> >     llvm/trunk/include/llvm/IR/Intrinsics.h
> >     llvm/trunk/lib/IR/Function.cpp
> >     llvm/trunk/lib/Target/AMDGPU/CMakeLists.txt
> >     llvm/trunk/test/TableGen/intrinsic-long-name.td
> >     llvm/trunk/test/TableGen/intrinsic-struct.td
> >     llvm/trunk/test/TableGen/intrinsic-varargs.td
> >     llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp
> >     llvm/trunk/utils/TableGen/TableGen.cpp
> >     llvm/trunk/utils/TableGen/TableGenBackends.h
> >
> > Modified: llvm/trunk/include/llvm/IR/CMakeLists.txt
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/CMakeLists.txt?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/IR/CMakeLists.txt (original)
> > +++ llvm/trunk/include/llvm/IR/CMakeLists.txt Fri Jun 22 19:02:38 2018
> > @@ -2,5 +2,6 @@ set(LLVM_TARGET_DEFINITIONS Attributes.t
> >  tablegen(LLVM Attributes.inc -gen-attrs)
> >
> >  set(LLVM_TARGET_DEFINITIONS Intrinsics.td)
> > -tablegen(LLVM Intrinsics.inc -gen-intrinsic)
> > +tablegen(LLVM IntrinsicEnums.inc -gen-intrinsic-enums)
> > +tablegen(LLVM IntrinsicImpl.inc -gen-intrinsic-impl)
> >  add_public_tablegen_target(intrinsics_gen)
> >
> > Modified: llvm/trunk/include/llvm/IR/Intrinsics.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/IR/Intrinsics.h?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/include/llvm/IR/Intrinsics.h (original)
> > +++ llvm/trunk/include/llvm/IR/Intrinsics.h Fri Jun 22 19:02:38 2018
> > @@ -39,7 +39,7 @@ namespace Intrinsic {
> >
> >      // Get the intrinsic enums generated from Intrinsics.td
> >  #define GET_INTRINSIC_ENUM_VALUES
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicEnums.inc"
> >  #undef GET_INTRINSIC_ENUM_VALUES
> >      , num_intrinsics
> >    };
> >
> > Modified: llvm/trunk/lib/IR/Function.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/Function.cpp?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/IR/Function.cpp (original)
> > +++ llvm/trunk/lib/IR/Function.cpp Fri Jun 22 19:02:38 2018
> > @@ -487,13 +487,13 @@ void Function::copyAttributesFrom(const
> >  static const char * const IntrinsicNameTable[] = {
> >    "not_intrinsic",
> >  #define GET_INTRINSIC_NAME_TABLE
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_INTRINSIC_NAME_TABLE
> >  };
> >
> >  /// Table of per-target intrinsic name tables.
> >  #define GET_INTRINSIC_TARGET_DATA
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_INTRINSIC_TARGET_DATA
> >
> >  /// Find the segment of \c IntrinsicNameTable for intrinsics with the
> same
> > @@ -840,7 +840,7 @@ static void DecodeIITType(unsigned &Next
> >  }
> >
> >  #define GET_INTRINSIC_GENERATOR_GLOBAL
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_INTRINSIC_GENERATOR_GLOBAL
> >
> >  void Intrinsic::getIntrinsicInfoTableEntries(ID id,
> > @@ -977,7 +977,7 @@ FunctionType *Intrinsic::getType(LLVMCon
> >
> >  bool Intrinsic::isOverloaded(ID id) {
> >  #define GET_INTRINSIC_OVERLOAD_TABLE
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_INTRINSIC_OVERLOAD_TABLE
> >  }
> >
> > @@ -995,7 +995,7 @@ bool Intrinsic::isLeaf(ID id) {
> >
> >  /// This defines the "Intrinsic::getAttributes(ID id)" method.
> >  #define GET_INTRINSIC_ATTRIBUTES
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_INTRINSIC_ATTRIBUTES
> >
> >  Function *Intrinsic::getDeclaration(Module *M, ID id, ArrayRef<Type*>
> Tys) {
> > @@ -1008,12 +1008,12 @@ Function *Intrinsic::getDeclaration(Modu
> >
> >  // This defines the "Intrinsic::getIntrinsicForGCCBuiltin()" method.
> >  #define GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
> >
> >  // This defines the "Intrinsic::getIntrinsicForMSBuiltin()" method.
> >  #define GET_LLVM_INTRINSIC_FOR_MS_BUILTIN
> > -#include "llvm/IR/Intrinsics.inc"
> > +#include "llvm/IR/IntrinsicImpl.inc"
> >  #undef GET_LLVM_INTRINSIC_FOR_MS_BUILTIN
> >
> >  bool Intrinsic::matchIntrinsicType(Type *Ty,
> ArrayRef<Intrinsic::IITDescriptor> &Infos,
> >
> > Modified: llvm/trunk/lib/Target/AMDGPU/CMakeLists.txt
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AMDGPU/CMakeLists.txt?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/lib/Target/AMDGPU/CMakeLists.txt (original)
> > +++ llvm/trunk/lib/Target/AMDGPU/CMakeLists.txt Fri Jun 22 19:02:38 2018
> > @@ -7,7 +7,8 @@ tablegen(LLVM AMDGPUGenDAGISel.inc -gen-
> >  tablegen(LLVM AMDGPUGenDFAPacketizer.inc -gen-dfa-packetizer)
> >  tablegen(LLVM AMDGPUGenDisassemblerTables.inc -gen-disassembler)
> >  tablegen(LLVM AMDGPUGenInstrInfo.inc -gen-instr-info)
> > -tablegen(LLVM AMDGPUGenIntrinsics.inc -gen-tgt-intrinsic)
> > +tablegen(LLVM AMDGPUGenIntrinsicEnums.inc -gen-tgt-intrinsic-enums)
> > +tablegen(LLVM AMDGPUGenIntrinsicImpl.inc -gen-tgt-intrinsic-impl)
> >  tablegen(LLVM AMDGPUGenMCCodeEmitter.inc -gen-emitter)
> >  tablegen(LLVM AMDGPUGenMCPseudoLowering.inc -gen-pseudo-lowering)
> >  tablegen(LLVM AMDGPUGenRegisterBank.inc -gen-register-bank)
> >
> > Modified: llvm/trunk/test/TableGen/intrinsic-long-name.td
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/intrinsic-long-name.td?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/TableGen/intrinsic-long-name.td (original)
> > +++ llvm/trunk/test/TableGen/intrinsic-long-name.td Fri Jun 22 19:02:38
> 2018
> > @@ -1,4 +1,4 @@
> > -// RUN: llvm-tblgen -gen-intrinsic %s | FileCheck %s
> > +// RUN: llvm-tblgen -gen-intrinsic-enums %s | FileCheck %s
> >  // XFAIL: vg_leak
> >
> >  class IntrinsicProperty;
> >
> > Modified: llvm/trunk/test/TableGen/intrinsic-struct.td
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/intrinsic-struct.td?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/TableGen/intrinsic-struct.td (original)
> > +++ llvm/trunk/test/TableGen/intrinsic-struct.td Fri Jun 22 19:02:38
> 2018
> > @@ -1,4 +1,4 @@
> > -// RUN: llvm-tblgen -gen-intrinsic %s | FileCheck %s
> > +// RUN: llvm-tblgen -gen-intrinsic-enums %s | FileCheck %s
> >  // XFAIL: vg_leak
> >
> >  class IntrinsicProperty;
> >
> > Modified: llvm/trunk/test/TableGen/intrinsic-varargs.td
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/TableGen/intrinsic-varargs.td?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/test/TableGen/intrinsic-varargs.td (original)
> > +++ llvm/trunk/test/TableGen/intrinsic-varargs.td Fri Jun 22 19:02:38
> 2018
> > @@ -1,4 +1,4 @@
> > -// RUN: llvm-tblgen -gen-intrinsic %s | FileCheck %s
> > +// RUN: llvm-tblgen -gen-intrinsic-impl %s | FileCheck %s
> >  // XFAIL: vg_leak
> >
> >  class IntrinsicProperty;
> >
> > Modified: llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp (original)
> > +++ llvm/trunk/utils/TableGen/IntrinsicEmitter.cpp Fri Jun 22 19:02:38
> 2018
> > @@ -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 &
> >
> >    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);
> >  }
> > @@ -839,6 +841,12 @@ void IntrinsicEmitter::EmitIntrinsicToBu
> >    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);
> >  }
> >
> > Modified: llvm/trunk/utils/TableGen/TableGen.cpp
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGen.cpp?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/utils/TableGen/TableGen.cpp (original)
> > +++ llvm/trunk/utils/TableGen/TableGen.cpp Fri Jun 22 19:02:38 2018
> > @@ -38,8 +38,10 @@ enum ActionType {
> >    GenDFAPacketizer,
> >    GenFastISel,
> >    GenSubtarget,
> > -  GenIntrinsic,
> > -  GenTgtIntrinsic,
> > +  GenIntrinsicEnums,
> > +  GenIntrinsicImpl,
> > +  GenTgtIntrinsicEnums,
> > +  GenTgtIntrinsicImpl,
> >    PrintEnums,
> >    PrintSets,
> >    GenOptParserDefs,
> > @@ -85,9 +87,13 @@ namespace {
> >                                 "Generate a \"fast\" instruction
> selector"),
> >                      clEnumValN(GenSubtarget, "gen-subtarget",
> >                                 "Generate subtarget enumerations"),
> > -                    clEnumValN(GenIntrinsic, "gen-intrinsic",
> > +                    clEnumValN(GenIntrinsicEnums, "gen-intrinsic-enums",
> > +                               "Generate intrinsic enums"),
> > +                    clEnumValN(GenIntrinsicImpl, "gen-intrinsic-impl",
> >                                 "Generate intrinsic information"),
> > -                    clEnumValN(GenTgtIntrinsic, "gen-tgt-intrinsic",
> > +                    clEnumValN(GenTgtIntrinsicEnums,
> "gen-tgt-intrinsic-enums",
> > +                               "Generate target intrinsic enums"),
> > +                    clEnumValN(GenTgtIntrinsicImpl,
> "gen-tgt-intrinsic-impl",
> >                                 "Generate target intrinsic information"),
> >                      clEnumValN(PrintEnums, "print-enums",
> >                                 "Print enum values for a class"),
> > @@ -162,11 +168,17 @@ bool LLVMTableGenMain(raw_ostream &OS, R
> >    case GenSubtarget:
> >      EmitSubtarget(Records, OS);
> >      break;
> > -  case GenIntrinsic:
> > -    EmitIntrinsics(Records, OS);
> > +  case GenIntrinsicEnums:
> > +    EmitIntrinsicEnums(Records, OS);
> >      break;
> > -  case GenTgtIntrinsic:
> > -    EmitIntrinsics(Records, OS, true);
> > +  case GenIntrinsicImpl:
> > +    EmitIntrinsicImpl(Records, OS);
> > +    break;
> > +  case GenTgtIntrinsicEnums:
> > +    EmitIntrinsicEnums(Records, OS, true);
> > +    break;
> > +  case GenTgtIntrinsicImpl:
> > +    EmitIntrinsicImpl(Records, OS, true);
> >      break;
> >    case GenOptParserDefs:
> >      EmitOptParser(Records, OS);
> >
> > Modified: llvm/trunk/utils/TableGen/TableGenBackends.h
> > URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/TableGen/TableGenBackends.h?rev=335407&r1=335406&r2=335407&view=diff
> >
> ==============================================================================
> > --- llvm/trunk/utils/TableGen/TableGenBackends.h (original)
> > +++ llvm/trunk/utils/TableGen/TableGenBackends.h Fri Jun 22 19:02:38 2018
> > @@ -62,7 +62,10 @@ namespace llvm {
> >  class raw_ostream;
> >  class RecordKeeper;
> >
> > -void EmitIntrinsics(RecordKeeper &RK, raw_ostream &OS, bool TargetOnly
> = false);
> > +void EmitIntrinsicEnums(RecordKeeper &RK, raw_ostream &OS,
> > +                        bool TargetOnly = false);
> > +void EmitIntrinsicImpl(RecordKeeper &RK, raw_ostream &OS,
> > +                       bool TargetOnly = false);
> >  void EmitAsmMatcher(RecordKeeper &RK, raw_ostream &OS);
> >  void EmitAsmWriter(RecordKeeper &RK, raw_ostream &OS);
> >  void EmitCallingConv(RecordKeeper &RK, raw_ostream &OS);
> >
> >
> > _______________________________________________
> > llvm-commits mailing list
> > llvm-commits at lists.llvm.org
> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> >
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180623/28e59f5e/attachment.html>


More information about the llvm-commits mailing list