Skip to content

Commit 27454de

Browse files
[SYCL] CFE fixes for sycl_ext_oneapi_kernel_properties (#7016)
This commit makes the following changes to the Clang frontend in preparation for the initial implementation of the sycl_ext_oneapi_kernel_properties extension: * Fixed an issue preventing initializer lists of characters to be used as strings in add_ir_{attributes|annotations}_* attributes. * The add_ir_attributes_function will now be copied onto the generated kernel declaration from the recognized kernel_* functions. * Added a warning diagnostic for when a kernel has both an add_ir_attributes_function (with values) and one or more potentially conflicting SYCL attributes. This is split from #6941. Signed-off-by: Larsen, Steffen <[email protected]>
1 parent 65baee7 commit 27454de

File tree

11 files changed

+228
-114
lines changed

11 files changed

+228
-114
lines changed

clang/include/clang/Basic/Attr.td

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,6 +1603,20 @@ def SYCLAddIRAttrCommonMembers : SYCLAddIRAttrMemberCodeHolder<[{
16031603
if (ValueQType->isIntegralOrEnumerationType() ||
16041604
ValueQType->isFloatingType())
16051605
return Value.getAsString(Context, ValueQType);
1606+
if (ValueQType->isArrayType() &&
1607+
(ValueQType->getArrayElementTypeNoTypeQual()->isCharType() ||
1608+
ValueQType->getArrayElementTypeNoTypeQual()
1609+
->isIntegralOrEnumerationType())) {
1610+
SmallString<10> StrBuffer;
1611+
for (unsigned I = 0; I < Value.getArraySize(); ++I) {
1612+
const APValue &ArrayElem = Value.getArrayInitializedElt(I);
1613+
char C = static_cast<char>(ArrayElem.getInt().getExtValue());
1614+
if (C == 0)
1615+
break;
1616+
StrBuffer += C;
1617+
}
1618+
return std::string(StrBuffer);
1619+
}
16061620
return None;
16071621
}
16081622

@@ -1628,6 +1642,33 @@ def SYCLAddIRAttrCommonMembers : SYCLAddIRAttrMemberCodeHolder<[{
16281642
ValueE->getType()->isSignedIntegerType());
16291643
return std::string(IntegerStrBuffer);
16301644
}
1645+
if (const auto *InitListE = dyn_cast<InitListExpr>(ValueE)) {
1646+
if (InitListE->isStringLiteralInit()) {
1647+
const Expr *StringInitE = InitListE->getInit(0)->IgnoreParenImpCasts();
1648+
return getValidAttributeValueAsString(StringInitE, Context);
1649+
}
1650+
1651+
SmallString<10> StrBuffer;
1652+
for (const auto *InitE : InitListE->inits()) {
1653+
const Expr *InitNoImpCastE = InitE->IgnoreParenImpCasts();
1654+
char C = 0;
1655+
if (const auto *CharacterVal =
1656+
dyn_cast<CharacterLiteral>(InitNoImpCastE))
1657+
C = static_cast<char>(CharacterVal->getValue());
1658+
else if (const auto *IntegerVal =
1659+
dyn_cast<IntegerLiteral>(InitNoImpCastE))
1660+
C = static_cast<char>(IntegerVal->getValue().getSExtValue());
1661+
else
1662+
return None;
1663+
1664+
// Null terminator will end the string reading.
1665+
if (C == 0)
1666+
break;
1667+
1668+
StrBuffer += C;
1669+
}
1670+
return std::string(StrBuffer);
1671+
}
16311672

16321673
const auto *ValueCE = dyn_cast<ConstantExpr>(ValueE);
16331674
if (!ValueCE)

clang/include/clang/Basic/DiagnosticSemaKinds.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11887,6 +11887,9 @@ def err_sycl_add_ir_attribute_invalid_value : Error<
1188711887
def err_sycl_add_ir_attribute_invalid_filter : Error<
1188811888
"initializer list in the first argument of %0 must contain only string "
1188911889
"literals">;
11890+
def warn_sycl_old_and_new_kernel_attributes : Warning<
11891+
"kernel has both attribute %0 and kernel properties; conflicting properties "
11892+
"are ignored">, InGroup<IgnoredAttributes>;
1189011893

1189111894
// errors of expect.with.probability
1189211895
def err_probability_not_constant_float : Error<

clang/include/clang/Sema/Sema.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10984,6 +10984,7 @@ class Sema final {
1098410984
SYCLIntelMaxWorkGroupSizeAttr *
1098510985
MergeSYCLIntelMaxWorkGroupSizeAttr(Decl *D,
1098610986
const SYCLIntelMaxWorkGroupSizeAttr &A);
10987+
void CheckSYCLAddIRAttributesFunctionAttrConflicts(Decl *D);
1098710988
SYCLAddIRAttributesFunctionAttr *MergeSYCLAddIRAttributesFunctionAttr(
1098810989
Decl *D, const SYCLAddIRAttributesFunctionAttr &A);
1098910990
void AddSYCLAddIRAttributesFunctionAttr(Decl *D,

clang/lib/Sema/SemaDeclAttr.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7808,6 +7808,22 @@ static bool checkSYCLAddIRAttributesMergeability(const AddIRAttrT &NewAttr,
78087808
return false;
78097809
}
78107810

7811+
void Sema::CheckSYCLAddIRAttributesFunctionAttrConflicts(Decl *D) {
7812+
const auto *AddIRFuncAttr = D->getAttr<SYCLAddIRAttributesFunctionAttr>();
7813+
if (!AddIRFuncAttr || AddIRFuncAttr->args_size() == 0 ||
7814+
hasDependentExpr(AddIRFuncAttr->args_begin(), AddIRFuncAttr->args_size()))
7815+
return;
7816+
7817+
// If there are potentially conflicting attributes, we issue a warning.
7818+
for (const auto *Attr : std::vector<AttributeCommonInfo *>{
7819+
D->getAttr<ReqdWorkGroupSizeAttr>(),
7820+
D->getAttr<IntelReqdSubGroupSizeAttr>(),
7821+
D->getAttr<WorkGroupSizeHintAttr>()})
7822+
if (Attr)
7823+
Diag(Attr->getLoc(), diag::warn_sycl_old_and_new_kernel_attributes)
7824+
<< Attr;
7825+
}
7826+
78117827
SYCLAddIRAttributesFunctionAttr *Sema::MergeSYCLAddIRAttributesFunctionAttr(
78127828
Decl *D, const SYCLAddIRAttributesFunctionAttr &A) {
78137829
if (const auto *ExistingAttr =

clang/lib/Sema/SemaSYCL.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2249,6 +2249,10 @@ class SyclKernelDeclCreator : public SyclKernelFieldHandler {
22492249
createKernelDecl(S.getASTContext(), Loc, IsInline, IsSIMDKernel)),
22502250
FuncContext(SemaRef, KernelDecl) {
22512251
S.addSyclOpenCLKernel(SYCLKernel, KernelDecl);
2252+
2253+
if (const auto *AddIRAttrFunc =
2254+
SYCLKernel->getAttr<SYCLAddIRAttributesFunctionAttr>())
2255+
KernelDecl->addAttr(AddIRAttrFunc->clone(SemaRef.getASTContext()));
22522256
}
22532257

22542258
~SyclKernelDeclCreator() {
@@ -4301,6 +4305,7 @@ void Sema::MarkDevices() {
43014305
for (auto *A : T.GetCollectedAttributes())
43024306
PropagateAndDiagnoseDeviceAttr(*this, T, A, T.GetSYCLKernel(),
43034307
T.GetKernelBody());
4308+
CheckSYCLAddIRAttributesFunctionAttrConflicts(T.GetSYCLKernel());
43044309
}
43054310
}
43064311

clang/test/CodeGenSYCL/Inputs/mock_properties.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ const char PropertyName6[] = "Prop6";
5555
constexpr decltype(nullptr) PropertyValue6 = nullptr;
5656
const char PropertyName7[] = "Prop7";
5757
constexpr ScopedTestEnum PropertyValue7 = ScopedTestEnum::ScopedEnum1;
58+
const char PropertyName8[] = "Prop8";
59+
constexpr char PropertyValue8[] = {'P', 114, 'o', 'p', 0x65, 'r', 't', 'y', 0};
5860

5961
using prop1 = StringProperty<PropertyName1, PropertyValue1>;
6062
using prop2 = IntProperty<PropertyName2, PropertyValue2>;
@@ -63,3 +65,4 @@ using prop4 = TestEnumProperty<PropertyName4, PropertyValue4>;
6365
using prop5 = StringProperty<PropertyName5, PropertyValue5>;
6466
using prop6 = NullptrProperty<PropertyName6, PropertyValue6>;
6567
using prop7 = ScopedTestEnumProperty<PropertyName7, PropertyValue7>;
68+
using prop8 = StringProperty<PropertyName8, PropertyValue8>;

clang/test/CodeGenSYCL/add_ir_annotations_member.cpp

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ class h {
3434
TEST_T x
3535
#ifdef __SYCL_DEVICE_ONLY__
3636
[[__sycl_detail__::add_ir_annotations_member(
37-
"Prop11", "Prop12", "Prop13", "Prop14", "Prop15", "Prop16", "Prop17",
38-
"Another property string", 2, false, TestEnum::Enum1, nullptr, nullptr, ScopedTestEnum::ScopedEnum2)]]
37+
"Prop11", "Prop12", "Prop13", "Prop14", "Prop15", "Prop16", "Prop17", "Prop18",
38+
"Another property string", 2, false, TestEnum::Enum1, nullptr, nullptr, ScopedTestEnum::ScopedEnum2, PropertyValue8)]]
3939
#endif
4040
;
4141

@@ -48,8 +48,8 @@ template <typename... Properties> class gh {
4848
TEST_T x
4949
#ifdef __SYCL_DEVICE_ONLY__
5050
[[__sycl_detail__::add_ir_annotations_member(
51-
Properties::name..., "Prop11", "Prop12", "Prop13", "Prop14", "Prop15", "Prop16", "Prop17",
52-
Properties::value..., "Another property string", 2, false, TestEnum::Enum1, nullptr, nullptr, ScopedTestEnum::ScopedEnum2)]]
51+
Properties::name..., "Prop11", "Prop12", "Prop13", "Prop14", "Prop15", "Prop16", "Prop17", "Prop18",
52+
Properties::value..., "Another property string", 2, false, TestEnum::Enum1, nullptr, nullptr, ScopedTestEnum::ScopedEnum2, PropertyValue8)]]
5353
#endif
5454
;
5555

@@ -62,8 +62,8 @@ template <typename... Properties> class hg {
6262
TEST_T x
6363
#ifdef __SYCL_DEVICE_ONLY__
6464
[[__sycl_detail__::add_ir_annotations_member(
65-
"Prop11", "Prop12", "Prop13", "Prop14", "Prop15", "Prop16", "Prop17", Properties::name...,
66-
"Another property string", 2, false, TestEnum::Enum1, nullptr, nullptr, ScopedTestEnum::ScopedEnum2, Properties::value...)]]
65+
"Prop11", "Prop12", "Prop13", "Prop14", "Prop15", "Prop16", "Prop17", "Prop18", Properties::name...,
66+
"Another property string", 2, false, TestEnum::Enum1, nullptr, nullptr, ScopedTestEnum::ScopedEnum2, PropertyValue8, Properties::value...)]]
6767
#endif
6868
;
6969

