diff options
author | Sirraide <aeternalmail@gmail.com> | 2024-03-09 12:07:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-09 12:07:16 +0100 |
commit | 2b5f68a5f63d2342a056bf9f86bd116c100fd81a (patch) | |
tree | 2831699172fa824863d5d321e9054fa7816bc960 /clang/lib/CodeGen/CGCall.cpp | |
parent | 9df719407f808d71d3bf02867da2b01617ef3d55 (diff) | |
download | llvm-2b5f68a5f63d2342a056bf9f86bd116c100fd81a.zip llvm-2b5f68a5f63d2342a056bf9f86bd116c100fd81a.tar.gz llvm-2b5f68a5f63d2342a056bf9f86bd116c100fd81a.tar.bz2 |
[Clang][C++23] Implement P1774R8: Portable assumptions (#81014)
This implements the C++23 `[[assume]]` attribute.
Assumption information is lowered to a call to `@llvm.assume`, unless the expression has side-effects, in which case it is discarded and a warning is issued to tell the user that the assumption doesn’t do anything. A failed assumption at compile time is an error (unless we are in `MSVCCompat` mode, in which case we don’t check assumptions at compile time).
Due to performance regressions in LLVM, assumptions can be disabled with the `-fno-assumptions` flag. With it, assumptions will still be parsed and checked, but no calls to `@llvm.assume` will be emitted and assumptions will not be checked at compile time.
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGCall.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp index 13f6823..a28d788 100644 --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -1796,14 +1796,14 @@ static void AddAttributesFromFunctionProtoType(ASTContext &Ctx, FuncAttrs.addAttribute("aarch64_inout_zt0"); } -static void AddAttributesFromAssumes(llvm::AttrBuilder &FuncAttrs, - const Decl *Callee) { +static void AddAttributesFromOMPAssumes(llvm::AttrBuilder &FuncAttrs, + const Decl *Callee) { if (!Callee) return; SmallVector<StringRef, 4> Attrs; - for (const AssumptionAttr *AA : Callee->specific_attrs<AssumptionAttr>()) + for (const OMPAssumeAttr *AA : Callee->specific_attrs<OMPAssumeAttr>()) AA->getAssumption().split(Attrs, ","); if (!Attrs.empty()) @@ -2344,7 +2344,7 @@ void CodeGenModule::ConstructAttributeList(StringRef Name, // Attach assumption attributes to the declaration. If this is a call // site, attach assumptions from the caller to the call as well. - AddAttributesFromAssumes(FuncAttrs, TargetDecl); + AddAttributesFromOMPAssumes(FuncAttrs, TargetDecl); bool HasOptnone = false; // The NoBuiltinAttr attached to the target FunctionDecl. |