Skip to content

Commit ffb1022

Browse files
committed
Expand the test case to prefetch hints.
1 parent 3cf143c commit ffb1022

File tree

3 files changed

+28
-9
lines changed

3 files changed

+28
-9
lines changed

llvm/lib/CodeGen/BasicBlockSectionsProfileReader.cpp

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -328,9 +328,12 @@ Error BasicBlockSectionsProfileReader::ReadV1Profile() {
328328
// past-the-end element.
329329
if (FI == ProgramPathAndClusterInfo.end())
330330
continue;
331-
assert(Values.size() == 2);
331+
if (Values.size() != 2)
332+
return createProfileParseError(Twine("Prefetch hint expected: "+ S));
332333
SmallVector<StringRef, 2> PrefetchSiteStr;
333334
Values[0].split(PrefetchSiteStr, '@');
335+
if (PrefetchSiteStr.size() != 2)
336+
return createProfileParseError(Twine("Prefetch site expected: ") + Values[0]);
334337
assert(PrefetchSiteStr.size() == 2);
335338
auto SiteBBID = parseUniqueBBID(PrefetchSiteStr[0]);
336339
if (!SiteBBID)
@@ -342,7 +345,8 @@ Error BasicBlockSectionsProfileReader::ReadV1Profile() {
342345

343346
SmallVector<StringRef, 3> PrefetchTargetStr;
344347
Values[1].split(PrefetchTargetStr, '@');
345-
assert(PrefetchTargetStr.size() == 3);
348+
if (PrefetchTargetStr.size() != 3)
349+
return createProfileParseError(Twine("Prefetch target target expected: ") + Values[1]);
346350
auto TargetBBID = parseUniqueBBID(PrefetchTargetStr[1]);
347351
if (!TargetBBID)
348352
return TargetBBID.takeError();
@@ -361,10 +365,13 @@ Error BasicBlockSectionsProfileReader::ReadV1Profile() {
361365
// past-the-end element.
362366
if (FI == ProgramPathAndClusterInfo.end())
363367
continue;
364-
assert(Values.size() == 1);
368+
if (Values.size() != 1)
369+
return createProfileParseError(Twine("Prefetch target expected: ")+ S);
365370
SmallVector<StringRef, 2> PrefetchTargetStr;
366371
Values[0].split(PrefetchTargetStr, '@');
367372
assert(PrefetchTargetStr.size() == 2);
373+
if (PrefetchTargetStr.size() != 2)
374+
return createProfileParseError(Twine("Prefetch target expected: ")+ Values[0]);
368375
auto TargetBBID = parseUniqueBBID(PrefetchTargetStr[0]);
369376
if (!TargetBBID)
370377
return TargetBBID.takeError();

llvm/lib/CodeGen/InsertCodePrefetch.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ bool InsertCodePrefetch::runOnMachineFunction(MachineFunction &MF) {
105105
DenseMap<UniqueBBID, SmallVector<PrefetchHint>> PrefetchHintsBySiteBBID;
106106
for (const auto &H : PrefetchHints)
107107
PrefetchHintsBySiteBBID[H.SiteID.BBID].push_back(H);
108-
for (auto &[SiteBBID, H] : PrefetchHintsBySiteBBID) {
109-
llvm::sort(H, [](const PrefetchHint &H1, const PrefetchHint &H2) {
108+
for (auto &[SiteBBID, Hints] : PrefetchHintsBySiteBBID) {
109+
llvm::sort(Hints, [](const PrefetchHint &H1, const PrefetchHint &H2) {
110110
return H1.SiteID.SubblockIndex < H2.SiteID.SubblockIndex;
111111
});
112112
}
@@ -122,13 +122,13 @@ bool InsertCodePrefetch::runOnMachineFunction(MachineFunction &MF) {
122122
auto InstrIt = BB.begin();
123123
for (auto HintIt = PrefetchHints.begin(); HintIt != PrefetchHints.end();) {
124124
auto NextInstrIt = InstrIt == BB.end() ? BB.end() : std::next(InstrIt);
125-
while (NumCallsInBB >= HintIt->SiteID.SubblockIndex) {
125+
while (HintIt != PrefetchHints.end() && NumCallsInBB >= HintIt->SiteID.SubblockIndex) {
126126
auto *GV = MF.getFunction().getParent()->getOrInsertGlobal(
127127
getPrefetchTargetSymbolName(HintIt->TargetFunction,
128128
HintIt->TargetID.BBID,
129129
HintIt->TargetID.SubblockIndex),
130130
PtrTy);
131-
TII->insertCodePrefetchInstr(BB, NextInstrIt, GV);
131+
TII->insertCodePrefetchInstr(BB, InstrIt, GV);
132132
++HintIt;
133133
}
134134
if (InstrIt == BB.end())

llvm/test/CodeGen/X86/basic-block-sections-code-prefetch.ll

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,14 @@
77
; RUN: echo 't 1@0' >> %t
88
; RUN: echo 't 1@1' >> %t
99
; RUN: echo 't 2@1' >> %t
10+
; RUN: echo 'i 3@0 _Z3barv@0@0' >> %t
11+
; RUN: echo 'i 2@1 _Z3foob@1@0' >> %t
1012
; RUN: echo 'f _Z3barv' >> %t
1113
; RUN: echo 't 0@0' >> %t
14+
; RUN: echo 'i 0@1 _Z3foob@0@0' >> %t
1215
; RUN: echo 't 21@1' >> %t
1316
;;
14-
; RUN: llc < %s -mtriple=x86_64-pc-linux -asm-verbose=false -function-sections -basic-block-sections=%t | FileCheck %s
17+
; RUN: llc < %s -O0 -mtriple=x86_64-pc-linux -asm-verbose=false -function-sections -basic-block-sections=%t | FileCheck %s
1518

1619
define i32 @_Z3foob(i1 zeroext %0) nounwind {
1720
%2 = alloca i32, align 4
@@ -44,18 +47,27 @@ define i32 @_Z3foob(i1 zeroext %0) nounwind {
4447
; CHECK: callq _Z3bazv@PLT
4548
; CHECK-NEXT: .globl __llvm_prefetch_target__Z3foob_2_1
4649
; CHECK-NEXT: __llvm_prefetch_target__Z3foob_2_1:
50+
; CHECK-NEXT: prefetchit1 __llvm_prefetch_target__Z3foob_1_0(%rip)
4751

4852
13: ; preds = %11, %9
4953
%14 = load i32, ptr %2, align 4
5054
ret i32 %14
55+
; CHECK: .LBB0_3:
56+
; CHECK-NEXT: prefetchit1 __llvm_prefetch_target__Z3barv_0_0(%rip)
57+
; CHECK: retq
58+
5159
}
5260

5361
define weak i32 @_Z3barv() nounwind {
5462
%1 = call i32 @_Z3bazv()
55-
ret i32 %1
63+
br label %2
5664
; CHECK: _Z3barv:
5765
; CHECK-NEXT: .weak __llvm_prefetch_target__Z3barv_0_0
5866
; CHECK-NEXT: __llvm_prefetch_target__Z3barv_0_0:
67+
; CHECK: callq _Z3bazv@PLT
68+
; CHECK-NEXT: prefetchit1 __llvm_prefetch_target__Z3foob_0_0(%rip)
69+
2:
70+
ret i32 %1
5971
}
6072

6173
declare i32 @_Z3bazv() #1

0 commit comments

Comments
 (0)