================
@@ -355,31 +383,47 @@ bool SemaAMDGPU::checkCoopAtomicFunctionCall(CallExpr
*TheCall, bool IsStore) {
<< PtrArg->getSourceRange();
}
+ Expr *AO = TheCall->getArg(IsStore ? 2 : 1);
+ Expr *Scope = TheCall->getArg(TheCall->getNumArgs() - 1);
+
+ if (AO->isValueDependent() || Scope->isValueDependent())
+ return false;
+
// Check atomic ordering
- Expr *AtomicOrdArg = TheCall->getArg(IsStore ? 2 : 1);
- Expr::EvalResult AtomicOrdArgRes;
- if (!AtomicOrdArg->EvaluateAsInt(AtomicOrdArgRes, getASTContext()))
- llvm_unreachable("Intrinsic requires imm for atomic ordering argument!");
- auto Ord =
- llvm::AtomicOrderingCABI(AtomicOrdArgRes.Val.getInt().getZExtValue());
+ Fail |=
+ checkAtomicOrderingCABIArg(TheCall->getArg(IsStore ? 2 : 1),
+ /*MayLoad=*/!IsStore, /*MayStore=*/IsStore);
- // Atomic ordering cannot be acq_rel in any case, acquire for stores or
- // release for loads.
- if (!llvm::isValidAtomicOrderingCABI((unsigned)Ord) ||
- (Ord == llvm::AtomicOrderingCABI::acq_rel) ||
- Ord == (IsStore ? llvm::AtomicOrderingCABI::acquire
- : llvm::AtomicOrderingCABI::release)) {
- return Diag(AtomicOrdArg->getBeginLoc(),
- diag::warn_atomic_op_has_invalid_memory_order)
- << 0 << AtomicOrdArg->getSourceRange();
+ // Last argument is the syncscope as a string literal.
+ if (!isa<StringLiteral>(Scope->IgnoreParenImpCasts())) {
+ Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal)
+ << Scope->getSourceRange();
+ Fail = true;
}
- // Last argument is a string literal
- Expr *Arg = TheCall->getArg(TheCall->getNumArgs() - 1);
- if (!isa<StringLiteral>(Arg->IgnoreParenImpCasts())) {
- Fail = true;
- Diag(TheCall->getBeginLoc(), diag::err_expr_not_string_literal)
- << Arg->getSourceRange();
+ return Fail;
+}
+
+bool SemaAMDGPU::checkAtomicMonitorLoad(CallExpr *TheCall) {
+ bool Fail = false;
+
+ Expr *AO = TheCall->getArg(1);
+ auto *Scope = TheCall->getArg(TheCall->getNumArgs() - 1);
----------------
arsenm wrote:
No auto
https://github.com/llvm/llvm-project/pull/177343
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits