diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2021-12-02 21:49:08 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2022-05-14 11:43:49 +0000 |
commit | 4824e7fd18a1223177218d4aec1b3c6c5c4a444e (patch) | |
tree | 5ca6493b1b0bf6a41f257794c0116d5e50fbf37c /contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp | |
parent | 5e801ac66d24704442eba426ed13c3effb8a34e7 (diff) | |
parent | f65dcba83ce5035ab88a85fe17628b447eb56e1b (diff) | |
download | src-4824e7fd18a1223177218d4aec1b3c6c5c4a444e.tar.gz src-4824e7fd18a1223177218d4aec1b3c6c5c4a444e.zip |
Merge llvm-project main llvmorg-14-init-11187-g222442ec2d71
This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and
openmp to llvmorg-14-init-11187-g222442ec2d71.
PR: 261742
MFC after: 2 weeks
Diffstat (limited to 'contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp')
-rw-r--r-- | contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp b/contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp index 302dc653c46e..36e0319c8ab9 100644 --- a/contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp +++ b/contrib/llvm-project/clang/lib/CodeGen/TargetInfo.cpp @@ -6364,6 +6364,26 @@ public: const FunctionDecl *FD = dyn_cast_or_null<FunctionDecl>(D); if (!FD) return; + auto *Fn = cast<llvm::Function>(GV); + + if (const auto *TA = FD->getAttr<TargetAttr>()) { + ParsedTargetAttr Attr = TA->parse(); + if (!Attr.BranchProtection.empty()) { + TargetInfo::BranchProtectionInfo BPI; + StringRef DiagMsg; + (void)CGM.getTarget().validateBranchProtection(Attr.BranchProtection, + BPI, DiagMsg); + + static const char *SignReturnAddrStr[] = {"none", "non-leaf", "all"}; + assert(static_cast<unsigned>(BPI.SignReturnAddr) <= 2 && + "Unexpected SignReturnAddressScopeKind"); + Fn->addFnAttr("sign-return-address", + SignReturnAddrStr[static_cast<int>(BPI.SignReturnAddr)]); + + Fn->addFnAttr("branch-target-enforcement", + BPI.BranchTargetEnforcement ? "true" : "false"); + } + } const ARMInterruptAttr *Attr = FD->getAttr<ARMInterruptAttr>(); if (!Attr) @@ -6379,8 +6399,6 @@ public: case ARMInterruptAttr::UNDEF: Kind = "UNDEF"; break; } - llvm::Function *Fn = cast<llvm::Function>(GV); - Fn->addFnAttr("interrupt", Kind); ARMABIInfo::ABIKind ABI = cast<ARMABIInfo>(getABIInfo()).getABIKind(); @@ -9339,17 +9357,25 @@ AMDGPUTargetCodeGenInfo::getLLVMSyncScopeID(const LangOptions &LangOpts, llvm::LLVMContext &Ctx) const { std::string Name; switch (Scope) { + case SyncScope::HIPSingleThread: + Name = "singlethread"; + break; + case SyncScope::HIPWavefront: + case SyncScope::OpenCLSubGroup: + Name = "wavefront"; + break; + case SyncScope::HIPWorkgroup: case SyncScope::OpenCLWorkGroup: Name = "workgroup"; break; + case SyncScope::HIPAgent: case SyncScope::OpenCLDevice: Name = "agent"; break; + case SyncScope::HIPSystem: case SyncScope::OpenCLAllSVMDevices: Name = ""; break; - case SyncScope::OpenCLSubGroup: - Name = "wavefront"; } if (Ordering != llvm::AtomicOrdering::SequentiallyConsistent) { |