Skip to content

Commit aed9f11

Browse files
authored
[AMDGPU] Handle lowering addrspace casts from LDS to FLAT address in amdgpu-sw-lower-lds. (#121214)
"infer-address-spaces" pass replaces all refinable generic pointers with equivalent specific pointers. At -O0 optimisation level, infer-address-spaces pass doesn't run in the pipeline. "amdgpu-sw-lower-lds" pass instruments memory operations on addrspace(3) ptrs. Since, extra addrspacecasts are present from lds to flat addrspaces at -O0 and the actual store/load memory instructions are now on flat addrspace, these addrspacecast need to be handled in the amdgpu-sw-lower-lds pass itself. This patch lowers the lds ptr first to the corresponding ptr in the global memory from the asan_malloc. Then replaces the original cast with addrspacecast from global ptr to flat ptr.
1 parent 6662fe3 commit aed9f11

9 files changed

+539
-300
lines changed

llvm/lib/Target/AMDGPU/AMDGPUSwLowerLDS.cpp

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,7 @@ class AMDGPUSwLowerLDS {
192192
void getLDSMemoryInstructions(Function *Func,
193193
SetVector<Instruction *> &LDSInstructions);
194194
void replaceKernelLDSAccesses(Function *Func);
195-
Value *getTranslatedGlobalMemoryGEPOfLDSPointer(Value *LoadMallocPtr,
196-
Value *LDSPtr);
195+
Value *getTranslatedGlobalMemoryPtrOfLDS(Value *LoadMallocPtr, Value *LDSPtr);
197196
void translateLDSMemoryOperationsToGlobalMemory(
198197
Function *Func, Value *LoadMallocPtr,
199198
SetVector<Instruction *> &LDSInstructions);
@@ -655,20 +654,30 @@ void AMDGPUSwLowerLDS::getLDSMemoryInstructions(
655654
} else if (AtomicCmpXchgInst *XCHG = dyn_cast<AtomicCmpXchgInst>(&Inst)) {
656655
if (XCHG->getPointerAddressSpace() == AMDGPUAS::LOCAL_ADDRESS)
657656
LDSInstructions.insert(&Inst);
657+
} else if (AddrSpaceCastInst *ASC = dyn_cast<AddrSpaceCastInst>(&Inst)) {
658+
if (ASC->getSrcAddressSpace() == AMDGPUAS::LOCAL_ADDRESS &&
659+
ASC->getDestAddressSpace() == AMDGPUAS::FLAT_ADDRESS)
660+
LDSInstructions.insert(&Inst);
658661
} else
659662
continue;
660663
}
661664
}
662665
}
663666