@@ -73,7 +73,7 @@ template <typename... Properties> class hg {
7373

7474
int main() {
7575
sycl::queue q;
76-
g<prop1, prop2, prop3, prop4, prop5, prop6, prop7> a;
76+
g<prop1, prop2, prop3, prop4, prop5, prop6, prop7, prop8> a;
7777
q.submit([&](sycl::handler &h) {
7878
h.single_task<class test_kernel1>(
7979
[=]() {
@@ -87,14 +87,14 @@ int main() {
8787
(void)b.x;
8888
});
8989
});
90-
gh<prop1, prop2, prop3, prop4, prop5, prop6, prop7> c;
90+
gh<prop1, prop2, prop3, prop4, prop5, prop6, prop7, prop8> c;
9191
q.submit([&](sycl::handler &h) {
9292
h.single_task<class test_kernel3>(
9393
[=]() {
9494
(void)c.x;
9595
});
9696
});
97-
hg<prop1, prop2, prop3, prop4, prop5, prop6, prop7> d;
97+
hg<prop1, prop2, prop3, prop4, prop5, prop6, prop7, prop8> d;
9898
q.submit([&](sycl::handler &h) {
9999
h.single_task<class test_kernel4>(
100100
[=]() {
@@ -112,25 +112,28 @@ int main() {
112112
// CHECK-DAG: @[[Prop5Name:.*]] = private unnamed_addr constant [6 x i8] c"Prop5\00", section "llvm.metadata"
113113
// CHECK-DAG: @[[Prop6Name:.*]] = private unnamed_addr constant [6 x i8] c"Prop6\00", section "llvm.metadata"
114114
// CHECK-DAG: @[[Prop7Name:.*]] = private unnamed_addr constant [6 x i8] c"Prop7\00", section "llvm.metadata"
115+
// CHECK-DAG: @[[Prop8Name:.*]] = private unnamed_addr constant [6 x i8] c"Prop8\00", section "llvm.metadata"
115116
// CHECK-DAG: @[[Prop11Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop11\00", section "llvm.metadata"
116117
// CHECK-DAG: @[[Prop12Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop12\00", section "llvm.metadata"
117118
// CHECK-DAG: @[[Prop13Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop13\00", section "llvm.metadata"
118119
// CHECK-DAG: @[[Prop14Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop14\00", section "llvm.metadata"
119120
// CHECK-DAG: @[[Prop15Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop15\00", section "llvm.metadata"
120121
// CHECK-DAG: @[[Prop16Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop16\00", section "llvm.metadata"
121122
// CHECK-DAG: @[[Prop17Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop17\00", section "llvm.metadata"
123+
// CHECK-DAG: @[[Prop18Name:.*]] = private unnamed_addr constant [7 x i8] c"Prop18\00", section "llvm.metadata"
122124

123125
// CHECK-DAG: @[[Prop1Value:.*]] = private unnamed_addr constant [16 x i8] c"Property string\00", section "llvm.metadata"
124126
// CHECK-DAG: @[[Prop2_7_14Value:.*]] = private unnamed_addr constant [2 x i8] c"1\00", section "llvm.metadata"
125127
// CHECK-DAG: @[[Prop3Value:.*]] = private unnamed_addr constant [5 x i8] c"true\00", section "llvm.metadata"
126128
// CHECK-DAG: @[[Prop4_12_17Value:.*]] = private unnamed_addr constant [2 x i8] c"2\00", section "llvm.metadata"
129+
// CHECK-DAG: @[[Prop8_18Value:.*]] = private unnamed_addr constant [9 x i8] c"Property\00", section "llvm.metadata"
127130
// CHECK-DAG: @[[Prop11Value:.*]] = private unnamed_addr constant [24 x i8] c"Another property string\00", section "llvm.metadata"
128131
// CHECK-DAG: @[[Prop13Value:.*]] = private unnamed_addr constant [6 x i8] c"false\00", section "llvm.metadata"
129132

130-
// CHECK-DAG: @[[GArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop1Name]], ptr @[[Prop1Value]], ptr @[[Prop2Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop3Name]], ptr @[[Prop3Value]], ptr @[[Prop4Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop5Name]], ptr null, ptr @[[Prop6Name]], ptr null, ptr @[[Prop7Name]], ptr @[[Prop2_7_14Value]] }, section "llvm.metadata"
131-
// CHECK-DAG: @[[HArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop11Name]], ptr @[[Prop11Value]], ptr @[[Prop12Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop13Name]], ptr @[[Prop13Value]], ptr @[[Prop14Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop15Name]], ptr null, ptr @[[Prop16Name]], ptr null, ptr @[[Prop17Name]], ptr @[[Prop4_12_17Value]] }, section "llvm.metadata"
132-
// CHECK-DAG: @[[GHArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop1Name]], ptr @[[Prop1Value]], ptr @[[Prop2Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop3Name]], ptr @[[Prop3Value]], ptr @[[Prop4Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop5Name]], ptr null, ptr @[[Prop6Name]], ptr null, ptr @[[Prop7Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop11Name]], ptr @[[Prop11Value]], ptr @[[Prop12Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop13Name]], ptr @[[Prop13Value]], ptr @[[Prop14Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop15Name]], ptr null, ptr @[[Prop16Name]], ptr null, ptr @[[Prop17Name]], ptr @[[Prop4_12_17Value]] }, section "llvm.metadata"
133-
// CHECK-DAG: @[[HGArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop11Name]], ptr @[[Prop11Value]], ptr @[[Prop12Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop13Name]], ptr @[[Prop13Value]], ptr @[[Prop14Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop15Name]], ptr null, ptr @[[Prop16Name]], ptr null, ptr @[[Prop17Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop1Name]], ptr @[[Prop1Value]], ptr @[[Prop2Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop3Name]], ptr @[[Prop3Value]], ptr @[[Prop4Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop5Name]], ptr null, ptr @[[Prop6Name]], ptr null, ptr @[[Prop7Name]], ptr @[[Prop2_7_14Value]] }, section "llvm.metadata"
133+
// CHECK-DAG: @[[GArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop1Name]], ptr @[[Prop1Value]], ptr @[[Prop2Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop3Name]], ptr @[[Prop3Value]], ptr @[[Prop4Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop5Name]], ptr null, ptr @[[Prop6Name]], ptr null, ptr @[[Prop7Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop8Name]], ptr @[[Prop8_18Value]] }, section "llvm.metadata"
134+
// CHECK-DAG: @[[HArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop11Name]], ptr @[[Prop11Value]], ptr @[[Prop12Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop13Name]], ptr @[[Prop13Value]], ptr @[[Prop14Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop15Name]], ptr null, ptr @[[Prop16Name]], ptr null, ptr @[[Prop17Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop18Name]], ptr @[[Prop8_18Value]] }, section "llvm.metadata"
135+
// CHECK-DAG: @[[GHArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop1Name]], ptr @[[Prop1Value]], ptr @[[Prop2Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop3Name]], ptr @[[Prop3Value]], ptr @[[Prop4Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop5Name]], ptr null, ptr @[[Prop6Name]], ptr null, ptr @[[Prop7Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop8Name]], ptr @[[Prop8_18Value]], ptr @[[Prop11Name]], ptr @[[Prop11Value]], ptr @[[Prop12Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop13Name]], ptr @[[Prop13Value]], ptr @[[Prop14Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop15Name]], ptr null, ptr @[[Prop16Name]], ptr null, ptr @[[Prop17Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop18Name]], ptr @[[Prop8_18Value]] }, section "llvm.metadata"
136+
// CHECK-DAG: @[[HGArgs:.*]] = private unnamed_addr constant { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } { ptr @[[Prop11Name]], ptr @[[Prop11Value]], ptr @[[Prop12Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop13Name]], ptr @[[Prop13Value]], ptr @[[Prop14Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop15Name]], ptr null, ptr @[[Prop16Name]], ptr null, ptr @[[Prop17Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop18Name]], ptr @[[Prop8_18Value]], ptr @[[Prop1Name]], ptr @[[Prop1Value]], ptr @[[Prop2Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop3Name]], ptr @[[Prop3Value]], ptr @[[Prop4Name]], ptr @[[Prop4_12_17Value]], ptr @[[Prop5Name]], ptr null, ptr @[[Prop6Name]], ptr null, ptr @[[Prop7Name]], ptr @[[Prop2_7_14Value]], ptr @[[Prop8Name]], ptr @[[Prop8_18Value]] }, section "llvm.metadata"
134137

135138
// CHECK-DAG: %{{.*}} = call ptr addrspace(4) @llvm.ptr.annotation.p4(ptr {{.*}}, ptr @[[AnnotName]], {{.*}}, i32 {{.*}}, ptr @[[GArgs]])
136139
// CHECK-DAG: %{{.*}} = call ptr addrspace(4) @llvm.ptr.annotation.p4(ptr {{.*}}, ptr @[[AnnotName]], {{.*}}, i32 {{.*}}, ptr @[[HArgs]])

0 commit comments

Comments
 (0)