Skip to content

Commit 5d98695

Browse files
committed
[IR] Split out target specific intrinsic enums into separate headers
This has two main effects: - Optimizes debug info size by saving 221.86 MB of obj file size in a Windows optimized+debug build of 'all'. This is 3.03% of 7,332.7MB of object file size. - Incremental step towards decoupling target intrinsics. The enums are still compact, so adding and removing a single target-specific intrinsic will trigger a rebuild of all of LLVM. Assigning distinct target id spaces is potential future work. Part of PR34259 Reviewers: efriedma, echristo, MaskRay Reviewed By: echristo, MaskRay Differential Revision: https://reviews.llvm.org/D71320
1 parent 85ba5f6 commit 5d98695

File tree

76 files changed

+223
-49
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

76 files changed

+223
-49
lines changed

clang/lib/CodeGen/CGBuiltin.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,17 @@
3131
#include "llvm/IR/DataLayout.h"
3232
#include "llvm/IR/InlineAsm.h"
3333
#include "llvm/IR/Intrinsics.h"
34+
#include "llvm/IR/IntrinsicsAArch64.h"
35+
#include "llvm/IR/IntrinsicsAMDGPU.h"
36+
#include "llvm/IR/IntrinsicsARM.h"
37+
#include "llvm/IR/IntrinsicsBPF.h"
38+
#include "llvm/IR/IntrinsicsHexagon.h"
39+
#include "llvm/IR/IntrinsicsNVPTX.h"
40+
#include "llvm/IR/IntrinsicsPowerPC.h"
41+
#include "llvm/IR/IntrinsicsR600.h"
42+
#include "llvm/IR/IntrinsicsS390.h"
43+
#include "llvm/IR/IntrinsicsWebAssembly.h"
44+
#include "llvm/IR/IntrinsicsX86.h"
3445
#include "llvm/IR/MDBuilder.h"
3546
#include "llvm/Support/ConvertUTF.h"
3647
#include "llvm/Support/ScopedPrinter.h"

clang/lib/CodeGen/CGException.cpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,20 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
#include "CodeGenFunction.h"
1413
#include "CGCXXABI.h"
1514
#include "CGCleanup.h"
1615
#include "CGObjCRuntime.h"
16+
#include "CodeGenFunction.h"
1717
#include "ConstantEmitter.h"
1818
#include "TargetInfo.h"
1919
#include "clang/AST/Mangle.h"
2020
#include "clang/AST/StmtCXX.h"
2121
#include "clang/AST/StmtObjC.h"
2222
#include "clang/AST/StmtVisitor.h"
2323
#include "clang/Basic/TargetBuiltins.h"
24-
#include "llvm/IR/Intrinsics.h"
2524
#include "llvm/IR/IntrinsicInst.h"
25+
#include "llvm/IR/Intrinsics.h"
26+
#include "llvm/IR/IntrinsicsWebAssembly.h"
2627
#include "llvm/Support/SaveAndRestore.h"
2728

2829
using namespace clang;

clang/lib/CodeGen/CGExprScalar.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "llvm/IR/GetElementPtrTypeIterator.h"
3636
#include "llvm/IR/GlobalVariable.h"
3737
#include "llvm/IR/Intrinsics.h"
38+
#include "llvm/IR/IntrinsicsPowerPC.h"
3839
#include "llvm/IR/Module.h"
3940
#include <cstdarg>
4041

clang/lib/CodeGen/CGOpenMPRuntimeNVPTX.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "clang/AST/StmtVisitor.h"
2020
#include "clang/Basic/Cuda.h"
2121
#include "llvm/ADT/SmallPtrSet.h"
22+
#include "llvm/IR/IntrinsicsNVPTX.h"
2223

2324
using namespace clang;
2425
using namespace CodeGen;

llvm/include/llvm/Analysis/TargetTransformInfo.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
namespace llvm {
3737

3838
namespace Intrinsic {
39-
enum ID : unsigned;
39+
typedef unsigned ID;
4040
}
4141

4242
class AssumptionCache;

llvm/include/llvm/Analysis/VectorUtils.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ class Type;
252252
class Value;
253253

254254
namespace Intrinsic {
255-
enum ID : unsigned;
255+
typedef unsigned ID;
256256
}
257257

258258
/// Identify if the intrinsic is trivially vectorizable.

llvm/include/llvm/IR/CMakeLists.txt

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,20 @@ set(LLVM_TARGET_DEFINITIONS Attributes.td)
22
tablegen(LLVM Attributes.inc -gen-attrs)
33

44
set(LLVM_TARGET_DEFINITIONS Intrinsics.td)
5-
tablegen(LLVM IntrinsicEnums.inc -gen-intrinsic-enums)
65
tablegen(LLVM IntrinsicImpl.inc -gen-intrinsic-impl)
6+
tablegen(LLVM IntrinsicEnums.inc -gen-intrinsic-enums)
7+
tablegen(LLVM IntrinsicsAArch64.h -gen-intrinsic-enums -intrinsic-prefix=aarch64)
8+
tablegen(LLVM IntrinsicsAMDGPU.h -gen-intrinsic-enums -intrinsic-prefix=amdgcn)
9+
tablegen(LLVM IntrinsicsARM.h -gen-intrinsic-enums -intrinsic-prefix=arm)
10+
tablegen(LLVM IntrinsicsBPF.h -gen-intrinsic-enums -intrinsic-prefix=bpf)
11+
tablegen(LLVM IntrinsicsHexagon.h -gen-intrinsic-enums -intrinsic-prefix=hexagon)
12+
tablegen(LLVM IntrinsicsMips.h -gen-intrinsic-enums -intrinsic-prefix=mips)
13+
tablegen(LLVM IntrinsicsNVPTX.h -gen-intrinsic-enums -intrinsic-prefix=nvvm)
14+
tablegen(LLVM IntrinsicsPowerPC.h -gen-intrinsic-enums -intrinsic-prefix=ppc)
15+
tablegen(LLVM IntrinsicsR600.h -gen-intrinsic-enums -intrinsic-prefix=r600)
16+
tablegen(LLVM IntrinsicsRISCV.h -gen-intrinsic-enums -intrinsic-prefix=riscv)
17+
tablegen(LLVM IntrinsicsS390.h -gen-intrinsic-enums -intrinsic-prefix=s390)
18+
tablegen(LLVM IntrinsicsWebAssembly.h -gen-intrinsic-enums -intrinsic-prefix=wasm)
19+
tablegen(LLVM IntrinsicsX86.h -gen-intrinsic-enums -intrinsic-prefix=x86)
20+
tablegen(LLVM IntrinsicsXCore.h -gen-intrinsic-enums -intrinsic-prefix=xcore)
721
add_public_tablegen_target(intrinsics_gen)

llvm/include/llvm/IR/CallSite.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
namespace llvm {
4646

4747
namespace Intrinsic {
48-
enum ID : unsigned;
48+
typedef unsigned ID;
4949
}
5050

5151
template <typename FunTy = const Function, typename BBTy = const BasicBlock,

llvm/include/llvm/IR/Function.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
namespace llvm {
4444

4545
namespace Intrinsic {
46-
enum ID : unsigned;
46+
typedef unsigned ID;
4747
}
4848

4949
class AssemblyAnnotationWriter;

llvm/include/llvm/IR/GlobalValue.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class GlobalObject;
3838
class Module;
3939

4040
namespace Intrinsic {
41-
enum ID : unsigned;
41+
typedef unsigned ID;
4242
} // end namespace Intrinsic
4343

4444
class GlobalValue : public Constant {

llvm/include/llvm/IR/InstrTypes.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
namespace llvm {
4848

4949
namespace Intrinsic {
50-
enum ID : unsigned;
50+
typedef unsigned ID;
5151
}
5252

5353
//===----------------------------------------------------------------------===//

llvm/include/llvm/IR/Intrinsics.h

+7-4
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,17 @@ class AttributeList;
3333
/// function known by LLVM. The enum values are returned by
3434
/// Function::getIntrinsicID().
3535
namespace Intrinsic {
36-
enum ID : unsigned {
37-
not_intrinsic = 0, // Must be zero
36+
// Intrinsic ID type. This is an opaque typedef to facilitate splitting up
37+
// the enum into target-specific enums.
38+
typedef unsigned ID;
3839

39-
// Get the intrinsic enums generated from Intrinsics.td
40+
enum IndependentIntrinsics : unsigned {
41+
not_intrinsic = 0, // Must be zero
42+
43+
// Get the intrinsic enums generated from Intrinsics.td
4044
#define GET_INTRINSIC_ENUM_VALUES
4145
#include "llvm/IR/IntrinsicEnums.inc"
4246
#undef GET_INTRINSIC_ENUM_VALUES
43-
, num_intrinsics
4447
};
4548

4649
/// Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".

llvm/lib/Analysis/ConstantFolding.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
#include "llvm/IR/InstrTypes.h"
3838
#include "llvm/IR/Instruction.h"
3939
#include "llvm/IR/Instructions.h"
40+
#include "llvm/IR/Intrinsics.h"
41+
#include "llvm/IR/IntrinsicsX86.h"
4042
#include "llvm/IR/Operator.h"
4143
#include "llvm/IR/Type.h"
4244
#include "llvm/IR/Value.h"

llvm/lib/Analysis/MemoryLocation.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "llvm/IR/DataLayout.h"
1313
#include "llvm/IR/Instructions.h"
1414
#include "llvm/IR/IntrinsicInst.h"
15+
#include "llvm/IR/IntrinsicsARM.h"
1516
#include "llvm/IR/LLVMContext.h"
1617
#include "llvm/IR/Module.h"
1718
#include "llvm/IR/Type.h"

llvm/lib/Analysis/ValueTracking.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
#include "llvm/IR/Instructions.h"
5252
#include "llvm/IR/IntrinsicInst.h"
5353
#include "llvm/IR/Intrinsics.h"
54+
#include "llvm/IR/IntrinsicsAArch64.h"
55+
#include "llvm/IR/IntrinsicsX86.h"
5456
#include "llvm/IR/LLVMContext.h"
5557
#include "llvm/IR/Metadata.h"
5658
#include "llvm/IR/Module.h"

llvm/lib/CodeGen/CodeGenPrepare.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@
6060
#include "llvm/IR/Instructions.h"
6161
#include "llvm/IR/IntrinsicInst.h"
6262
#include "llvm/IR/Intrinsics.h"
63+
#include "llvm/IR/IntrinsicsAArch64.h"
64+
#include "llvm/IR/IntrinsicsX86.h"
6365
#include "llvm/IR/LLVMContext.h"
6466
#include "llvm/IR/MDBuilder.h"
6567
#include "llvm/IR/Module.h"

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
#include "llvm/ADT/Triple.h"
2828
#include "llvm/ADT/Twine.h"
2929
#include "llvm/Analysis/AliasAnalysis.h"
30-
#include "llvm/Analysis/BranchProbabilityInfo.h"
3130
#include "llvm/Analysis/BlockFrequencyInfo.h"
31+
#include "llvm/Analysis/BranchProbabilityInfo.h"
3232
#include "llvm/Analysis/ConstantFolding.h"
3333
#include "llvm/Analysis/EHPersonalities.h"
3434
#include "llvm/Analysis/Loads.h"
@@ -86,6 +86,8 @@
8686
#include "llvm/IR/Instructions.h"
8787
#include "llvm/IR/IntrinsicInst.h"
8888
#include "llvm/IR/Intrinsics.h"
89+
#include "llvm/IR/IntrinsicsAArch64.h"
90+
#include "llvm/IR/IntrinsicsWebAssembly.h"
8991
#include "llvm/IR/LLVMContext.h"
9092
#include "llvm/IR/Metadata.h"
9193
#include "llvm/IR/Module.h"

llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
#include "llvm/IR/Instructions.h"
7474
#include "llvm/IR/IntrinsicInst.h"
7575
#include "llvm/IR/Intrinsics.h"
76+
#include "llvm/IR/IntrinsicsWebAssembly.h"
7677
#include "llvm/IR/Metadata.h"
7778
#include "llvm/IR/Type.h"
7879
#include "llvm/IR/User.h"

llvm/lib/CodeGen/TypePromotion.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "llvm/IR/Instructions.h"
3333
#include "llvm/IR/IntrinsicInst.h"
3434
#include "llvm/IR/Intrinsics.h"
35+
#include "llvm/IR/IntrinsicsARM.h"
3536
#include "llvm/IR/Type.h"
3637
#include "llvm/IR/Value.h"
3738
#include "llvm/IR/Verifier.h"

llvm/lib/CodeGen/WasmEHPrepare.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@
8787
#include "llvm/IR/Dominators.h"
8888
#include "llvm/IR/IRBuilder.h"
8989
#include "llvm/IR/Intrinsics.h"
90+
#include "llvm/IR/IntrinsicsWebAssembly.h"
9091
#include "llvm/InitializePasses.h"
9192
#include "llvm/Pass.h"
9293
#include "llvm/Transforms/Utils/BasicBlockUtils.h"

llvm/lib/IR/AutoUpgrade.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
#include "llvm/IR/IRBuilder.h"
2323
#include "llvm/IR/Instruction.h"
2424
#include "llvm/IR/IntrinsicInst.h"
25+
#include "llvm/IR/IntrinsicsAArch64.h"
26+
#include "llvm/IR/IntrinsicsARM.h"
27+
#include "llvm/IR/IntrinsicsX86.h"
2528
#include "llvm/IR/LLVMContext.h"
2629
#include "llvm/IR/Module.h"
2730
#include "llvm/IR/Verifier.h"

llvm/lib/IR/Function.cpp

+17-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,21 @@
3030
#include "llvm/IR/InstIterator.h"
3131
#include "llvm/IR/Instruction.h"
3232
#include "llvm/IR/Instructions.h"
33-
#include "llvm/IR/IntrinsicInst.h"
3433
#include "llvm/IR/Intrinsics.h"
34+
#include "llvm/IR/IntrinsicsAArch64.h"
35+
#include "llvm/IR/IntrinsicsAMDGPU.h"
36+
#include "llvm/IR/IntrinsicsARM.h"
37+
#include "llvm/IR/IntrinsicsBPF.h"
38+
#include "llvm/IR/IntrinsicsHexagon.h"
39+
#include "llvm/IR/IntrinsicsMips.h"
40+
#include "llvm/IR/IntrinsicsNVPTX.h"
41+
#include "llvm/IR/IntrinsicsPowerPC.h"
42+
#include "llvm/IR/IntrinsicsR600.h"
43+
#include "llvm/IR/IntrinsicsRISCV.h"
44+
#include "llvm/IR/IntrinsicsS390.h"
45+
#include "llvm/IR/IntrinsicsWebAssembly.h"
46+
#include "llvm/IR/IntrinsicsX86.h"
47+
#include "llvm/IR/IntrinsicsXCore.h"
3548
#include "llvm/IR/LLVMContext.h"
3649
#include "llvm/IR/MDBuilder.h"
3750
#include "llvm/IR/Metadata.h"
@@ -560,7 +573,8 @@ Intrinsic::ID Function::lookupIntrinsicID(StringRef Name) {
560573
const auto MatchSize = strlen(NameTable[Idx]);
561574
assert(Name.size() >= MatchSize && "Expected either exact or prefix match");
562575
bool IsExactMatch = Name.size() == MatchSize;
563-
return IsExactMatch || isOverloaded(ID) ? ID : Intrinsic::not_intrinsic;
576+
return IsExactMatch || Intrinsic::isOverloaded(ID) ? ID
577+
: Intrinsic::not_intrinsic;
564578
}
565579

566580
void Function::recalculateIntrinsicID() {
@@ -639,7 +653,7 @@ static std::string getMangledTypeStr(Type* Ty) {
639653

640654
StringRef Intrinsic::getName(ID id) {
641655
assert(id < num_intrinsics && "Invalid intrinsic ID!");
642-
assert(!isOverloaded(id) &&
656+
assert(!Intrinsic::isOverloaded(id) &&
643657
"This version of getName does not support overloading");
644658
return IntrinsicNameTable[id];
645659
}

llvm/lib/IR/Verifier.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@
8686
#include "llvm/IR/Instructions.h"
8787
#include "llvm/IR/IntrinsicInst.h"
8888
#include "llvm/IR/Intrinsics.h"
89+
#include "llvm/IR/IntrinsicsWebAssembly.h"
8990
#include "llvm/IR/LLVMContext.h"
9091
#include "llvm/IR/Metadata.h"
9192
#include "llvm/IR/Module.h"

llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "llvm/IR/Function.h" // To access function attributes.
1818
#include "llvm/IR/GlobalValue.h"
1919
#include "llvm/IR/Intrinsics.h"
20+
#include "llvm/IR/IntrinsicsAArch64.h"
2021
#include "llvm/Support/Debug.h"
2122
#include "llvm/Support/ErrorHandling.h"
2223
#include "llvm/Support/KnownBits.h"

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
//
1111
//===----------------------------------------------------------------------===//
1212

13-
#include "AArch64ExpandImm.h"
1413
#include "AArch64ISelLowering.h"
1514
#include "AArch64CallingConvention.h"
15+
#include "AArch64ExpandImm.h"
1616
#include "AArch64MachineFunctionInfo.h"
1717
#include "AArch64PerfectShuffle.h"
1818
#include "AArch64RegisterInfo.h"
@@ -58,6 +58,7 @@
5858
#include "llvm/IR/Instructions.h"
5959
#include "llvm/IR/IntrinsicInst.h"
6060
#include "llvm/IR/Intrinsics.h"
61+
#include "llvm/IR/IntrinsicsAArch64.h"
6162
#include "llvm/IR/Module.h"
6263
#include "llvm/IR/OperandTraits.h"
6364
#include "llvm/IR/PatternMatch.h"

llvm/lib/Target/AArch64/AArch64InstructionSelector.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "llvm/CodeGen/MachineOperand.h"
3333
#include "llvm/CodeGen/MachineRegisterInfo.h"
3434
#include "llvm/IR/Type.h"
35+
#include "llvm/IR/IntrinsicsAArch64.h"
3536
#include "llvm/Support/Debug.h"
3637
#include "llvm/Support/raw_ostream.h"
3738

llvm/lib/Target/AArch64/AArch64StackTagging.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include "llvm/IR/Instruction.h"
4343
#include "llvm/IR/Instructions.h"
4444
#include "llvm/IR/IntrinsicInst.h"
45+
#include "llvm/IR/IntrinsicsAArch64.h"
4546
#include "llvm/IR/Metadata.h"
4647
#include "llvm/Pass.h"
4748
#include "llvm/Support/Casting.h"

llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "llvm/CodeGen/CostTable.h"
1616
#include "llvm/CodeGen/TargetLowering.h"
1717
#include "llvm/IR/IntrinsicInst.h"
18+
#include "llvm/IR/IntrinsicsAArch64.h"
1819
#include "llvm/Support/Debug.h"
1920
#include <algorithm>
2021
using namespace llvm;

llvm/lib/Target/AMDGPU/AMDGPU.h

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111
#define LLVM_LIB_TARGET_AMDGPU_AMDGPU_H
1212

1313
#include "llvm/Target/TargetMachine.h"
14+
#include "llvm/IR/IntrinsicsR600.h" // TODO: Sink this.
15+
#include "llvm/IR/IntrinsicsAMDGPU.h" // TODO: Sink this.
1416

1517
namespace llvm {
1618

llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
#include "llvm/IR/Instructions.h"
3838
#include "llvm/IR/IntrinsicInst.h"
3939
#include "llvm/IR/Intrinsics.h"
40+
#include "llvm/IR/IntrinsicsAMDGPU.h"
41+
#include "llvm/IR/IntrinsicsR600.h"
4042
#include "llvm/IR/LLVMContext.h"
4143
#include "llvm/IR/Metadata.h"
4244
#include "llvm/IR/Module.h"
@@ -268,7 +270,7 @@ AMDGPUPromoteAlloca::getLocalSizeYZ(IRBuilder<> &Builder) {
268270
Value *AMDGPUPromoteAlloca::getWorkitemID(IRBuilder<> &Builder, unsigned N) {
269271
const AMDGPUSubtarget &ST =
270272
AMDGPUSubtarget::get(*TM, *Builder.GetInsertBlock()->getParent());
271-
Intrinsic::ID IntrID = Intrinsic::ID::not_intrinsic;
273+
Intrinsic::ID IntrID = Intrinsic::not_intrinsic;
272274

273275
switch (N) {
274276
case 0:

llvm/lib/Target/AMDGPU/R600ISelLowering.cpp

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#include "llvm/CodeGen/SelectionDAG.h"
3838
#include "llvm/IR/Constants.h"
3939
#include "llvm/IR/DerivedTypes.h"
40+
#include "llvm/IR/IntrinsicsR600.h"
4041
#include "llvm/Support/Casting.h"
4142
#include "llvm/Support/Compiler.h"
4243
#include "llvm/Support/ErrorHandling.h"

0 commit comments

Comments
 (0)