Skip to content

Patch series to reapply #118734 and substantially improve it #120534

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 6 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions clang/include/clang/AST/Expr.h
Original file line number Diff line number Diff line change
Expand Up @@ -6678,7 +6678,6 @@ class PseudoObjectExpr final
class AtomicExpr : public Expr {
public:
enum AtomicOp {
#define BUILTIN(ID, TYPE, ATTRS)
#define ATOMIC_BUILTIN(ID, TYPE, ATTRS) AO ## ID,
#include "clang/Basic/Builtins.inc"
// Avoid trailing comma
Expand Down Expand Up @@ -6742,7 +6741,6 @@ class AtomicExpr : public Expr {
AtomicOp getOp() const { return Op; }
StringRef getOpAsString() const {
switch (Op) {
#define BUILTIN(ID, TYPE, ATTRS)
#define ATOMIC_BUILTIN(ID, TYPE, ATTRS) \
case AO##ID: \
return #ID;
Expand Down
232 changes: 192 additions & 40 deletions clang/include/clang/Basic/Builtins.h

Large diffs are not rendered by default.

7 changes: 0 additions & 7 deletions clang/include/clang/Basic/BuiltinsARM.def
Original file line number Diff line number Diff line change
Expand Up @@ -206,13 +206,6 @@ BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc")
// Misc
BUILTIN(__builtin_sponentry, "v*", "c")

// Builtins for implementing ACLE MVE intrinsics. (Unlike NEON, these
// don't need to live in a separate BuiltinsMVE.def, because they
// aren't included from both here and BuiltinsAArch64.def.)
#include "clang/Basic/arm_mve_builtins.inc"

#include "clang/Basic/arm_cde_builtins.inc"

// MSVC
LANGBUILTIN(__emit, "vIUiC", "", ALL_MS_LANGUAGES)

Expand Down
10 changes: 10 additions & 0 deletions clang/include/clang/Basic/BuiltinsBase.td
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,13 @@ def Consteval : Attribute<"EG">;
// indicated by the remaining indices.
class Callback<list<int> ArgIndices> : MultiIndexAttribute<"C", ArgIndices>;

// Prefixes
// ========

class NamePrefix<string spelling> {
string Spelling = spelling;
}

// Builtin kinds
// =============

Expand All @@ -99,6 +106,9 @@ class Builtin {
bit RequiresUndef = 0;
// Enables builtins to generate `long long` outside of OpenCL and `long` inside.
bit EnableOpenCLLong = 0;
// Requires a common prefix to be prepended. Each generated set of builtins
// can optionally extract one common prefix that is handled separately.
NamePrefix RequiredNamePrefix;
}

class AtomicBuiltin : Builtin;
Expand Down
5 changes: 4 additions & 1 deletion clang/include/clang/Basic/BuiltinsHexagon.td
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,13 @@ def HVXV65 : HVXV<"65", HVXV66>;
def HVXV62 : HVXV<"62", HVXV65>;
def HVXV60 : HVXV<"60", HVXV62>;

def HexagonPrefix : NamePrefix<"__builtin_HEXAGON_">;

class HexagonBuiltin<string prototype> : TargetBuiltin {
let Spellings = ["__builtin_HEXAGON_" # NAME];
let Spellings = [NAME];
let Prototype = prototype;
let Features = V5.Features;
let RequiredNamePrefix = HexagonPrefix; // Adds a prefix to the name.
}

class HexagonBuiltinNoPrefix<string prototype> : TargetBuiltin {
Expand Down
28 changes: 0 additions & 28 deletions clang/include/clang/Basic/BuiltinsLoongArch.def

This file was deleted.

22 changes: 0 additions & 22 deletions clang/include/clang/Basic/BuiltinsNEON.def

This file was deleted.

1 change: 1 addition & 0 deletions clang/include/clang/Basic/BuiltinsPPC.def
Original file line number Diff line number Diff line change
Expand Up @@ -1138,5 +1138,6 @@ UNALIASED_CUSTOM_BUILTIN(mma_pmxvbf16ger2nn, "vW512*VVi15i15i3", true,
// FIXME: Obviously incomplete.

#undef BUILTIN
#undef TARGET_BUILTIN
#undef CUSTOM_BUILTIN
#undef UNALIASED_CUSTOM_BUILTIN
22 changes: 0 additions & 22 deletions clang/include/clang/Basic/BuiltinsRISCVVector.def

This file was deleted.

5 changes: 4 additions & 1 deletion clang/include/clang/Basic/BuiltinsX86Base.td
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,13 @@

include "clang/Basic/BuiltinsBase.td"

def X86Prefix : NamePrefix<"__builtin_ia32_">;

class X86Builtin<string prototype> : TargetBuiltin {
let Spellings = ["__builtin_ia32_" # NAME];
let Spellings = [NAME];
let Prototype = prototype;
let EnableOpenCLLong = 1;
let RequiredNamePrefix = X86Prefix; // Adds a prefix to the name.
}

class X86NoPrefixBuiltin<string prototype> : TargetBuiltin {
Expand Down
3 changes: 2 additions & 1 deletion clang/include/clang/Basic/IdentifierTable.h
Original file line number Diff line number Diff line change
Expand Up @@ -101,8 +101,9 @@ enum class InterestingIdentifier {
NUM_OBJC_KEYWORDS_AND_NOTABLE_IDENTIFIERS,

NotBuiltin,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/Builtins.inc"
#undef GET_BUILTIN_ENUMERATORS
FirstTSBuiltin,

NotInterestingIdentifier = 65534
Expand Down
89 changes: 64 additions & 25 deletions clang/include/clang/Basic/TargetBuiltins.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,40 +26,60 @@ namespace clang {
namespace NEON {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
#include "clang/Basic/BuiltinsNEON.def"
#define GET_NEON_BUILTIN_ENUMERATORS
#include "clang/Basic/arm_neon.inc"
FirstFp16Builtin,
LastNeonBuiltin = FirstFp16Builtin - 1,
#include "clang/Basic/arm_fp16.inc"
#undef GET_NEON_BUILTIN_ENUMERATORS
FirstTSBuiltin
};
}

/// ARM builtins
namespace ARM {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
#define GET_MVE_BUILTIN_ENUMERATORS
#include "clang/Basic/arm_mve_builtins.inc"
#undef GET_MVE_BUILTIN_ENUMERATORS
FirstCDEBuiltin,
LastMVEBuiltin = FirstCDEBuiltin - 1,
#define GET_CDE_BUILTIN_ENUMERATORS
#include "clang/Basic/arm_cde_builtins.inc"
#undef GET_CDE_BUILTIN_ENUMERATORS
FirstARMBuiltin,
LastCDEBuiltin = FirstARMBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#include "clang/Basic/BuiltinsARM.def"
LastTSBuiltin
};
LastTSBuiltin
};
}

namespace SVE {
enum {
LastNEONBuiltin = NEON::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_SVE_BUILTIN_ENUMERATORS
#include "clang/Basic/arm_sve_builtins.inc"
#undef GET_SVE_BUILTIN_ENUMERATORS
FirstNeonBridgeBuiltin,
LastSveBuiltin = FirstNeonBridgeBuiltin - 1,
#define GET_SVE_BUILTINS
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
#include "clang/Basic/BuiltinsSVE.def"
#include "clang/Basic/BuiltinsAArch64NeonSVEBridge.def"
#undef TARGET_BUILTIN
#undef GET_SVE_BUILTINS
FirstTSBuiltin,
};
}

namespace SME {
enum {
LastSVEBuiltin = SVE::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
#include "clang/Basic/BuiltinsSME.def"
#define GET_SME_BUILTIN_ENUMERATORS
#include "clang/Basic/arm_sme_builtins.inc"
#undef GET_SME_BUILTIN_ENUMERATORS
FirstTSBuiltin,
};
}
Expand All @@ -83,8 +103,9 @@ namespace clang {
namespace BPF {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#include "clang/Basic/BuiltinsBPF.inc"
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsBPF.inc"
#undef GET_BUILTIN_ENUMERATORS
LastTSBuiltin
};
}
Expand All @@ -103,8 +124,9 @@ namespace clang {
namespace NVPTX {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsNVPTX.inc"
#undef GET_BUILTIN_ENUMERATORS
LastTSBuiltin
};
}
Expand All @@ -123,8 +145,9 @@ namespace clang {
namespace SPIRV {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsSPIRV.inc"
#undef GET_BUILTIN_ENUMERATORS
LastTSBuiltin
};
} // namespace SPIRV
Expand All @@ -133,12 +156,14 @@ namespace clang {
namespace X86 {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsX86.inc"
#undef GET_BUILTIN_ENUMERATORS
FirstX86_64Builtin,
LastX86CommonBuiltin = FirstX86_64Builtin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsX86_64.inc"
#undef GET_BUILTIN_ENUMERATORS
LastTSBuiltin
};
}
Expand All @@ -156,8 +181,12 @@ namespace clang {
namespace RISCVVector {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#include "clang/Basic/BuiltinsRISCVVector.def"
#define GET_RISCVV_BUILTIN_ENUMERATORS
#include "clang/Basic/riscv_vector_builtins.inc"
FirstSiFiveBuiltin,
LastRVVBuiltin = FirstSiFiveBuiltin - 1,
#include "clang/Basic/riscv_sifive_vector_builtins.inc"
#undef GET_RISCVV_BUILTIN_ENUMERATORS
FirstTSBuiltin,
};
}
Expand All @@ -168,8 +197,9 @@ namespace clang {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
FirstRVVBuiltin = clang::Builtin::FirstTSBuiltin,
LastRVVBuiltin = RISCVVector::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsRISCV.inc"
#undef GET_BUILTIN_ENUMERATORS
LastTSBuiltin
};
} // namespace RISCV
Expand All @@ -178,8 +208,16 @@ namespace clang {
namespace LoongArch {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#include "clang/Basic/BuiltinsLoongArch.def"
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
#include "clang/Basic/BuiltinsLoongArchBase.def"
FirstLSXBuiltin,
LastBaseBuiltin = FirstLSXBuiltin - 1,
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
#include "clang/Basic/BuiltinsLoongArchLSX.def"
FirstLASXBuiltin,
LastLSXBuiltin = FirstLASXBuiltin - 1,
#define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BI##ID,
#include "clang/Basic/BuiltinsLoongArchLASX.def"
LastTSBuiltin
};
} // namespace LoongArch
Expand Down Expand Up @@ -356,8 +394,9 @@ namespace clang {
namespace Hexagon {
enum {
LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
#define BUILTIN(ID, TYPE, ATTRS) BI##ID,
#define GET_BUILTIN_ENUMERATORS
#include "clang/Basic/BuiltinsHexagon.inc"
#undef GET_BUILTIN_ENUMERATORS
LastTSBuiltin
};
}
Expand Down
10 changes: 6 additions & 4 deletions clang/include/clang/Basic/TargetInfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#include "clang/Basic/AddressSpaces.h"
#include "clang/Basic/BitmaskEnum.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/CFProtectionOptions.h"
#include "clang/Basic/CodeGenOptions.h"
#include "clang/Basic/LLVM.h"
Expand All @@ -32,6 +33,7 @@
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/ADT/StringTable.h"
#include "llvm/Frontend/OpenMP/OMPGridValues.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/Support/DataTypes.h"
Expand Down Expand Up @@ -1016,10 +1018,10 @@ class TargetInfo : public TransferrableTargetInfo,
virtual void getTargetDefines(const LangOptions &Opts,
MacroBuilder &Builder) const = 0;

/// Return information about target-specific builtins for
/// the current primary target, and info about which builtins are non-portable
/// across the current set of primary and secondary targets.
virtual ArrayRef<Builtin::Info> getTargetBuiltins() const = 0;
/// Return information about target-specific builtins for the current primary
/// target, and info about which builtins are non-portable across the current
/// set of primary and secondary targets.
virtual llvm::SmallVector<Builtin::InfosShard> getTargetBuiltins() const = 0;

/// Returns target-specific min and max values VScale_Range.
virtual std::optional<std::pair<unsigned, unsigned>>
Expand Down
1 change: 0 additions & 1 deletion clang/include/module.modulemap
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ module Clang_Basic {
textual header "clang/Basic/BuiltinsAMDGPU.def"
textual header "clang/Basic/BuiltinsARM.def"
textual header "clang/Basic/BuiltinsHexagonMapCustomDep.def"
textual header "clang/Basic/BuiltinsLoongArch.def"
textual header "clang/Basic/BuiltinsLoongArchBase.def"
textual header "clang/Basic/BuiltinsLoongArchLASX.def"
textual header "clang/Basic/BuiltinsLoongArchLSX.def"
Expand Down
Loading