Skip to content

Commit d5573a0

Browse files
authored
Remove alias.scope/noalias exclusive restriction (#1061)
It should be a valid case if alias.scope and noalias mask/decoration are applied to the same instruction. Signed-off-by: Dmitry Sidorov <[email protected]>
1 parent ff19818 commit d5573a0

File tree

5 files changed

+88
-66
lines changed

5 files changed

+88
-66
lines changed

lib/SPIRV/SPIRVReader.cpp

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,14 +1495,12 @@ void SPIRVToLLVM::transAliasingMemAccess(SPIRVInstType *BI, Instruction *I) {
14951495
static_assert(std::is_same<SPIRVInstType, SPIRVStore>::value ||
14961496
std::is_same<SPIRVInstType, SPIRVLoad>::value,
14971497
"Only stores and loads can be aliased by memory access mask");
1498-
bool IsAliasScope = BI->SPIRVMemoryAccess::isAliasScope();
1499-
bool IsNoAlias = BI->SPIRVMemoryAccess::isNoAlias();
1500-
if (!(IsAliasScope || IsNoAlias))
1501-
return;
1502-
uint32_t AliasMDKind = IsAliasScope ? LLVMContext::MD_alias_scope
1503-
: LLVMContext::MD_noalias;
1504-
SPIRVId AliasListId = BI->SPIRVMemoryAccess::getAliasing();
1505-
addMemAliasMetadata(I, AliasListId, AliasMDKind);
1498+
if (BI->SPIRVMemoryAccess::isNoAlias())
1499+
addMemAliasMetadata(I, BI->SPIRVMemoryAccess::getNoAliasInstID(),
1500+
LLVMContext::MD_noalias);
1501+
if (BI->SPIRVMemoryAccess::isAliasScope())
1502+
addMemAliasMetadata(I, BI->SPIRVMemoryAccess::getAliasScopeInstID(),
1503+
LLVMContext::MD_alias_scope);
15061504
}
15071505

15081506
// Create and apply alias.scope/noalias metadata
@@ -1531,10 +1529,9 @@ void SPIRVToLLVM::addMemAliasMetadata(Instruction *I, SPIRVId AliasListId,
15311529
MDScopes.emplace_back(MDAliasScopeMap[ScopeId]);
15321530
}
15331531
// Create and store unique alias.scope/noalias metadata
1534-
MDAliasListMap.emplace(
1535-
AliasListId,
1536-
MDNode::concatenate(I->getMetadata(LLVMContext::MD_alias_scope),
1537-
MDNode::get(*Context, MDScopes)));
1532+
MDAliasListMap.emplace(AliasListId,
1533+
MDNode::concatenate(I->getMetadata(AliasMDKind),
1534+
MDNode::get(*Context, MDScopes)));
15381535
I->setMetadata(AliasMDKind, MDAliasListMap[AliasListId]);
15391536
}
15401537

@@ -3833,21 +3830,22 @@ void SPIRVToLLVM::transMemAliasingINTELDecorations(SPIRVValue *BV, Value *V) {
38333830
Instruction *Inst = dyn_cast<Instruction>(V);
38343831
if (!Inst)
38353832
return;
3836-
std::vector<SPIRVId> AliasListIds;
3837-
uint32_t AliasMDKind;
38383833
if (BV->hasDecorateId(internal::DecorationAliasScopeINTEL)) {
3839-
AliasMDKind = LLVMContext::MD_alias_scope;
3834+
std::vector<SPIRVId> AliasListIds;
38403835
AliasListIds =
38413836
BV->getDecorationIdLiterals(internal::DecorationAliasScopeINTEL);
3842-
} else if (BV->hasDecorateId(internal::DecorationNoAliasINTEL)) {
3843-
AliasMDKind = LLVMContext::MD_noalias;
3837+
assert(AliasListIds.size() == 1 &&
3838+
"Memory aliasing decorations must have one argument");
3839+
addMemAliasMetadata(Inst, AliasListIds[0], LLVMContext::MD_alias_scope);
3840+
}
3841+
if (BV->hasDecorateId(internal::DecorationNoAliasINTEL)) {
3842+
std::vector<SPIRVId> AliasListIds;
38443843
AliasListIds =
38453844
BV->getDecorationIdLiterals(internal::DecorationNoAliasINTEL);
3846-
} else
3847-
return;
3848-
assert(AliasListIds.size() == 1 &&
3849-
"Memory aliasing decorations must have one argument");
3850-
addMemAliasMetadata(Inst, AliasListIds[0], AliasMDKind);
3845+
assert(AliasListIds.size() == 1 &&
3846+
"Memory aliasing decorations must have one argument");
3847+
addMemAliasMetadata(Inst, AliasListIds[0], LLVMContext::MD_noalias);
3848+
}
38513849
}
38523850

