-
Notifications
You must be signed in to change notification settings - Fork 14.8k
Revert OpenACC Reduction recipe Sema changes. #163225
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
Conversation
@llvm/pr-subscribers-clangir @llvm/pr-subscribers-clang Author: Erich Keane (erichkeane) ChangesThis reverts commit 09d9f50. This reverts commit 1d89844. Even after my fix, it seems that this still fails ASAN/the sanitizer build. I'm going to revert everything and see if I can get this to repro locally. Patch is 298.30 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/163225.diff 17 Files Affected:
diff --git a/clang/include/clang/AST/OpenACCClause.h b/clang/include/clang/AST/OpenACCClause.h
index 613c03ce4ad64..79cffeb4dade9 100644
--- a/clang/include/clang/AST/OpenACCClause.h
+++ b/clang/include/clang/AST/OpenACCClause.h
@@ -1325,17 +1325,11 @@ class OpenACCReductionClause final
Op(Operator) {
assert(VarList.size() == Recipes.size());
setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
- llvm::uninitialized_copy(Recipes,
- getTrailingObjects<OpenACCReductionRecipe>());
+ llvm::uninitialized_copy(Recipes, getTrailingObjects<
+ OpenACCReductionRecipe > ());
}
public:
- ~OpenACCReductionClause() {
- for (unsigned I = 0; I < getExprs().size(); ++I) {
- getTrailingObjects<OpenACCReductionRecipe>()[I].~OpenACCReductionRecipe();
- }
- }
-
static bool classof(const OpenACCClause *C) {
return C->getClauseKind() == OpenACCClauseKind::Reduction;
}
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 40bc7b9a4e45e..3df28f2ef3334 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -13665,11 +13665,6 @@ def warn_acc_var_referenced_lacks_op
"reference has no effect">,
InGroup<DiagGroup<"openacc-var-lacks-operation">>,
DefaultError;
-def err_acc_reduction_recipe_no_op
- : Error<"variable of type %0 referenced in OpenACC 'reduction' clause does "
- "not have a valid operation available">;
-def note_acc_reduction_recipe_noop_field
- : Note<"while forming combiner for compound type %0">;
// AMDGCN builtins diagnostics
def err_amdgcn_load_lds_size_invalid_value : Error<"invalid size value">;
diff --git a/clang/include/clang/Sema/SemaOpenACC.h b/clang/include/clang/Sema/SemaOpenACC.h
index 16e7f1bc83019..6cadc343cd728 100644
--- a/clang/include/clang/Sema/SemaOpenACC.h
+++ b/clang/include/clang/Sema/SemaOpenACC.h
@@ -228,11 +228,6 @@ class SemaOpenACC : public SemaBase {
bool DiagnoseAllowedClauses(OpenACCDirectiveKind DK, OpenACCClauseKind CK,
SourceLocation ClauseLoc);
- bool CreateReductionCombinerRecipe(
- SourceLocation loc, OpenACCReductionOperator ReductionOperator,
- QualType VarTy,
- llvm::SmallVectorImpl<OpenACCReductionRecipe::CombinerRecipe>
- &CombinerRecipes);
public:
// Needed from the visitor, so should be public.
diff --git a/clang/lib/Sema/SemaOpenACC.cpp b/clang/lib/Sema/SemaOpenACC.cpp
index 779b6e9cb6b4d..f3969a96b8ced 100644
--- a/clang/lib/Sema/SemaOpenACC.cpp
+++ b/clang/lib/Sema/SemaOpenACC.cpp
@@ -2898,15 +2898,6 @@ OpenACCReductionRecipe SemaOpenACC::CreateReductionInitRecipe(
dyn_cast<ArraySectionExpr>(VarExpr->IgnoreParenImpCasts()))
VarTy = ASE->getElementType();
- llvm::SmallVector<OpenACCReductionRecipe::CombinerRecipe, 1> CombinerRecipes;
-
- // We use the 'set-ness' of the alloca-decl to determine whether the combiner
- // is 'set' or not, so we can skip any attempts at it if we're going to fail
- // at any of the combiners.
- if (CreateReductionCombinerRecipe(VarExpr->getBeginLoc(), ReductionOperator,
- VarTy, CombinerRecipes))
- return OpenACCReductionRecipe::Empty();
-
VarDecl *AllocaDecl = CreateAllocaDecl(
getASTContext(), SemaRef.getCurContext(), VarExpr->getBeginLoc(),
&getASTContext().Idents.get("openacc.reduction.init"), VarTy);
@@ -2955,163 +2946,5 @@ OpenACCReductionRecipe SemaOpenACC::CreateReductionInitRecipe(
AllocaDecl->setInit(Init.get());
AllocaDecl->setInitStyle(VarDecl::CallInit);
}
-
- return OpenACCReductionRecipe(AllocaDecl, CombinerRecipes);
-}
-
-bool SemaOpenACC::CreateReductionCombinerRecipe(
- SourceLocation Loc, OpenACCReductionOperator ReductionOperator,
- QualType VarTy,
- llvm::SmallVectorImpl<OpenACCReductionRecipe::CombinerRecipe>
- &CombinerRecipes) {
- // Now we can try to generate the 'combiner' recipe. This is a little
- // complicated in that if the 'VarTy' is an array type, we want to take its
- // element type so we can generate that. Additionally, if this is a struct,
- // we have two options: If there is overloaded operators, we want to take
- // THOSE, else we want to do the individual elements.
-
- BinaryOperatorKind BinOp;
- switch (ReductionOperator) {
- case OpenACCReductionOperator::Invalid:
- // This can only happen when there is an error, and since these inits
- // are used for code generation, we can just ignore/not bother doing any
- // initialization here.
- CombinerRecipes.push_back({nullptr, nullptr, nullptr});
- return false;
- case OpenACCReductionOperator::Addition:
- BinOp = BinaryOperatorKind::BO_AddAssign;
- break;
- case OpenACCReductionOperator::Multiplication:
- BinOp = BinaryOperatorKind::BO_MulAssign;
- break;
- case OpenACCReductionOperator::BitwiseAnd:
- BinOp = BinaryOperatorKind::BO_AndAssign;
- break;
- case OpenACCReductionOperator::BitwiseOr:
- BinOp = BinaryOperatorKind::BO_OrAssign;
- break;
- case OpenACCReductionOperator::BitwiseXOr:
- BinOp = BinaryOperatorKind::BO_XorAssign;
- break;
-
- case OpenACCReductionOperator::Max:
- case OpenACCReductionOperator::Min:
- case OpenACCReductionOperator::And:
- case OpenACCReductionOperator::Or:
- // We just want a 'NYI' error in the backend, so leave an empty combiner
- // recipe, and claim success.
- CombinerRecipes.push_back({nullptr, nullptr, nullptr});
- return false;
- }
-
- // If VarTy is an array type, at the top level only, we want to do our
- // compares/decomp/etc at the element level.
- if (auto *AT = getASTContext().getAsArrayType(VarTy))
- VarTy = AT->getElementType();
-
- assert(!VarTy->isArrayType() && "Only 1 level of array allowed");
-
- auto tryCombiner = [&, this](DeclRefExpr *LHSDRE, DeclRefExpr *RHSDRE,
- bool IncludeTrap) {
- // TODO: OpenACC: we have to figure out based on the bin-op how to do the
- // ones that we can't just use compound operators for. So &&, ||, max, and
- // min aren't really clear what we could do here.
- if (IncludeTrap) {
- // Trap all of the errors here, we'll emit our own at the end.
- Sema::TentativeAnalysisScope Trap{SemaRef};
-
- return SemaRef.BuildBinOp(SemaRef.getCurScope(), Loc, BinOp, LHSDRE,
- RHSDRE,
- /*ForFoldExpr=*/false);
- } else {
- return SemaRef.BuildBinOp(SemaRef.getCurScope(), Loc, BinOp, LHSDRE,
- RHSDRE,
- /*ForFoldExpr=*/false);
- }
- };
-
- struct CombinerAttemptTy {
- VarDecl *LHS;
- DeclRefExpr *LHSDRE;
- VarDecl *RHS;
- DeclRefExpr *RHSDRE;
- Expr *Op;
- };
-
- auto formCombiner = [&, this](QualType Ty) -> CombinerAttemptTy {
- VarDecl *LHSDecl = CreateAllocaDecl(
- getASTContext(), SemaRef.getCurContext(), Loc,
- &getASTContext().Idents.get("openacc.reduction.combiner.lhs"), Ty);
- auto *LHSDRE = DeclRefExpr::Create(
- getASTContext(), NestedNameSpecifierLoc{}, SourceLocation{}, LHSDecl,
- /*ReferstoEnclosingVariableOrCapture=*/false,
- DeclarationNameInfo{DeclarationName{LHSDecl->getDeclName()},
- LHSDecl->getBeginLoc()},
- Ty, clang::VK_LValue, LHSDecl, nullptr, NOUR_None);
- VarDecl *RHSDecl = CreateAllocaDecl(
- getASTContext(), SemaRef.getCurContext(), Loc,
- &getASTContext().Idents.get("openacc.reduction.combiner.lhs"), Ty);
- auto *RHSDRE = DeclRefExpr::Create(
- getASTContext(), NestedNameSpecifierLoc{}, SourceLocation{}, RHSDecl,
- /*ReferstoEnclosingVariableOrCapture=*/false,
- DeclarationNameInfo{DeclarationName{RHSDecl->getDeclName()},
- RHSDecl->getBeginLoc()},
- Ty, clang::VK_LValue, RHSDecl, nullptr, NOUR_None);
-
- ExprResult BinOpResult = tryCombiner(LHSDRE, RHSDRE, /*IncludeTrap=*/true);
-
- return {LHSDecl, LHSDRE, RHSDecl, RHSDRE, BinOpResult.get()};
- };
-
- CombinerAttemptTy TopLevelCombinerInfo = formCombiner(VarTy);
-
- if (TopLevelCombinerInfo.Op) {
- if (!TopLevelCombinerInfo.Op->containsErrors() &&
- TopLevelCombinerInfo.Op->isInstantiationDependent()) {
- // If this is instantiation dependent, we're just going to 'give up' here
- // and count on us to get it right during instantaition.
- CombinerRecipes.push_back({nullptr, nullptr, nullptr});
- return false;
- } else if (!TopLevelCombinerInfo.Op->containsErrors()) {
- // Else, we succeeded, we can just return this combiner.
- CombinerRecipes.push_back({TopLevelCombinerInfo.LHS,
- TopLevelCombinerInfo.RHS,
- TopLevelCombinerInfo.Op});
- return false;
- }
- }
-
- // Since the 'root' level didn't fail, the only thing that could be successful
- // is a struct that we decompose on its individual fields.
-
- RecordDecl *RD = VarTy->getAsRecordDecl();
- if (!RD) {
- Diag(Loc, diag::err_acc_reduction_recipe_no_op) << VarTy;
- tryCombiner(TopLevelCombinerInfo.LHSDRE, TopLevelCombinerInfo.RHSDRE,
- /*IncludeTrap=*/false);
- return true;
- }
-
- for (const FieldDecl *FD : RD->fields()) {
- CombinerAttemptTy FieldCombinerInfo = formCombiner(FD->getType());
-
- if (!FieldCombinerInfo.Op || FieldCombinerInfo.Op->containsErrors()) {
- Diag(Loc, diag::err_acc_reduction_recipe_no_op) << FD->getType();
- Diag(FD->getBeginLoc(), diag::note_acc_reduction_recipe_noop_field) << RD;
- tryCombiner(FieldCombinerInfo.LHSDRE, FieldCombinerInfo.RHSDRE,
- /*IncludeTrap=*/false);
- return true;
- }
-
- if (FieldCombinerInfo.Op->isInstantiationDependent()) {
- // If this is instantiation dependent, we're just going to 'give up' here
- // and count on us to get it right during instantaition.
- CombinerRecipes.push_back({nullptr, nullptr, nullptr});
- } else {
- CombinerRecipes.push_back(
- {FieldCombinerInfo.LHS, FieldCombinerInfo.RHS, FieldCombinerInfo.Op});
- }
- }
-
- return false;
+ return OpenACCReductionRecipe(AllocaDecl, {});
}
diff --git a/clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-default-ops.cpp b/clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-default-ops.cpp
index 040ddd3ca458c..7b74b7cee1e75 100644
--- a/clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-default-ops.cpp
+++ b/clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-default-ops.cpp
@@ -8,19 +8,12 @@ struct DefaultOperators {
bool b;
};
-struct DefaultOperatorsNoFloats {
- int i;
- unsigned int u;
- bool b;
-};
-
template<typename T>
void acc_combined() {
T someVar;
T someVarArr[5];
- struct DefaultOperatorsNoFloats someVarNoFloats;
- struct DefaultOperatorsNoFloats someVarArrNoFloats[5];
#pragma acc parallel loop reduction(+:someVar)
+ for(int i=0;i < 5; ++i);
// CHECK: acc.reduction.recipe @reduction_add__ZTS16DefaultOperators : !cir.ptr<!rec_DefaultOperators> reduction_operator <add> init {
// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperators>{{.*}})
// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperators, !cir.ptr<!rec_DefaultOperators>, ["openacc.reduction.init", init]
@@ -46,7 +39,6 @@ void acc_combined() {
// TODO OpenACC: Expecting combination operation here
// CHECK-NEXT: acc.yield %[[LHSARG]] : !cir.ptr<!rec_DefaultOperators>
// CHECK-NEXT: }
- for(int i=0;i < 5; ++i);
#pragma acc parallel loop reduction(*:someVar)
// CHECK-NEXT: acc.reduction.recipe @reduction_mul__ZTS16DefaultOperators : !cir.ptr<!rec_DefaultOperators> reduction_operator <mul> init {
@@ -129,67 +121,86 @@ void acc_combined() {
// CHECK-NEXT: acc.yield %[[LHSARG]] : !cir.ptr<!rec_DefaultOperators>
// CHECK-NEXT: }
for(int i=0;i < 5; ++i);
-#pragma acc parallel loop reduction(&:someVarNoFloats)
-// CHECK-NEXT: acc.reduction.recipe @reduction_iand__ZTS24DefaultOperatorsNoFloats : !cir.ptr<!rec_DefaultOperatorsNoFloats> reduction_operator <iand> init {
-// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats>{{.*}})
-// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperatorsNoFloats, !cir.ptr<!rec_DefaultOperatorsNoFloats>, ["openacc.reduction.init", init]
-// CHECK-NEXT: %[[GET_I:.*]] = cir.get_member %[[ALLOCA]][0] {name = "i"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!s32i>
+#pragma acc parallel loop reduction(&:someVar)
+
+// CHECK-NEXT: acc.reduction.recipe @reduction_iand__ZTS16DefaultOperators : !cir.ptr<!rec_DefaultOperators> reduction_operator <iand> init {
+// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperators>{{.*}})
+// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperators, !cir.ptr<!rec_DefaultOperators>, ["openacc.reduction.init", init]
+// CHECK-NEXT: %[[GET_I:.*]] = cir.get_member %[[ALLOCA]][0] {name = "i"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!s32i>
// CHECK-NEXT: %[[ALL_ONES:.*]] = cir.const #cir.int<-1> : !s32i
// CHECK-NEXT: cir.store {{.*}} %[[ALL_ONES]], %[[GET_I]] : !s32i, !cir.ptr<!s32i>
-// CHECK-NEXT: %[[GET_U:.*]] = cir.get_member %[[ALLOCA]][1] {name = "u"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!u32i>
+// CHECK-NEXT: %[[GET_U:.*]] = cir.get_member %[[ALLOCA]][1] {name = "u"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!u32i>
// CHECK-NEXT: %[[ALL_ONES:.*]] = cir.const #cir.int<4294967295> : !u32i
// CHECK-NEXT: cir.store {{.*}} %[[ALL_ONES]], %[[GET_U]] : !u32i, !cir.ptr<!u32i>
-// CHECK-NEXT: %[[GET_B:.*]] = cir.get_member %[[ALLOCA]][2] {name = "b"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!cir.bool>
+// CHECK-NEXT: %[[GET_F:.*]] = cir.get_member %[[ALLOCA]][2] {name = "f"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!cir.float>
+// CHECK-NEXT: %[[ALL_ONES:.*]] = cir.const #cir.fp<0xFF{{.*}}> : !cir.float
+// CHECK-NEXT: cir.store {{.*}} %[[ALL_ONES]], %[[GET_F]] : !cir.float, !cir.ptr<!cir.float>
+// CHECK-NEXT: %[[GET_D:.*]] = cir.get_member %[[ALLOCA]][3] {name = "d"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!cir.double>
+// CHECK-NEXT: %[[ALL_ONES:.*]] = cir.const #cir.fp<0xFF{{.*}}> : !cir.double
+// CHECK-NEXT: cir.store {{.*}} %[[ALL_ONES]], %[[GET_D]] : !cir.double, !cir.ptr<!cir.double>
+// CHECK-NEXT: %[[GET_B:.*]] = cir.get_member %[[ALLOCA]][4] {name = "b"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!cir.bool>
// CHECK-NEXT: %[[ALL_ONES:.*]] = cir.const #true
// CHECK-NEXT: cir.store {{.*}} %[[ALL_ONES]], %[[GET_B]] : !cir.bool, !cir.ptr<!cir.bool>
// CHECK-NEXT: acc.yield
//
// CHECK-NEXT: } combiner {
-// CHECK-NEXT: ^bb0(%[[LHSARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats> {{.*}}, %[[RHSARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats> {{.*}})
+// CHECK-NEXT: ^bb0(%[[LHSARG:.*]]: !cir.ptr<!rec_DefaultOperators> {{.*}}, %[[RHSARG:.*]]: !cir.ptr<!rec_DefaultOperators> {{.*}})
// TODO OpenACC: Expecting combination operation here
-// CHECK-NEXT: acc.yield %[[LHSARG]] : !cir.ptr<!rec_DefaultOperatorsNoFloats>
+// CHECK-NEXT: acc.yield %[[LHSARG]] : !cir.ptr<!rec_DefaultOperators>
// CHECK-NEXT: }
- for(int i = 0; i < 5; ++i);
-#pragma acc parallel loop reduction(|:someVarNoFloats)
-// CHECK-NEXT: acc.reduction.recipe @reduction_ior__ZTS24DefaultOperatorsNoFloats : !cir.ptr<!rec_DefaultOperatorsNoFloats> reduction_operator <ior> init {
-// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats>{{.*}})
-// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperatorsNoFloats, !cir.ptr<!rec_DefaultOperatorsNoFloats>, ["openacc.reduction.init", init]
-// CHECK-NEXT: %[[GET_I:.*]] = cir.get_member %[[ALLOCA]][0] {name = "i"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!s32i>
+ for(int i=0;i < 5; ++i);
+#pragma acc parallel loop reduction(|:someVar)
+// CHECK-NEXT: acc.reduction.recipe @reduction_ior__ZTS16DefaultOperators : !cir.ptr<!rec_DefaultOperators> reduction_operator <ior> init {
+// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperators>{{.*}})
+// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperators, !cir.ptr<!rec_DefaultOperators>, ["openacc.reduction.init", init]
+// CHECK-NEXT: %[[GET_I:.*]] = cir.get_member %[[ALLOCA]][0] {name = "i"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!s32i>
// CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i
// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_I]] : !s32i, !cir.ptr<!s32i>
-// CHECK-NEXT: %[[GET_U:.*]] = cir.get_member %[[ALLOCA]][1] {name = "u"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!u32i>
+// CHECK-NEXT: %[[GET_U:.*]] = cir.get_member %[[ALLOCA]][1] {name = "u"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!u32i>
// CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !u32i
// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_U]] : !u32i, !cir.ptr<!u32i>
-// CHECK-NEXT: %[[GET_B:.*]] = cir.get_member %[[ALLOCA]][2] {name = "b"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!cir.bool>
+// CHECK-NEXT: %[[GET_F:.*]] = cir.get_member %[[ALLOCA]][2] {name = "f"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!cir.float>
+// CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.fp<0{{.*}}> : !cir.float
+// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_F]] : !cir.float, !cir.ptr<!cir.float>
+// CHECK-NEXT: %[[GET_D:.*]] = cir.get_member %[[ALLOCA]][3] {name = "d"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!cir.double>
+// CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.fp<0{{.*}}> : !cir.double
+// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_D]] : !cir.double, !cir.ptr<!cir.double>
+// CHECK-NEXT: %[[GET_B:.*]] = cir.get_member %[[ALLOCA]][4] {name = "b"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!cir.bool>
// CHECK-NEXT: %[[ZERO:.*]] = cir.const #false
// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_B]] : !cir.bool, !cir.ptr<!cir.bool>
// CHECK-NEXT: acc.yield
//
// CHECK-NEXT: } combiner {
-// CHECK-NEXT: ^bb0(%[[LHSARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats> {{.*}}, %[[RHSARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats> {{.*}})
+// CHECK-NEXT: ^bb0(%[[LHSARG:.*]]: !cir.ptr<!rec_DefaultOperators> {{.*}}, %[[RHSARG:.*]]: !cir.ptr<!rec_DefaultOperators> {{.*}})
// TODO OpenACC: Expecting combination operation here
-// CHECK-NEXT: acc.yield %[[LHSARG]] : !cir.ptr<!rec_DefaultOperatorsNoFloats>
+// CHECK-NEXT: acc.yield %[[LHSARG]] : !cir.ptr<!rec_DefaultOperators>
// CHECK-NEXT: }
- for(int i = 0; i < 5; ++i);
-#pragma acc parallel loop reduction(^:someVarNoFloats)
-// CHECK-NEXT: acc.reduction.recipe @reduction_xor__ZTS24DefaultOperatorsNoFloats : !cir.ptr<!rec_DefaultOperatorsNoFloats> reduction_operator <xor> init {
-// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperatorsNoFloats>{{.*}})
-// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperatorsNoFloats, !cir.ptr<!rec_DefaultOperatorsNoFloats>, ["openacc.reduction.init", init]
-// CHECK-NEXT: %[[GET_I:.*]] = cir.get_member %[[ALLOCA]][0] {name = "i"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!s32i>
+ for(int i=0;i < 5; ++i);
+#pragma acc parallel loop reduction(^:someVar)
+// CHECK-NEXT: acc.reduction.recipe @reduction_xor__ZTS16DefaultOperators : !cir.ptr<!rec_DefaultOperators> reduction_operator <xor> init {
+// CHECK-NEXT: ^bb0(%[[ARG:.*]]: !cir.ptr<!rec_DefaultOperators>{{.*}})
+// CHECK-NEXT: %[[ALLOCA:.*]] = cir.alloca !rec_DefaultOperators, !cir.ptr<!rec_DefaultOperators>, ["openacc.reduction.init", init]
+// CHECK-NEXT: %[[GET_I:.*]] = cir.get_member %[[ALLOCA]][0] {name = "i"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!s32i>
// CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !s32i
// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_I]] : !s32i, !cir.ptr<!s32i>
-// CHECK-NEXT: %[[GET_U:.*]] = cir.get_member %[[ALLOCA]][1] {name = "u"} : !cir.ptr<!rec_DefaultOperatorsNoFloats> -> !cir.ptr<!u32i>
+// CHECK-NEXT: %[[GET_U:.*]] = cir.get_member %[[ALLOCA]][1] {name = "u"} : !cir.ptr<!rec_DefaultOperators> -> !cir.ptr<!u32i>
// CHECK-NEXT: %[[ZERO:.*]] = cir.const #cir.int<0> : !u32i
// CHECK-NEXT: cir.store {{.*}} %[[ZERO]], %[[GET_U]] : !u32i, !cir.ptr<!u32i>
-// CHECK-NEXT: %[[GET_B:.*]] = cir.get_member %[[ALLOCA]][2] {name = "b"} : !cir.ptr<!rec_DefaultOperators...
[truncated]
|
You can test this locally with the following command:git-clang-format --diff origin/main HEAD --extensions cpp,c,h -- clang/include/clang/AST/OpenACCClause.h clang/include/clang/Sema/SemaOpenACC.h clang/lib/Sema/SemaOpenACC.cpp clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-default-ops.cpp clang/test/CIR/CodeGenOpenACC/combined-reduction-clause-float.cpp clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-default-ops.c clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-default-ops.cpp clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-float.c clang/test/CIR/CodeGenOpenACC/compute-reduction-clause-float.cpp clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-default-ops.cpp clang/test/CIR/CodeGenOpenACC/loop-reduction-clause-float.cpp clang/test/SemaOpenACC/combined-construct-reduction-clause.cpp clang/test/SemaOpenACC/compute-construct-clause-ast.cpp clang/test/SemaOpenACC/compute-construct-reduction-clause.c clang/test/SemaOpenACC/compute-construct-reduction-clause.cpp clang/test/SemaOpenACC/loop-construct-reduction-ast.cpp --diff_from_common_commit
View the diff from clang-format here.diff --git a/clang/include/clang/AST/OpenACCClause.h b/clang/include/clang/AST/OpenACCClause.h
index 79cffeb4d..94c21d211 100644
--- a/clang/include/clang/AST/OpenACCClause.h
+++ b/clang/include/clang/AST/OpenACCClause.h
@@ -1325,8 +1325,8 @@ class OpenACCReductionClause final
Op(Operator) {
assert(VarList.size() == Recipes.size());
setExprs(getTrailingObjects<Expr *>(VarList.size()), VarList);
- llvm::uninitialized_copy(Recipes, getTrailingObjects<
- OpenACCReductionRecipe > ());
+ llvm::uninitialized_copy(Recipes,
+ getTrailingObjects<OpenACCReductionRecipe>());
}
public:
|
This reverts commit 09d9f50. This reverts commit 1d89844.
Even after my fix, it seems that this still fails ASAN/the sanitizer build. I'm going to revert everything and see if I can get this to repro locally.