Skip to content

Commit 0406c91

Browse files
authored
Merge branch 'main' into users/svkeerthy/10-08-ir2vec-fa-refactor
2 parents eb0c96c + e9205ca commit 0406c91

File tree

6 files changed

+58
-10
lines changed

6 files changed

+58
-10
lines changed

bolt/lib/Rewrite/RewriteInstance.cpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1514,6 +1514,12 @@ void RewriteInstance::registerFragments() {
15141514
}
15151515
if (BD) {
15161516
BinaryFunction *BF = BC->getFunctionForSymbol(BD->getSymbol());
1517+
if (BF == &Function) {
1518+
BC->errs()
1519+
<< "BOLT-WARNING: fragment maps to the same function as parent: "
1520+
<< Function << '\n';
1521+
continue;
1522+
}
15171523
if (BF) {
15181524
BC->registerFragment(Function, *BF);
15191525
continue;
@@ -4005,10 +4011,12 @@ void RewriteInstance::mapCodeSections(BOLTLinker::SectionMapper MapSection) {
40054011
BC->outs() << '\n';
40064012
AllocationDone = true;
40074013
} else {
4008-
BC->errs() << "BOLT-WARNING: original .text too small to fit the new code"
4009-
<< " using 0x" << Twine::utohexstr(opts::AlignText)
4010-
<< " alignment. " << CodeSize << " bytes needed, have "
4011-
<< BC->OldTextSectionSize << " bytes available.\n";
4014+
BC->errs() << "BOLT-WARNING: --use-old-text failed. The original .text "
4015+
"too small to fit the new code using 0x"
4016+
<< Twine::utohexstr(opts::AlignText) << " alignment. "
4017+
<< CodeSize << " bytes needed, have " << BC->OldTextSectionSize
4018+
<< " bytes available. Rebuilding without --use-old-text may "
4019+
"produce a smaller binary\n";
40124020
opts::UseOldText = false;
40134021
}
40144022
}

bolt/test/X86/fragment-alias.s

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
## This test reproduces the issue where a fragment has the same address as
2+
## parent function.
3+
# RUN: llvm-mc --filetype=obj --triple x86_64-unknown-unknown %s -o %t.o
4+
# RUN: %clang %cflags %t.o -o %t
5+
# RUN: llvm-bolt %t -o %t.out 2>&1 | FileCheck %s
6+
# CHECK: BOLT-WARNING: fragment maps to the same function as parent: main/1(*2)
7+
.type main, @function
8+
.type main.cold, @function
9+
main.cold:
10+
main:
11+
ret
12+
.size main, .-main
13+
.size main.cold, .-main.cold

clang-tools-extra/docs/clang-tidy/checks/list.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -372,7 +372,7 @@ Clang-Tidy Checks
372372
:doc:`readability-avoid-nested-conditional-operator <readability/avoid-nested-conditional-operator>`,
373373
:doc:`readability-avoid-return-with-void-value <readability/avoid-return-with-void-value>`, "Yes"
374374
:doc:`readability-avoid-unconditional-preprocessor-if <readability/avoid-unconditional-preprocessor-if>`,
375-
:doc:`readability-braces-around-statements <readability/braces-around-statements>`,
375+
:doc:`readability-braces-around-statements <readability/braces-around-statements>`, "Yes"
376376
:doc:`readability-const-return-type <readability/const-return-type>`, "Yes"
377377
:doc:`readability-container-contains <readability/container-contains>`, "Yes"
378378
:doc:`readability-container-data-pointer <readability/container-data-pointer>`, "Yes"
@@ -571,12 +571,12 @@ Check aliases
571571
:doc:`cppcoreguidelines-non-private-member-variables-in-classes <cppcoreguidelines/non-private-member-variables-in-classes>`, :doc:`misc-non-private-member-variables-in-classes <misc/non-private-member-variables-in-classes>`,
572572
:doc:`cppcoreguidelines-use-default-member-init <cppcoreguidelines/use-default-member-init>`, :doc:`modernize-use-default-member-init <modernize/use-default-member-init>`, "Yes"
573573
:doc:`fuchsia-header-anon-namespaces <fuchsia/header-anon-namespaces>`, :doc:`google-build-namespaces <google/build-namespaces>`,
574-
:doc:`google-readability-braces-around-statements <google/readability-braces-around-statements>`, :doc:`readability-braces-around-statements <readability/braces-around-statements>`,
574+
:doc:`google-readability-braces-around-statements <google/readability-braces-around-statements>`, :doc:`readability-braces-around-statements <readability/braces-around-statements>`, "Yes"
575575
:doc:`google-readability-function-size <google/readability-function-size>`, :doc:`readability-function-size <readability/function-size>`,
576576
:doc:`google-readability-namespace-comments <google/readability-namespace-comments>`, :doc:`llvm-namespace-comment <llvm/namespace-comment>`,
577577
:doc:`hicpp-avoid-c-arrays <hicpp/avoid-c-arrays>`, :doc:`modernize-avoid-c-arrays <modernize/avoid-c-arrays>`,
578578
:doc:`hicpp-avoid-goto <hicpp/avoid-goto>`, :doc:`cppcoreguidelines-avoid-goto <cppcoreguidelines/avoid-goto>`,
579-
:doc:`hicpp-braces-around-statements <hicpp/braces-around-statements>`, :doc:`readability-braces-around-statements <readability/braces-around-statements>`,
579+
:doc:`hicpp-braces-around-statements <hicpp/braces-around-statements>`, :doc:`readability-braces-around-statements <readability/braces-around-statements>`, "Yes"
580580
:doc:`hicpp-deprecated-headers <hicpp/deprecated-headers>`, :doc:`modernize-deprecated-headers <modernize/deprecated-headers>`, "Yes"
581581
:doc:`hicpp-explicit-conversions <hicpp/explicit-conversions>`, :doc:`google-explicit-constructor <google/explicit-constructor>`, "Yes"
582582
:doc:`hicpp-function-size <hicpp/function-size>`, :doc:`readability-function-size <readability/function-size>`,

llvm/lib/Target/X86/X86InstrAVX10.td

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -592,10 +592,10 @@ def : Pat<(X86mcvttp2sis (v2f64 (X86VBroadcastld64 addr:$src)),
592592
(VCVTTPD2DQSZ128rmbkz VK2WM:$mask, addr:$src)>;
593593

594594
// Patterns VCVTTPD2UDQSZ128
595-
def : Pat<(v4i32 (X86cvttp2uis (v2f64 (X86VBroadcastld64 addr:$src)))),
596-
(VCVTTPD2UDQSZ128rmb addr:$src)>;
597595
def : Pat<(v4i32 (X86cvttp2uis (v2f64 VR128X:$src))),
598596
(VCVTTPD2UDQSZ128rr VR128X:$src)>;
597+
def : Pat<(v4i32 (X86cvttp2uis (loadv2f64 addr:$src))),
598+
(VCVTTPD2UDQSZ128rm addr:$src)>;
599599
def : Pat<(v4i32 (X86cvttp2uis (v2f64 (X86VBroadcastld64 addr:$src)))),
600600
(VCVTTPD2UDQSZ128rmb addr:$src)>;
601601
def : Pat<(X86mcvttp2uis (v2f64 VR128X:$src), (v4i32 VR128X:$src0),

llvm/lib/Transforms/Utils/SimplifyCFG.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5959,7 +5959,11 @@ bool SimplifyCFGOpt::turnSwitchRangeIntoICmp(SwitchInst *SI,
59595959
unsigned PreviousEdges = OtherCases->size();
59605960
if (OtherDest == SI->getDefaultDest())
59615961
++PreviousEdges;
5962-
for (unsigned I = 0, E = PreviousEdges - 1; I != E; ++I)
5962+
unsigned E = PreviousEdges - 1;
5963+
// Remove all incoming values from OtherDest if OtherDest is unreachable.
5964+
if (NewBI->isUnconditional())
5965+
++E;
5966+
for (unsigned I = 0; I != E; ++I)
59635967
cast<PHINode>(BBI)->removeIncomingValue(SI->getParent());
59645968
}
59655969

llvm/test/Transforms/SimplifyCFG/switch-range-to-icmp.ll

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,4 +401,27 @@ b:
401401
ret i32 %1
402402
}
403403

404+
define i32 @else_will_be_unreachable(i1 %arg) {
405+
; CHECK-LABEL: @else_will_be_unreachable(
406+
; CHECK-NEXT: entry:
407+
; CHECK-NEXT: [[I:%.*]] = select i1 [[ARG:%.*]], i32 0, i32 1
408+
; CHECK-NEXT: ret i32 [[I]]
409+
;
410+
entry:
411+
switch i1 %arg, label %else [
412+
i1 false, label %if
413+
i1 true, label %if
414+
]
415+
416+
if:
417+
br i1 %arg, label %else, label %bb
418+
419+
bb:
420+
br label %else
421+
422+
else:
423+
%i = phi i32 [ 0, %entry ], [ 0, %if ], [ 1, %bb ]
424+
ret i32 %i
425+
}
426+
404427
declare void @bar(ptr nonnull dereferenceable(4))

0 commit comments

Comments
 (0)