Skip to content

Commit d499bb0

Browse files
committed
add doc and release note
Created using spr 1.3.5-bogner
2 parents 2b6b72c + 28bda77 commit d499bb0

File tree

97 files changed

+420
-333
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+420
-333
lines changed

clang/include/clang/Basic/Attr.td

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4630,6 +4630,7 @@ def OMPDeclareVariant : InheritableAttr {
46304630
OMPTraitInfoArgument<"TraitInfos">,
46314631
VariadicExprArgument<"AdjustArgsNothing">,
46324632
VariadicExprArgument<"AdjustArgsNeedDevicePtr">,
4633+
VariadicExprArgument<"AdjustArgsNeedDeviceAddr">,
46334634
VariadicOMPInteropInfoArgument<"AppendArgs">,
46344635
];
46354636
let AdditionalMembers = [{

clang/include/clang/Basic/DiagnosticParseKinds.td

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,8 +1581,10 @@ def err_omp_unexpected_append_op : Error<
15811581
"unexpected operation specified in 'append_args' clause, expected 'interop'">;
15821582
def err_omp_unexpected_execution_modifier : Error<
15831583
"unexpected 'execution' modifier in non-executable context">;
1584-
def err_omp_unknown_adjust_args_op : Error<
1585-
"incorrect adjust_args type, expected 'need_device_ptr' or 'nothing'">;
1584+
def err_omp_unknown_adjust_args_op
1585+
: Error<
1586+
"incorrect 'adjust_args' type, expected 'need_device_ptr'%select{|, "
1587+
"'need_device_addr',}0 or 'nothing'">;
15861588
def err_omp_declare_variant_wrong_clause : Error<
15871589
"expected %select{'match'|'match', 'adjust_args', or 'append_args'}0 clause "
15881590
"on 'omp declare variant' directive">;

clang/include/clang/Basic/OpenMPKinds.def

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ OPENMP_ORIGINAL_SHARING_MODIFIER(default)
214214
// Adjust-op kinds for the 'adjust_args' clause.
215215
OPENMP_ADJUST_ARGS_KIND(nothing)
216216
OPENMP_ADJUST_ARGS_KIND(need_device_ptr)
217+
OPENMP_ADJUST_ARGS_KIND(need_device_addr)
217218

218219
// Binding kinds for the 'bind' clause.
219220
OPENMP_BIND_KIND(teams)

clang/include/clang/Sema/SemaOpenMP.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -849,6 +849,7 @@ class SemaOpenMP : public SemaBase {
849849
FunctionDecl *FD, Expr *VariantRef, OMPTraitInfo &TI,
850850
ArrayRef<Expr *> AdjustArgsNothing,
851851
ArrayRef<Expr *> AdjustArgsNeedDevicePtr,
852+
ArrayRef<Expr *> AdjustArgsNeedDeviceAddr,
852853
ArrayRef<OMPInteropInfo> AppendArgs, SourceLocation AdjustArgsLoc,
853854
SourceLocation AppendArgsLoc, SourceRange SR);
854855

clang/lib/AST/AttrImpl.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,12 @@ void OMPDeclareVariantAttr::printPrettyPragma(
224224
PrintExprs(adjustArgsNeedDevicePtr_begin(), adjustArgsNeedDevicePtr_end());
225225
OS << ")";
226226
}
227+
if (adjustArgsNeedDeviceAddr_size()) {
228+
OS << " adjust_args(need_device_addr:";
229+
PrintExprs(adjustArgsNeedDeviceAddr_begin(),
230+
adjustArgsNeedDeviceAddr_end());
231+
OS << ")";
232+
}
227233

228234
auto PrintInteropInfo = [&OS](OMPInteropInfo *Begin, OMPInteropInfo *End) {
229235
for (OMPInteropInfo *I = Begin; I != End; ++I) {

clang/lib/Parse/ParseOpenMP.cpp

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1483,6 +1483,7 @@ void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr,
14831483
OMPTraitInfo &TI = ASTCtx.getNewOMPTraitInfo();
14841484
SmallVector<Expr *, 6> AdjustNothing;
14851485
SmallVector<Expr *, 6> AdjustNeedDevicePtr;
1486+
SmallVector<Expr *, 6> AdjustNeedDeviceAddr;
14861487
SmallVector<OMPInteropInfo, 3> AppendArgs;
14871488
SourceLocation AdjustArgsLoc, AppendArgsLoc;
14881489

@@ -1515,11 +1516,21 @@ void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr,
15151516
SmallVector<Expr *> Vars;
15161517
IsError = ParseOpenMPVarList(OMPD_declare_variant, OMPC_adjust_args,
15171518
Vars, Data);
1518-
if (!IsError)
1519-
llvm::append_range(Data.ExtraModifier == OMPC_ADJUST_ARGS_nothing
1520-
? AdjustNothing
1521-
: AdjustNeedDevicePtr,
1522-
Vars);
1519+
if (!IsError) {
1520+
switch (Data.ExtraModifier) {
1521+
case OMPC_ADJUST_ARGS_nothing:
1522+
llvm::append_range(AdjustNothing, Vars);
1523+
break;
1524+
case OMPC_ADJUST_ARGS_need_device_ptr:
1525+
llvm::append_range(AdjustNeedDevicePtr, Vars);
1526+
break;
1527+
case OMPC_ADJUST_ARGS_need_device_addr:
1528+
llvm::append_range(AdjustNeedDeviceAddr, Vars);
1529+
break;
1530+
default:
1531+
llvm_unreachable("Unexpected 'adjust_args' clause modifier.");
1532+
}
1533+
}
15231534
break;
15241535
}
15251536
case OMPC_append_args:
@@ -1559,8 +1570,8 @@ void Parser::ParseOMPDeclareVariantClauses(Parser::DeclGroupPtrTy Ptr,
15591570
if (DeclVarData && !TI.Sets.empty())
15601571
Actions.OpenMP().ActOnOpenMPDeclareVariantDirective(
15611572
DeclVarData->first, DeclVarData->second, TI, AdjustNothing,
1562-
AdjustNeedDevicePtr, AppendArgs, AdjustArgsLoc, AppendArgsLoc,
1563-
SourceRange(Loc, Tok.getLocation()));
1573+
AdjustNeedDevicePtr, AdjustNeedDeviceAddr, AppendArgs, AdjustArgsLoc,
1574+
AppendArgsLoc, SourceRange(Loc, Tok.getLocation()));
15641575

15651576
// Skip the last annot_pragma_openmp_end.
15661577
(void)ConsumeAnnotationToken();
@@ -4818,7 +4829,8 @@ bool Parser::ParseOpenMPVarList(OpenMPDirectiveKind DKind,
48184829
getLangOpts());
48194830
Data.ExtraModifierLoc = Tok.getLocation();
48204831
if (Data.ExtraModifier == OMPC_ADJUST_ARGS_unknown) {
4821-
Diag(Tok, diag::err_omp_unknown_adjust_args_op);
4832+
Diag(Tok, diag::err_omp_unknown_adjust_args_op)
4833+
<< (getLangOpts().OpenMP >= 60 ? 1 : 0);
48224834
SkipUntil(tok::r_paren, tok::annot_pragma_openmp_end, StopBeforeMatch);
48234835
} else {
48244836
ConsumeToken();

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7122,6 +7122,7 @@ void SemaOpenMP::ActOnFinishedFunctionDefinitionInOpenMPDeclareVariantScope(
71227122
getASTContext(), VariantFuncRef, DVScope.TI,
71237123
/*NothingArgs=*/nullptr, /*NothingArgsSize=*/0,
71247124
/*NeedDevicePtrArgs=*/nullptr, /*NeedDevicePtrArgsSize=*/0,
7125+
/*NeedDeviceAddrArgs=*/nullptr, /*NeedDeviceAddrArgsSize=*/0,
71257126
/*AppendArgs=*/nullptr, /*AppendArgsSize=*/0);
71267127
for (FunctionDecl *BaseFD : Bases)
71277128
BaseFD->addAttr(OMPDeclareVariantA);
@@ -7553,6 +7554,7 @@ void SemaOpenMP::ActOnOpenMPDeclareVariantDirective(
75537554
FunctionDecl *FD, Expr *VariantRef, OMPTraitInfo &TI,
75547555
ArrayRef<Expr *> AdjustArgsNothing,
75557556
ArrayRef<Expr *> AdjustArgsNeedDevicePtr,
7557+
ArrayRef<Expr *> AdjustArgsNeedDeviceAddr,
75567558
ArrayRef<OMPInteropInfo> AppendArgs, SourceLocation AdjustArgsLoc,
75577559
SourceLocation AppendArgsLoc, SourceRange SR) {
75587560

@@ -7564,6 +7566,7 @@ void SemaOpenMP::ActOnOpenMPDeclareVariantDirective(
75647566
SmallVector<Expr *, 8> AllAdjustArgs;
75657567
llvm::append_range(AllAdjustArgs, AdjustArgsNothing);
75667568
llvm::append_range(AllAdjustArgs, AdjustArgsNeedDevicePtr);
7569+
llvm::append_range(AllAdjustArgs, AdjustArgsNeedDeviceAddr);
75677570

75687571
if (!AllAdjustArgs.empty() || !AppendArgs.empty()) {
75697572
VariantMatchInfo VMI;
@@ -7614,6 +7617,8 @@ void SemaOpenMP::ActOnOpenMPDeclareVariantDirective(
76147617
const_cast<Expr **>(AdjustArgsNothing.data()), AdjustArgsNothing.size(),
76157618
const_cast<Expr **>(AdjustArgsNeedDevicePtr.data()),
76167619
AdjustArgsNeedDevicePtr.size(),
7620+
const_cast<Expr **>(AdjustArgsNeedDeviceAddr.data()),
7621+
AdjustArgsNeedDeviceAddr.size(),
76177622
const_cast<OMPInteropInfo *>(AppendArgs.data()), AppendArgs.size(), SR);
76187623
FD->addAttr(NewAttr);
76197624
}

clang/lib/Sema/SemaTemplateInstantiateDecl.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,7 @@ static void instantiateOMPDeclareVariantAttr(
527527

528528
SmallVector<Expr *, 8> NothingExprs;
529529
SmallVector<Expr *, 8> NeedDevicePtrExprs;
530+
SmallVector<Expr *, 8> NeedDeviceAddrExprs;
530531
SmallVector<OMPInteropInfo, 4> AppendArgs;
531532

532533
for (Expr *E : Attr.adjustArgsNothing()) {
@@ -541,14 +542,20 @@ static void instantiateOMPDeclareVariantAttr(
541542
continue;
542543
NeedDevicePtrExprs.push_back(ER.get());
543544
}
545+
for (Expr *E : Attr.adjustArgsNeedDeviceAddr()) {
546+
ExprResult ER = Subst(E);
547+
if (ER.isInvalid())
548+
continue;
549+
NeedDeviceAddrExprs.push_back(ER.get());
550+
}
544551
for (OMPInteropInfo &II : Attr.appendArgs()) {
545552
// When prefer_type is implemented for append_args handle them here too.
546553
AppendArgs.emplace_back(II.IsTarget, II.IsTargetSync);
547554
}
548555

549556
S.OpenMP().ActOnOpenMPDeclareVariantDirective(
550-
FD, E, TI, NothingExprs, NeedDevicePtrExprs, AppendArgs, SourceLocation(),
551-
SourceLocation(), Attr.getRange());
557+
FD, E, TI, NothingExprs, NeedDevicePtrExprs, NeedDeviceAddrExprs,
558+
AppendArgs, SourceLocation(), SourceLocation(), Attr.getRange());
552559
}
553560

554561
static void instantiateDependentAMDGPUFlatWorkGroupSizeAttr(

clang/test/CodeGen/alias.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,20 @@ const int wacom_usb_ids[] = {1, 1, 2, 3, 5, 8, 13, 0};
2929
extern const int __mod_usb_device_table __attribute__ ((alias("wacom_usb_ids")));
3030
// CHECKBASIC-DAG: @__mod_usb_device_table ={{.*}} alias i32, ptr @wacom_usb_ids
3131
// CHECKASM-DAG: .globl __mod_usb_device_table
32-
// CHECKASM-DAG: .set __mod_usb_device_table, wacom_usb_ids
32+
// CHECKASM-DAG: __mod_usb_device_table = wacom_usb_ids
3333
// CHECKASM-NOT: .size __mod_usb_device_table
3434

3535
extern int g1;
3636
extern int g1 __attribute((alias("g0")));
3737
// CHECKBASIC-DAG: @g1 ={{.*}} alias i32, ptr @g0
3838
// CHECKASM-DAG: .globl g1
39-
// CHECKASM-DAG: .set g1, g0
39+
// CHECKASM-DAG: g1 = g0
4040
// CHECKASM-NOT: .size g1
4141

4242
extern __thread int __libc_errno __attribute__ ((alias ("TL_WITH_ALIAS")));
4343
// CHECKBASIC-DAG: @__libc_errno ={{.*}} thread_local alias i32, ptr @TL_WITH_ALIAS
4444
// CHECKASM-DAG: .globl __libc_errno
45-
// CHECKASM-DAG: .set __libc_errno, TL_WITH_ALIAS
45+
// CHECKASM-DAG: __libc_errno = TL_WITH_ALIAS
4646
// CHECKASM-NOT: .size __libc_errno
4747

4848
void f0(void) { }

clang/test/OpenMP/declare_variant_clauses_ast_print.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ void foo_v3(float *AAA, float *BBB, int *I) {return;}
5454
//DUMP: DeclRefExpr{{.*}}Function{{.*}}foo_v1
5555
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'
5656
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'
57-
//PRINT: #pragma omp declare variant(foo_v3) match(construct={dispatch}, device={arch(x86, x86_64)}) adjust_args(nothing:I) adjust_args(need_device_ptr:BBB)
57+
//PRINT: #pragma omp declare variant(foo_v3) match(construct={dispatch}, device={arch(x86, x86_64)}) adjust_args(nothing:I) adjust_args(need_device_ptr:BBB) adjust_args(need_device_addr:AAA)
5858

59-
//PRINT: #pragma omp declare variant(foo_v2) match(construct={dispatch}, device={arch(ppc)}) adjust_args(need_device_ptr:AAA)
59+
//PRINT: #pragma omp declare variant(foo_v2) match(construct={dispatch}, device={arch(ppc)}) adjust_args(need_device_ptr:AAA) adjust_args(need_device_addr:BBB)
6060

6161
//PRINT: omp declare variant(foo_v1) match(construct={dispatch}, device={arch(arm)}) adjust_args(need_device_ptr:AAA,BBB)
6262

@@ -66,42 +66,48 @@ void foo_v3(float *AAA, float *BBB, int *I) {return;}
6666

6767
#pragma omp declare variant(foo_v2) \
6868
match(construct={dispatch}, device={arch(ppc)}), \
69-
adjust_args(need_device_ptr:AAA)
69+
adjust_args(need_device_ptr:AAA) \
70+
adjust_args(need_device_addr:BBB)
7071

7172
#pragma omp declare variant(foo_v3) \
7273
adjust_args(need_device_ptr:BBB) adjust_args(nothing:I) \
74+
adjust_args(need_device_addr:AAA) \
7375
match(construct={dispatch}, device={arch(x86,x86_64)})
7476

7577
void foo(float *AAA, float *BBB, int *I) {return;}
7678

77-
void Foo_Var(float *AAA, float *BBB) {return;}
79+
void Foo_Var(float *AAA, float *BBB, float *CCC) {return;}
7880

7981
#pragma omp declare variant(Foo_Var) \
8082
match(construct={dispatch}, device={arch(x86_64)}) \
81-
adjust_args(need_device_ptr:AAA) adjust_args(nothing:BBB)
83+
adjust_args(need_device_ptr:AAA) adjust_args(nothing:BBB) \
84+
adjust_args(need_device_addr:CCC)
8285
template<typename T>
83-
void Foo(T *AAA, T *BBB) {return;}
86+
void Foo(T *AAA, T *BBB, T *CCC) {return;}
8487

85-
//PRINT: #pragma omp declare variant(Foo_Var) match(construct={dispatch}, device={arch(x86_64)}) adjust_args(nothing:BBB) adjust_args(need_device_ptr:AAA)
86-
//DUMP: FunctionDecl{{.*}} Foo 'void (T *, T *)'
88+
//PRINT: #pragma omp declare variant(Foo_Var) match(construct={dispatch}, device={arch(x86_64)}) adjust_args(nothing:BBB) adjust_args(need_device_ptr:AAA) adjust_args(need_device_addr:CCC)
89+
//DUMP: FunctionDecl{{.*}} Foo 'void (T *, T *, T *)'
8790
//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(x86_64)}
8891
//DUMP: DeclRefExpr{{.*}}Function{{.*}}Foo_Var
8992
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'
9093
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'
94+
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'CCC'
9195
//
92-
//DUMP: FunctionDecl{{.*}} Foo 'void (float *, float *)'
96+
//DUMP: FunctionDecl{{.*}} Foo 'void (float *, float *, float *)'
9397
//DUMP: OMPDeclareVariantAttr{{.*}}device={arch(x86_64)}
9498
//DUMP: DeclRefExpr{{.*}}Function{{.*}}Foo_Var
9599
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'BBB'
96100
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'AAA'
101+
//DUMP: DeclRefExpr{{.*}}ParmVar{{.*}}'CCC'
97102

98103
void func()
99104
{
100105
float *A;
101106
float *B;
107+
float *C;
102108

103109
//#pragma omp dispatch
104-
Foo(A, B);
110+
Foo(A, B, C);
105111
}
106112

107113
typedef void *omp_interop_t;

0 commit comments

Comments
 (0)