38533851
// Having UserSemantic decoration on Function is against the spec, but we allow

lib/SPIRV/SPIRVWriter.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1521,8 +1521,7 @@ LLVMToSPIRVBase::transValueWithoutDecoration(Value *V, SPIRVBasicBlock *BB,
15211521
if (MDNode *AliasingListMD = ST->getMetadata(LLVMContext::MD_alias_scope))
15221522
transAliasingMemAccess(BM, AliasingListMD, MemoryAccess,
15231523
internal::MemoryAccessAliasScopeINTELMask);
1524-
else if (MDNode *AliasingListMD =
1525-
ST->getMetadata(LLVMContext::MD_noalias))
1524+
if (MDNode *AliasingListMD = ST->getMetadata(LLVMContext::MD_noalias))
15261525
transAliasingMemAccess(BM, AliasingListMD, MemoryAccess,
15271526
internal::MemoryAccessNoAliasINTELMask);
15281527
if (MemoryAccess.front() == 0)
@@ -1552,9 +1551,8 @@ LLVMToSPIRVBase::transValueWithoutDecoration(Value *V, SPIRVBasicBlock *BB,
15521551
MemoryAccess[0] |= MemoryAccessNontemporalMask;
15531552
if (MDNode *AliasingListMD = LD->getMetadata(LLVMContext::MD_alias_scope))
15541553
transAliasingMemAccess(BM, AliasingListMD, MemoryAccess,
1555-
internal::MemoryAccessAliasScopeINTELMask);
1556-
else if (MDNode *AliasingListMD =
1557-
LD->getMetadata(LLVMContext::MD_noalias))
1554+
internal::MemoryAccessAliasScopeINTELMask);
1555+
if (MDNode *AliasingListMD = LD->getMetadata(LLVMContext::MD_noalias))
15581556
transAliasingMemAccess(BM, AliasingListMD, MemoryAccess,
15591557
internal::MemoryAccessNoAliasINTELMask);
15601558
if (MemoryAccess.front() == 0)
@@ -2007,8 +2005,8 @@ void LLVMToSPIRVBase::transMemAliasingINTELDecorations(Value *V,
20072005
return;
20082006
BV->addDecorate(new SPIRVDecorateId(
20092007
internal::DecorationAliasScopeINTEL, BV, MemAliasList->getId()));
2010-
} else if (MDNode *AliasingListMD =
2011-
Inst->getMetadata(LLVMContext::MD_noalias)) {
2008+
}
2009+
if (MDNode *AliasingListMD = Inst->getMetadata(LLVMContext::MD_noalias)) {
20122010
auto *MemAliasList =
20132011
addMemAliasingINTELInstructions(BM, AliasingListMD);
20142012
if (!MemAliasList)

lib/SPIRV/libSPIRV/SPIRVInstruction.h

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -377,17 +377,20 @@ class SPIRVInstTemplate : public BT {
377377
class SPIRVMemoryAccess {
378378
public:
379379
SPIRVMemoryAccess(const std::vector<SPIRVWord> &TheMemoryAccess)
380-
: TheMemoryAccessMask(0), Alignment(0), AliasInstID(0) {
380+
: TheMemoryAccessMask(0), Alignment(0), AliasScopeInstID(0),
381+
NoAliasInstID(0) {
381382
memoryAccessUpdate(TheMemoryAccess);
382383
}
383384

384-
SPIRVMemoryAccess() : TheMemoryAccessMask(0), Alignment(0), AliasInstID(0) {}
385+
SPIRVMemoryAccess()
386+
: TheMemoryAccessMask(0), Alignment(0), AliasScopeInstID(0),
387+
NoAliasInstID(0) {}
385388

386389
void memoryAccessUpdate(const std::vector<SPIRVWord> &MemoryAccess) {
387390
if (!MemoryAccess.size())
388391
return;
389-
assert((MemoryAccess.size() == 1 || MemoryAccess.size() == 2 ||
390-
MemoryAccess.size() == 3) && "Invalid memory access operand size");
392+
assert(MemoryAccess.size() > 0 && "Invalid memory access operand size");
393+
assert(MemoryAccess.size() < 5 && "Invalid memory access operand size");
391394
TheMemoryAccessMask = MemoryAccess[0];
392395
size_t MemAccessNumParam = 1;
393396
if (MemoryAccess[0] & MemoryAccessAlignedMask) {
@@ -397,13 +400,12 @@ class SPIRVMemoryAccess {
397400
if (MemoryAccess[0] & internal::MemoryAccessAliasScopeINTELMask) {
398401
assert(MemoryAccess.size() > MemAccessNumParam &&
399402
"Aliasing operand is missing");
400-
assert(!(MemoryAccess[0] & internal::MemoryAccessNoAliasINTELMask) &&
401-
"AliasScopeINTELMask and NoAliasINTELMask are mutually exclusive");
402-
AliasInstID = MemoryAccess[MemAccessNumParam];
403-
} else if (MemoryAccess[0] & internal::MemoryAccessNoAliasINTELMask) {
403+
AliasScopeInstID = MemoryAccess[MemAccessNumParam++];
404+
}
405+
if (MemoryAccess[0] & internal::MemoryAccessNoAliasINTELMask) {
404406
assert(MemoryAccess.size() > MemAccessNumParam &&
405407
"Aliasing operand is missing");
406-
AliasInstID = MemoryAccess[MemAccessNumParam];
408+
NoAliasInstID = MemoryAccess[MemAccessNumParam];
407409
}
408410
}
409411
SPIRVWord isVolatile() const {
@@ -420,12 +422,14 @@ class SPIRVMemoryAccess {
420422
}
421423
SPIRVWord getMemoryAccessMask() const { return TheMemoryAccessMask; }
422424
SPIRVWord getAlignment() const { return Alignment; }
423-
SPIRVWord getAliasing() const { return AliasInstID; }
425+
SPIRVWord getAliasScopeInstID() const { return AliasScopeInstID; }
426+
SPIRVWord getNoAliasInstID() const { return NoAliasInstID; }
424427

425428
protected:
426429
SPIRVWord TheMemoryAccessMask;
427430
SPIRVWord Alignment;
428-
SPIRVId AliasInstID;
431+
SPIRVId AliasScopeInstID;
432+
SPIRVId NoAliasInstID;
429433
};
430434

431435
class SPIRVVariable : public SPIRVInstruction {

test/transcoding/SPV_INTEL_memory_access_aliasing/intel-alias-load-store.ll

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
;; with:
2323
;; clang++ -fsycl -fsycl-is-device %s -o -
2424
;; using https://github.com/intel/llvm.git bb5a2fece7c3315d7c72d8495c34a8a6eabc92d8
25+
;; with an exception of !16 noalias medata - it doesn't make any sence.
2526

2627
; RUN: llvm-as %s -o %t.bc
2728
; RUN: llvm-spirv %t.bc --spirv-ext=+SPV_INTEL_memory_access_aliasing -o %t.spv
@@ -39,11 +40,14 @@
3940
; CHECK-SPIRV: AliasDomainDeclINTEL [[DOMAIN1:[0-9]+]]
4041
; CHECK-SPIRV: AliasScopeDeclINTEL [[SCOPE1:[0-9]+]] [[DOMAIN1]]
4142
; CHECK-SPIRV: AliasScopeListDeclINTEL [[LIST1:[0-9]+]] [[SCOPE1]]
43+
; CHECK-SPIRV: AliasDomainDeclINTEL [[DOMAIN3:[0-9]+]]
44+
; CHECK-SPIRV: AliasScopeDeclINTEL [[SCOPE3:[0-9]+]] [[DOMAIN3]]
45+
; CHECK-SPIRV: AliasScopeListDeclINTEL [[LIST3:[0-9]+]] [[SCOPE3]]
4246
; CHECK-SPIRV: AliasDomainDeclINTEL [[DOMAIN2:[0-9]+]]
4347
; CHECK-SPIRV: AliasScopeDeclINTEL [[SCOPE2:[0-9]+]] [[DOMAIN2]]
4448
; CHECK-SPIRV: AliasScopeListDeclINTEL [[LIST2:[0-9]+]] [[SCOPE2]]
4549
; CHECK-SPIRV: Load {{.*}} 65538 {{.*}} [[LIST1]]
46-
; CHECK-SPIRV: Load {{.*}} 65538 {{.*}} [[LIST1]]
50+
; CHECK-SPIRV: Load {{.*}} 196610 {{.*}} [[LIST1]] [[LIST3]]
4751
; CHECK-SPIRV: Store {{.*}} 131074 {{.*}} [[LIST1]]
4852
; CHECK-SPIRV: Load {{.*}} 65538 {{.*}} [[LIST2]]
4953
; CHECK-SPIRV: Load {{.*}} 65538 {{.*}} [[LIST2]]
@@ -73,9 +77,9 @@ entry:
7377
%1 = addrspacecast i32 addrspace(1)* %_arg_1 to i32 addrspace(4)*
7478
%2 = addrspacecast i32 addrspace(1)* %_arg_3 to i32 addrspace(4)*
7579
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD1:[0-9]+]]
76-
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD1]]
80+
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD1]]{{.*}}!noalias ![[LISTMD2:[0-9]+]]
7781
%3 = load i32, i32 addrspace(4)* %0, align 4, !tbaa !5, !alias.scope !9
78-
%4 = load i32, i32 addrspace(4)* %1, align 4, !tbaa !5, !alias.scope !9
82+
%4 = load i32, i32 addrspace(4)* %1, align 4, !tbaa !5, !alias.scope !9, !noalias !16
7983
%add.i = add nsw i32 %4, %3
8084
; CHECK-LLVM: store i32 {{.*}} !noalias ![[LISTMD1]]
8185
store i32 %add.i, i32 addrspace(4)* %2, align 4, !tbaa !5, !noalias !9
@@ -88,13 +92,13 @@ entry:
8892
%0 = addrspacecast i32 addrspace(1)* %_arg_ to i32 addrspace(4)*
8993
%1 = addrspacecast i32 addrspace(1)* %_arg_1 to i32 addrspace(4)*
9094
%2 = addrspacecast i32 addrspace(1)* %_arg_3 to i32 addrspace(4)*
91-
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD2:[0-9]+]]
92-
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD2]]
95+
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD3:[0-9]+]]
96+
; CHECK-LLVM: load i32, i32 addrspace(4)* {{.*}} !alias.scope ![[LISTMD3]]
9397
%3 = load i32, i32 addrspace(4)* %0, align 4, !tbaa !5, !alias.scope !13
9498
%4 = load i32, i32 addrspace(4)* %1, align 4, !tbaa !5, !alias.scope !13
9599
%add.i = add i32 %3, %_arg_5
96100
%add3.i = add i32 %add.i, %4
97-
; CHECK-LLVM: store i32 {{.*}} !noalias ![[LISTMD2]]
101+
; CHECK-LLVM: store i32 {{.*}} !noalias ![[LISTMD3]]
98102
store i32 %add3.i, i32 addrspace(4)* %2, align 4, !tbaa !5, !noalias !13
99103
ret void
100104
}
@@ -115,16 +119,23 @@ attributes #0 = { nofree norecurse nounwind willreturn mustprogress "disable-tai
115119
!6 = !{!"int", !7, i64 0}
116120
!7 = !{!"omnipotent char", !8, i64 0}
117121
!8 = !{!"Simple C++ TBAA"}
118-
; CHECK-LLVM: ![[LISTMD1]] = !{![[SCOPEMD1:[0-9]+]]}
119-
; CHECK-LLVM: ![[SCOPEMD1]] = distinct !{![[SCOPEMD1]], ![[DOMAINMD1:[0-9]+]]}
120-
; CHECK-LLVM: ![[DOMAINMD1]] = distinct !{![[DOMAINMD1]]}
121122
!9 = !{!10}
122123
!10 = distinct !{!10, !11, !"_ZZ4mainENK3$_0clEv: %this"}
123124
!11 = distinct !{!11, !"_ZZ4mainENK3$_0clEv"}
124125
!12 = !{i32 -1, i32 -1, i32 -1, i32 -1}
125-
; CHECK-LLVM: ![[LISTMD2]] = !{![[SCOPEMD2:[0-9]+]]}
126-
; CHECK-LLVM: ![[SCOPEMD2]] = distinct !{![[SCOPEMD2]], ![[DOMAINMD2:[0-9]+]]}
127-
; CHECK-LLVM: ![[DOMAINMD2]] = distinct !{![[DOMAINMD2]]}
128126
!13 = !{!14}
129127
!14 = distinct !{!14, !15, !"_ZZ4mainENK3$_2clEv: %this"}
130128
!15 = distinct !{!15, !"_ZZ4mainENK3$_2clEv"}
129+
!16 = !{!17}
130+
!17 = distinct !{!17, !18, !"_ZZ4mainENK3$_0clEv: %this"}
131+
!18 = distinct !{!18, !"_ZZ4mainENK3$_0clEv"}
132+
133+
; CHECK-LLVM: ![[LISTMD1]] = !{![[SCOPEMD1:[0-9]+]]}
134+
; CHECK-LLVM: ![[SCOPEMD1]] = distinct !{![[SCOPEMD1]], ![[DOMAINMD1:[0-9]+]]}
135+
; CHECK-LLVM: ![[DOMAINMD1]] = distinct !{![[DOMAINMD1]]}
136+
; CHECK-LLVM: ![[LISTMD2]] = !{![[SCOPEMD2:[0-9]+]]}
137+
; CHECK-LLVM: ![[SCOPEMD2]] = distinct !{![[SCOPEMD2]], ![[DOMAINMD2:[0-9]+]]}
138+
; CHECK-LLVM: ![[DOMAINMD2]] = distinct !{![[DOMAINMD2]]}
139+
; CHECK-LLVM: ![[LISTMD3]] = !{![[SCOPEMD3:[0-9]+]]}
140+
; CHECK-LLVM: ![[SCOPEMD3]] = distinct !{![[SCOPEMD3]], ![[DOMAINMD3:[0-9]+]]}
141+
; CHECK-LLVM: ![[DOMAINMD3]] = distinct !{![[DOMAINMD3]]}