664-
Value *
665-
AMDGPUSwLowerLDS::getTranslatedGlobalMemoryGEPOfLDSPointer(Value *LoadMallocPtr,
667+
Value *AMDGPUSwLowerLDS::getTranslatedGlobalMemoryPtrOfLDS(Value *LoadMallocPtr,
666668
Value *LDSPtr) {
667669
assert(LDSPtr && "Invalid LDS pointer operand");
668-
Value *PtrToInt = IRB.CreatePtrToInt(LDSPtr, IRB.getInt32Ty());
669-
Value *GEP =
670-
IRB.CreateInBoundsGEP(IRB.getInt8Ty(), LoadMallocPtr, {PtrToInt});
671-
return GEP;
670+
Type *LDSPtrType = LDSPtr->getType();
671+
LLVMContext &Ctx = M.getContext();
672+
const DataLayout &DL = M.getDataLayout();
673+
Type *IntTy = DL.getIntPtrType(Ctx, AMDGPUAS::LOCAL_ADDRESS);
674+
if (auto *VecPtrTy = dyn_cast<VectorType>(LDSPtrType)) {
675+
// Handle vector of pointers
676+
ElementCount NumElements = VecPtrTy->getElementCount();
677+
IntTy = VectorType::get(IntTy, NumElements);
678+
}
679+
Value *GepIndex = IRB.CreatePtrToInt(LDSPtr, IntTy);
680+
return IRB.CreateInBoundsGEP(IRB.getInt8Ty(), LoadMallocPtr, {GepIndex});
672681
}
673682

674683
void AMDGPUSwLowerLDS::translateLDSMemoryOperationsToGlobalMemory(
@@ -681,7 +690,7 @@ void AMDGPUSwLowerLDS::translateLDSMemoryOperationsToGlobalMemory(
681690
if (LoadInst *LI = dyn_cast<LoadInst>(Inst)) {
682691
Value *LIOperand = LI->getPointerOperand();
683692
Value *Replacement =
684-
getTranslatedGlobalMemoryGEPOfLDSPointer(LoadMallocPtr, LIOperand);
693+
getTranslatedGlobalMemoryPtrOfLDS(LoadMallocPtr, LIOperand);
685694
LoadInst *NewLI = IRB.CreateAlignedLoad(LI->getType(), Replacement,
686695
LI->getAlign(), LI->isVolatile());
687696
NewLI->setAtomic(LI->getOrdering(), LI->getSyncScopeID());
@@ -691,7 +700,7 @@ void AMDGPUSwLowerLDS::translateLDSMemoryOperationsToGlobalMemory(
691700
} else if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
692701
Value *SIOperand = SI->getPointerOperand();
693702
Value *Replacement =
694-
getTranslatedGlobalMemoryGEPOfLDSPointer(LoadMallocPtr, SIOperand);
703+
getTranslatedGlobalMemoryPtrOfLDS(LoadMallocPtr, SIOperand);
695704
StoreInst *NewSI = IRB.CreateAlignedStore(
696705
SI->getValueOperand(), Replacement, SI->getAlign(), SI->isVolatile());
697706
NewSI->setAtomic(SI->getOrdering(), SI->getSyncScopeID());
@@ -701,8 +710,8 @@ void AMDGPUSwLowerLDS::translateLDSMemoryOperationsToGlobalMemory(
701710
} else if (AtomicRMWInst *RMW = dyn_cast<AtomicRMWInst>(Inst)) {
702711
Value *RMWPtrOperand = RMW->getPointerOperand();
703712
Value *RMWValOperand = RMW->getValOperand();
704-
Value *Replacement = getTranslatedGlobalMemoryGEPOfLDSPointer(
705-
LoadMallocPtr, RMWPtrOperand);
713+
Value *Replacement =
714+
getTranslatedGlobalMemoryPtrOfLDS(LoadMallocPtr, RMWPtrOperand);
706715
AtomicRMWInst *NewRMW = IRB.CreateAtomicRMW(
707716
RMW->getOperation(), Replacement, RMWValOperand, RMW->getAlign(),
708717
RMW->getOrdering(), RMW->getSyncScopeID());
@@ -712,8 +721,8 @@ void AMDGPUSwLowerLDS::translateLDSMemoryOperationsToGlobalMemory(
712721
RMW->eraseFromParent();
713722
} else if (AtomicCmpXchgInst *XCHG = dyn_cast<AtomicCmpXchgInst>(Inst)) {
714723
Value *XCHGPtrOperand = XCHG->getPointerOperand();
715-
Value *Replacement = getTranslatedGlobalMemoryGEPOfLDSPointer(
716-
LoadMallocPtr, XCHGPtrOperand);
724+
Value *Replacement =
725+
getTranslatedGlobalMemoryPtrOfLDS(LoadMallocPtr, XCHGPtrOperand);
717726
AtomicCmpXchgInst *NewXCHG = IRB.CreateAtomicCmpXchg(
718727
Replacement, XCHG->getCompareOperand(), XCHG->getNewValOperand(),
719728
XCHG->getAlign(), XCHG->getSuccessOrdering(),
@@ -722,6 +731,16 @@ void AMDGPUSwLowerLDS::translateLDSMemoryOperationsToGlobalMemory(
722731
AsanInfo.Instructions.insert(NewXCHG);
723732
XCHG->replaceAllUsesWith(NewXCHG);
724733
XCHG->eraseFromParent();
734+
} else if (AddrSpaceCastInst *ASC = dyn_cast<AddrSpaceCastInst>(Inst)) {
735+
Value *AIOperand = ASC->getPointerOperand();
736+
Value *Replacement =
737+
getTranslatedGlobalMemoryPtrOfLDS(LoadMallocPtr, AIOperand);
738+
Value *NewAI = IRB.CreateAddrSpaceCast(Replacement, ASC->getType());
739+
// Note: No need to add the instruction to AsanInfo instructions to be
740+
// instrumented list. FLAT_ADDRESS ptr would have been already
741+
// instrumented by asan pass prior to this pass.
742+
ASC->replaceAllUsesWith(NewAI);
743+
ASC->eraseFromParent();
725744
} else
726745
report_fatal_error("Unimplemented LDS lowering instruction");
727746
}

llvm/test/CodeGen/AMDGPU/amdgpu-sw-lower-lds-non-kernel-declaration.ll

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ define void @non_kernel_function() sanitize_address {
2020
; CHECK-NEXT: [[TMP6:%.*]] = load ptr addrspace(1), ptr addrspace(1) [[TMP5]], align 8
2121
; CHECK-NEXT: [[TMP7:%.*]] = load i32, ptr addrspace(1) [[TMP6]], align 4
2222
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr inbounds i8, ptr addrspace(3) [[TMP3]], i32 [[TMP7]]
23-
; CHECK-NEXT: [[Y:%.*]] = addrspacecast ptr addrspace(3) [[TMP8]] to ptr
24-
; CHECK-NEXT: [[TMP9:%.*]] = addrspacecast ptr addrspace(3) [[TMP8]] to ptr
23+
; CHECK-NEXT: [[TMP14:%.*]] = ptrtoint ptr addrspace(3) [[TMP8]] to i32
24+
; CHECK-NEXT: [[TMP10:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP4]], i32 [[TMP14]]
25+
; CHECK-NEXT: [[TMP11:%.*]] = addrspacecast ptr addrspace(1) [[TMP10]] to ptr
26+
; CHECK-NEXT: [[TMP12:%.*]] = ptrtoint ptr addrspace(3) [[TMP8]] to i32
27+
; CHECK-NEXT: [[TMP13:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP4]], i32 [[TMP12]]
28+
; CHECK-NEXT: [[TMP9:%.*]] = addrspacecast ptr addrspace(1) [[TMP13]] to ptr
2529
; CHECK-NEXT: store i8 5, ptr [[TMP9]], align 8
2630
; CHECK-NEXT: ret void
2731
;

llvm/test/CodeGen/AMDGPU/amdgpu-sw-lower-lds-static-indirect-access-asan.ll

Lines changed: 51 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 4
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5
22
; RUN: opt < %s -passes=amdgpu-sw-lower-lds -S -mtriple=amdgcn-amd-amdhsa | FileCheck %s
33

44
; Test to check if static LDS is lowered correctly when a non-kernel with LDS accesses is called from kernel.
@@ -28,8 +28,12 @@ define void @use_variables() sanitize_address {
2828
; CHECK-NEXT: [[TMP12:%.*]] = load ptr addrspace(1), ptr addrspace(1) [[TMP11]], align 8
2929
; CHECK-NEXT: [[TMP10:%.*]] = load i32, ptr addrspace(1) [[TMP12]], align 4
3030
; CHECK-NEXT: [[TMP15:%.*]] = getelementptr inbounds i8, ptr addrspace(3) [[TMP4]], i32 [[TMP10]]
31-
; CHECK-NEXT: [[X:%.*]] = addrspacecast ptr addrspace(3) [[TMP9]] to ptr
32-
; CHECK-NEXT: [[TMP16:%.*]] = addrspacecast ptr addrspace(3) [[TMP9]] to ptr
31+
; CHECK-NEXT: [[TMP13:%.*]] = ptrtoint ptr addrspace(3) [[TMP9]] to i32
32+
; CHECK-NEXT: [[TMP33:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP7]], i32 [[TMP13]]
33+
; CHECK-NEXT: [[TMP34:%.*]] = addrspacecast ptr addrspace(1) [[TMP33]] to ptr
34+
; CHECK-NEXT: [[TMP35:%.*]] = ptrtoint ptr addrspace(3) [[TMP9]] to i32
35+
; CHECK-NEXT: [[TMP36:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP7]], i32 [[TMP35]]
36+
; CHECK-NEXT: [[TMP16:%.*]] = addrspacecast ptr addrspace(1) [[TMP36]] to ptr
3337
; CHECK-NEXT: store i8 3, ptr [[TMP16]], align 4
3438
; CHECK-NEXT: [[TMP14:%.*]] = ptrtoint ptr addrspace(3) [[TMP15]] to i32
3539
; CHECK-NEXT: [[TMP31:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP7]], i32 [[TMP14]]
@@ -45,16 +49,16 @@ define void @use_variables() sanitize_address {
4549
; CHECK-NEXT: [[TMP25:%.*]] = and i1 [[TMP21]], [[TMP24]]
4650
; CHECK-NEXT: [[TMP26:%.*]] = call i64 @llvm.amdgcn.ballot.i64(i1 [[TMP25]])
4751
; CHECK-NEXT: [[TMP27:%.*]] = icmp ne i64 [[TMP26]], 0
48-
; CHECK-NEXT: br i1 [[TMP27]], label [[ASAN_REPORT:%.*]], label [[TMP30:%.*]], !prof [[PROF2:![0-9]+]]
49-
; CHECK: asan.report:
50-
; CHECK-NEXT: br i1 [[TMP25]], label [[TMP28:%.*]], label [[TMP29:%.*]]
51-
; CHECK: 28:
52+
; CHECK-NEXT: br i1 [[TMP27]], label %[[ASAN_REPORT:.*]], label %[[BB35:.*]], !prof [[PROF2:![0-9]+]]
53+
; CHECK: [[ASAN_REPORT]]:
54+
; CHECK-NEXT: br i1 [[TMP25]], label %[[BB33:.*]], label %[[BB34:.*]]
55+
; CHECK: [[BB33]]:
5256
; CHECK-NEXT: call void @__asan_report_store1(i64 [[TMP32]]) #[[ATTR7:[0-9]+]]
5357
; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
54-
; CHECK-NEXT: br label [[TMP29]]
55-
; CHECK: 29:
56-
; CHECK-NEXT: br label [[TMP30]]
57-
; CHECK: 30:
58+
; CHECK-NEXT: br label %[[BB34]]
59+
; CHECK: [[BB34]]:
60+
; CHECK-NEXT: br label %[[BB35]]
61+
; CHECK: [[BB35]]:
5862
; CHECK-NEXT: store i8 3, ptr addrspace(1) [[TMP31]], align 8
5963
; CHECK-NEXT: ret void
6064
;
@@ -67,15 +71,15 @@ define void @use_variables() sanitize_address {
6771
define amdgpu_kernel void @k0() sanitize_address {
6872
; CHECK-LABEL: define amdgpu_kernel void @k0(
6973
; CHECK-SAME: ) #[[ATTR1:[0-9]+]] !llvm.amdgcn.lds.kernel.id [[META3:![0-9]+]] {
70-
; CHECK-NEXT: WId:
74+
; CHECK-NEXT: [[WID:.*]]:
7175
; CHECK-NEXT: [[TMP0:%.*]] = call i32 @llvm.amdgcn.workitem.id.x()
7276
; CHECK-NEXT: [[TMP1:%.*]] = call i32 @llvm.amdgcn.workitem.id.y()
7377
; CHECK-NEXT: [[TMP2:%.*]] = call i32 @llvm.amdgcn.workitem.id.z()
7478
; CHECK-NEXT: [[TMP3:%.*]] = or i32 [[TMP0]], [[TMP1]]
7579
; CHECK-NEXT: [[TMP4:%.*]] = or i32 [[TMP3]], [[TMP2]]
7680
; CHECK-NEXT: [[TMP5:%.*]] = icmp eq i32 [[TMP4]], 0
77-
; CHECK-NEXT: br i1 [[TMP5]], label [[MALLOC:%.*]], label [[TMP7:%.*]]
78-
; CHECK: Malloc:
81+
; CHECK-NEXT: br i1 [[TMP5]], label %[[MALLOC:.*]], label %[[BB24:.*]]
82+
; CHECK: [[MALLOC]]:
7983
; CHECK-NEXT: [[TMP13:%.*]] = load i32, ptr addrspace(1) getelementptr inbounds ([[LLVM_AMDGCN_SW_LDS_K0_MD_TYPE:%.*]], ptr addrspace(1) @llvm.amdgcn.sw.lds.k0.md, i32 0, i32 4, i32 0), align 4
8084
; CHECK-NEXT: [[TMP14:%.*]] = load i32, ptr addrspace(1) getelementptr inbounds ([[LLVM_AMDGCN_SW_LDS_K0_MD_TYPE]], ptr addrspace(1) @llvm.amdgcn.sw.lds.k0.md, i32 0, i32 4, i32 2), align 4
8185
; CHECK-NEXT: [[TMP16:%.*]] = add i32 [[TMP13]], [[TMP14]]
@@ -100,9 +104,9 @@ define amdgpu_kernel void @k0() sanitize_address {
100104
; CHECK-NEXT: [[TMP67:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP6]], i64 132
101105
; CHECK-NEXT: [[TMP68:%.*]] = ptrtoint ptr addrspace(1) [[TMP67]] to i64
102106
; CHECK-NEXT: call void @__asan_poison_region(i64 [[TMP68]], i64 28)
103-
; CHECK-NEXT: br label [[TMP7]]
104-
; CHECK: 24:
105-
; CHECK-NEXT: [[XYZCOND:%.*]] = phi i1 [ false, [[WID:%.*]] ], [ true, [[MALLOC]] ]
107+
; CHECK-NEXT: br label %[[BB24]]
108+
; CHECK: [[BB24]]:
109+
; CHECK-NEXT: [[XYZCOND:%.*]] = phi i1 [ false, %[[WID]] ], [ true, %[[MALLOC]] ]
106110
; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
107111
; CHECK-NEXT: [[TMP19:%.*]] = load ptr addrspace(1), ptr addrspace(3) @llvm.amdgcn.sw.lds.k0, align 8
108112
; CHECK-NEXT: [[TMP10:%.*]] = load i32, ptr addrspace(1) getelementptr inbounds ([[LLVM_AMDGCN_SW_LDS_K0_MD_TYPE]], ptr addrspace(1) @llvm.amdgcn.sw.lds.k0.md, i32 0, i32 1, i32 0), align 4
@@ -124,16 +128,16 @@ define amdgpu_kernel void @k0() sanitize_address {
124128
; CHECK-NEXT: [[TMP41:%.*]] = and i1 [[TMP37]], [[TMP40]]
125129
; CHECK-NEXT: [[TMP42:%.*]] = call i64 @llvm.amdgcn.ballot.i64(i1 [[TMP41]])
126130
; CHECK-NEXT: [[TMP43:%.*]] = icmp ne i64 [[TMP42]], 0
127-
; CHECK-NEXT: br i1 [[TMP43]], label [[ASAN_REPORT:%.*]], label [[TMP46:%.*]], !prof [[PROF2]]
128-
; CHECK: asan.report:
129-
; CHECK-NEXT: br i1 [[TMP41]], label [[TMP44:%.*]], label [[CONDFREE:%.*]]
130-
; CHECK: 44:
131+
; CHECK-NEXT: br i1 [[TMP43]], label %[[ASAN_REPORT:.*]], label %[[BB46:.*]], !prof [[PROF2]]
132+
; CHECK: [[ASAN_REPORT]]:
133+
; CHECK-NEXT: br i1 [[TMP41]], label %[[BB44:.*]], label %[[BB45:.*]]
134+
; CHECK: [[BB44]]:
131135
; CHECK-NEXT: call void @__asan_report_store1(i64 [[TMP32]]) #[[ATTR7]]
132136
; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
133-
; CHECK-NEXT: br label [[CONDFREE]]
134-
; CHECK: 45:
135-
; CHECK-NEXT: br label [[TMP46]]
136-
; CHECK: 46:
137+
; CHECK-NEXT: br label %[[BB45]]
138+
; CHECK: [[BB45]]:
139+
; CHECK-NEXT: br label %[[BB46]]
140+
; CHECK: [[BB46]]:
137141
; CHECK-NEXT: store i8 7, ptr addrspace(1) [[TMP31]], align 1
138142
; CHECK-NEXT: [[TMP47:%.*]] = ptrtoint ptr addrspace(3) [[TMP18]] to i32
139143
; CHECK-NEXT: [[TMP48:%.*]] = getelementptr inbounds i8, ptr addrspace(1) [[TMP19]], i32 [[TMP47]]
@@ -152,16 +156,16 @@ define amdgpu_kernel void @k0() sanitize_address {
152156
; CHECK-NEXT: [[TMP59:%.*]] = and i1 [[TMP54]], [[TMP58]]
153157
; CHECK-NEXT: [[TMP60:%.*]] = call i64 @llvm.amdgcn.ballot.i64(i1 [[TMP59]])
154158
; CHECK-NEXT: [[TMP61:%.*]] = icmp ne i64 [[TMP60]], 0
155-
; CHECK-NEXT: br i1 [[TMP61]], label [[ASAN_REPORT1:%.*]], label [[TMP64:%.*]], !prof [[PROF2]]
156-
; CHECK: asan.report1:
157-
; CHECK-NEXT: br i1 [[TMP59]], label [[TMP62:%.*]], label [[TMP63:%.*]]
158-
; CHECK: 64:
159+
; CHECK-NEXT: br i1 [[TMP61]], label %[[ASAN_REPORT1:.*]], label %[[BB66:.*]], !prof [[PROF2]]
160+
; CHECK: [[ASAN_REPORT1]]:
161+
; CHECK-NEXT: br i1 [[TMP59]], label %[[BB64:.*]], label %[[BB65:.*]]
162+
; CHECK: [[BB64]]:
159163
; CHECK-NEXT: call void @__asan_report_store1(i64 [[TMP83]]) #[[ATTR7]]
160164
; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
161-
; CHECK-NEXT: br label [[TMP63]]
162-
; CHECK: 65:
163-
; CHECK-NEXT: br label [[TMP64]]
164-
; CHECK: 66:
165+
; CHECK-NEXT: br label %[[BB65]]
166+
; CHECK: [[BB65]]:
167+
; CHECK-NEXT: br label %[[BB66]]
168+
; CHECK: [[BB66]]:
165169
; CHECK-NEXT: [[TMP84:%.*]] = ptrtoint ptr addrspace(1) [[TMP82]] to i64
166170
; CHECK-NEXT: [[TMP85:%.*]] = lshr i64 [[TMP84]], 3
167171
; CHECK-NEXT: [[TMP69:%.*]] = add i64 [[TMP85]], 2147450880
@@ -174,28 +178,28 @@ define amdgpu_kernel void @k0() sanitize_address {
174178
; CHECK-NEXT: [[TMP76:%.*]] = and i1 [[TMP72]], [[TMP75]]
175179
; CHECK-NEXT: [[TMP77:%.*]] = call i64 @llvm.amdgcn.ballot.i64(i1 [[TMP76]])
176180
; CHECK-NEXT: [[TMP78:%.*]] = icmp ne i64 [[TMP77]], 0
177-
; CHECK-NEXT: br i1 [[TMP78]], label [[ASAN_REPORT2:%.*]], label [[TMP81:%.*]], !prof [[PROF2]]
178-
; CHECK: asan.report2:
179-
; CHECK-NEXT: br i1 [[TMP76]], label [[TMP79:%.*]], label [[TMP80:%.*]]
180-
; CHECK: 79:
181+
; CHECK-NEXT: br i1 [[TMP78]], label %[[ASAN_REPORT2:.*]], label %[[BB81:.*]], !prof [[PROF2]]
182+
; CHECK: [[ASAN_REPORT2]]:
183+
; CHECK-NEXT: br i1 [[TMP76]], label %[[BB79:.*]], label %[[BB80:.*]]
184+
; CHECK: [[BB79]]:
181185
; CHECK-NEXT: call void @__asan_report_store1(i64 [[TMP84]]) #[[ATTR7]]
182186
; CHECK-NEXT: call void @llvm.amdgcn.unreachable()
183-
; CHECK-NEXT: br label [[TMP80]]
184-
; CHECK: 80:
185-
; CHECK-NEXT: br label [[TMP81]]
186-
; CHECK: 81:
187+
; CHECK-NEXT: br label %[[BB80]]
188+
; CHECK: [[BB80]]:
189+
; CHECK-NEXT: br label %[[BB81]]
190+
; CHECK: [[BB81]]:
187191
; CHECK-NEXT: store i32 8, ptr addrspace(1) [[TMP48]], align 2
188-
; CHECK-NEXT: br label [[CONDFREE1:%.*]]
189-
; CHECK: CondFree:
192+
; CHECK-NEXT: br label %[[CONDFREE:.*]]
193+
; CHECK: [[CONDFREE]]:
190194
; CHECK-NEXT: call void @llvm.amdgcn.s.barrier()
191-
; CHECK-NEXT: br i1 [[XYZCOND]], label [[FREE:%.*]], label [[END:%.*]]
192-
; CHECK: Free:
195+
; CHECK-NEXT: br i1 [[XYZCOND]], label %[[FREE:.*]], label %[[END:.*]]
196+
; CHECK: [[FREE]]:
193197
; CHECK-NEXT: [[TMP20:%.*]] = call ptr @llvm.returnaddress(i32 0)
194198
; CHECK-NEXT: [[TMP21:%.*]] = ptrtoint ptr [[TMP20]] to i64
195199
; CHECK-NEXT: [[TMP22:%.*]] = ptrtoint ptr addrspace(1) [[TMP19]] to i64
196200
; CHECK-NEXT: call void @__asan_free_impl(i64 [[TMP22]], i64 [[TMP21]])
197-
; CHECK-NEXT: br label [[END]]
198-
; CHECK: End:
201+
; CHECK-NEXT: br label %[[END]]
202+
; CHECK: [[END]]:
199203
; CHECK-NEXT: ret void
200204
;
201205
call void @use_variables()

0 commit comments

Comments
 (0)