test/transcoding/SPV_INTEL_memory_access_aliasing/intel-alias-masked-load-store.ll

Lines changed: 25 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,16 @@
4444
; CHECK-SPIRV: AliasDomainDeclINTEL [[DOMAIN2:[0-9]+]]
4545
; CHECK-SPIRV: AliasScopeDeclINTEL [[SCOPE2:[0-9]+]] [[DOMAIN2]]
4646
; CHECK-SPIRV: AliasScopeListDeclINTEL [[LIST2:[0-9]+]] [[SCOPE2]]
47+
; CHECK-SPIRV: AliasDomainDeclINTEL [[DOMAIN3:[0-9]+]]
48+
; CHECK-SPIRV: AliasScopeDeclINTEL [[SCOPE3:[0-9]+]] [[DOMAIN3]]
49+
; CHECK-SPIRV: AliasScopeListDeclINTEL [[LIST3:[0-9]+]] [[SCOPE3]]
4750
; CHECK-SPIRV: DecorateId [[TARGET1:[0-9]+]] AliasScopeINTEL [[LIST1]]
4851
; CHECK-SPIRV: DecorateId [[TARGET2:[0-9]+]] AliasScopeINTEL [[LIST1]]
49-
; CHECK-SPIRV: DecorateId [[TARGET3:[0-9]+]] AliasScopeINTEL [[LIST2]]
50-
; CHECK-SPIRV: DecorateId [[TARGET4:[0-9]+]] AliasScopeINTEL [[LIST2]]
52+
; CHECK-SPIRV: DecorateId [[TARGET3:[0-9]+]] AliasScopeINTEL [[LIST3]]
53+
; CHECK-SPIRV: DecorateId [[TARGET4:[0-9]+]] AliasScopeINTEL [[LIST3]]
5154
; CHECK-SPIRV: DecorateId [[TARGET5:[0-9]+]] NoAliasINTEL [[LIST1]]
52-
; CHECK-SPIRV: DecorateId [[TARGET6:[0-9]+]] NoAliasINTEL [[LIST2]]
55+
; CHECK-SPIRV: DecorateId [[TARGET2]] NoAliasINTEL [[LIST2]]
56+
; CHECK-SPIRV: DecorateId [[TARGET6:[0-9]+]] NoAliasINTEL [[LIST3]]
5357
; CHECK-SPIRV: FunctionCall {{.*}} [[TARGET1]]
5458
; CHECK-SPIRV: FunctionCall {{.*}} [[TARGET2]]
5559
; CHECK-SPIRV: FunctionCall {{.*}} [[TARGET5]]
@@ -77,9 +81,9 @@ entry:
7781
%1 = addrspacecast i32 addrspace(1)* %_arg_1 to i32 addrspace(4)*
7882
%2 = addrspacecast i32 addrspace(1)* %_arg_3 to i32 addrspace(4)*
7983
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD1:[0-9]+]]
80-
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD1]]
84+
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD1]]{{.*}} ![[LISTMD2:[0-9]+]]
8185
%3 = call i32 @wrappedload(i32 addrspace(4)* %0), !tbaa !5, !alias.scope !9
82-
%4 = call i32 @wrappedload(i32 addrspace(4)* %1), !tbaa !5, !alias.scope !9
86+
%4 = call i32 @wrappedload(i32 addrspace(4)* %1), !tbaa !5, !alias.scope !9, !noalias !16
8387
%add.i = add nsw i32 %4, %3
8488
; CHECK-LLVM: call spir_func void @wrappedstore{{.*}} !noalias ![[LISTMD1]]
8589
call void @wrappedstore(i32 %add.i, i32 addrspace(4)* %2),!tbaa !5, !noalias !9
@@ -92,13 +96,13 @@ entry:
9296
%0 = addrspacecast i32 addrspace(1)* %_arg_ to i32 addrspace(4)*
9397
%1 = addrspacecast i32 addrspace(1)* %_arg_1 to i32 addrspace(4)*
9498
%2 = addrspacecast i32 addrspace(1)* %_arg_3 to i32 addrspace(4)*
95-
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD2:[0-9]+]]
96-
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD2]]
99+
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD3:[0-9]+]]
100+
; CHECK-LLVM: call spir_func i32 @wrappedload{{.*}} !alias.scope ![[LISTMD3]]
97101
%3 = call i32 @wrappedload(i32 addrspace(4)* %0), !tbaa !5, !alias.scope !13
98102
%4 = call i32 @wrappedload(i32 addrspace(4)* %1), !tbaa !5, !alias.scope !13
99103
%add.i = add i32 %3, %_arg_5
100104
%add3.i = add i32 %add.i, %4
101-
; CHECK-LLVM: call spir_func void @wrappedstore{{.*}} !noalias ![[LISTMD2]]
105+
; CHECK-LLVM: call spir_func void @wrappedstore{{.*}} !noalias ![[LISTMD3]]
102106
call void @wrappedstore(i32 %add3.i, i32 addrspace(4)* %2),!tbaa !5, !noalias !13
103107
ret void
104108
}
@@ -133,16 +137,23 @@ attributes #0 = { nofree norecurse nounwind willreturn mustprogress "disable-tai
133137
!6 = !{!"int", !7, i64 0}
134138
!7 = !{!"omnipotent char", !8, i64 0}
135139
!8 = !{!"Simple C++ TBAA"}
136-
; CHECK-LLVM: ![[LISTMD1]] = !{![[SCOPEMD1:[0-9]+]]}
137-
; CHECK-LLVM: ![[SCOPEMD1]] = distinct !{![[SCOPEMD1]], ![[DOMAINMD1:[0-9]+]]}
138-
; CHECK-LLVM: ![[DOMAINMD1]] = distinct !{![[DOMAINMD1]]}
139140
!9 = !{!10}
140141
!10 = distinct !{!10, !11, !"_ZZ4mainENK3$_0clEv: %this"}
141142
!11 = distinct !{!11, !"_ZZ4mainENK3$_0clEv"}
142143
!12 = !{i32 -1, i32 -1, i32 -1, i32 -1}
143-
; CHECK-LLVM: ![[LISTMD2]] = !{![[SCOPEMD2:[0-9]+]]}
144-
; CHECK-LLVM: ![[SCOPEMD2]] = distinct !{![[SCOPEMD2]], ![[DOMAINMD2:[0-9]+]]}
145-
; CHECK-LLVM: ![[DOMAINMD2]] = distinct !{![[DOMAINMD2]]}
146144
!13 = !{!14}
147145
!14 = distinct !{!14, !15, !"_ZZ4mainENK3$_2clEv: %this"}
148146
!15 = distinct !{!15, !"_ZZ4mainENK3$_2clEv"}
147+
!16 = !{!17}
148+
!17 = distinct !{!17, !18, !"_ZZ4mainENK3$_0clEv: %this"}
149+
!18 = distinct !{!18, !"_ZZ4mainENK3$_0clEv"}
150+
151+
; CHECK-LLVM: ![[LISTMD1]] = !{![[SCOPEMD1:[0-9]+]]}
152+
; CHECK-LLVM: ![[SCOPEMD1]] = distinct !{![[SCOPEMD1]], ![[DOMAINMD1:[0-9]+]]}
153+
; CHECK-LLVM: ![[DOMAINMD1]] = distinct !{![[DOMAINMD1]]}
154+
; CHECK-LLVM: ![[LISTMD2]] = !{![[SCOPEMD2:[0-9]+]]}
155+
; CHECK-LLVM: ![[SCOPEMD2]] = distinct !{![[SCOPEMD2]], ![[DOMAINMD2:[0-9]+]]}
156+
; CHECK-LLVM: ![[DOMAINMD2]] = distinct !{![[DOMAINMD2]]}
157+
; CHECK-LLVM: ![[LISTMD3]] = !{![[SCOPEMD3:[0-9]+]]}
158+
; CHECK-LLVM: ![[SCOPEMD3]] = distinct !{![[SCOPEMD3]], ![[DOMAINMD3:[0-9]+]]}
159+
; CHECK-LLVM: ![[DOMAINMD3]] = distinct !{![[DOMAINMD3]]}

0 commit comments

Comments
 (0)