Skip to content

Commit

Permalink
Merged main:6ed3083a9654 into amd-gfx:1c8672849f8a
Browse files Browse the repository at this point in the history
Local branch amd-gfx 1c86728 Merged main:260a856c2abc into amd-gfx:07f887fbf91c
Remote branch main 6ed3083 ADT: Reduce code duplication in SmallVector by calling reserve and clear, NFC
  • Loading branch information
Sw authored and Sw committed Jan 14, 2021
2 parents 1c86728 + 6ed3083 commit f12986b
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 22 deletions.
10 changes: 8 additions & 2 deletions clang/lib/Driver/ToolChains/Clang.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3754,15 +3754,21 @@ static void RenderDebugOptions(const ToolChain &TC, const Driver &D,
Args.hasFlag(options::OPT_fsplit_dwarf_inlining,
options::OPT_fno_split_dwarf_inlining, false);

if (const Arg *A = Args.getLastArg(options::OPT_g_Group)) {
// Normally -gsplit-dwarf is only useful with -gN. For -gsplit-dwarf in the
// backend phase of a distributed ThinLTO which does object file generation
// and no IR generation, -gN should not be needed. So allow -gsplit-dwarf with
// either -gN or -fthinlto-index=.
if (Args.hasArg(options::OPT_g_Group) ||
Args.hasArg(options::OPT_fthinlto_index_EQ)) {
Arg *SplitDWARFArg;
DwarfFission = getDebugFissionKind(D, Args, SplitDWARFArg);
if (DwarfFission != DwarfFissionKind::None &&
!checkDebugInfoOption(SplitDWARFArg, Args, D, TC)) {
DwarfFission = DwarfFissionKind::None;
SplitDWARFInlining = false;
}

}
if (const Arg *A = Args.getLastArg(options::OPT_g_Group)) {
DebugInfoKind = codegenoptions::LimitedDebugInfo;

// If the last option explicitly specified a debug-info level, use it.
Expand Down
8 changes: 8 additions & 0 deletions clang/test/Driver/split-debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@
/// -gsplit-dwarf is a no-op if no -g is specified.
// RUN: %clang -### -c -target x86_64 -gsplit-dwarf %s 2>&1 | FileCheck %s --check-prefix=G0

/// ... unless -fthinlto-index= is specified.
// RUN: echo > %t.bc
// RUN: %clang -### -c -target x86_64 -fthinlto-index=dummy -gsplit-dwarf %t.bc 2>&1 | FileCheck %s --check-prefix=THINLTO

// THINLTO-NOT: "-debug-info-kind=
// THINLTO: "-ggnu-pubnames"
// THINLTO-SAME: "-split-dwarf-file" "{{.*}}.dwo" "-split-dwarf-output" "{{.*}}.dwo"

/// -gno-split-dwarf disables debug fission.
// RUN: %clang -### -c -target x86_64 -gsplit-dwarf -g -gno-split-dwarf %s 2>&1 | FileCheck %s --check-prefix=NOSPLIT
// RUN: %clang -### -c -target x86_64 -gsplit-dwarf=single -g -gno-split-dwarf %s 2>&1 | FileCheck %s --check-prefix=NOSPLIT
Expand Down
28 changes: 9 additions & 19 deletions llvm/include/llvm/ADT/SmallVector.h
Original file line number Diff line number Diff line change
Expand Up @@ -545,11 +545,9 @@ class SmallVectorImpl : public SmallVectorTemplateBase<T> {
private:
template <bool ForOverwrite> void resizeImpl(size_type N) {
if (N < this->size()) {
this->destroy_range(this->begin()+N, this->end());
this->set_size(N);
this->pop_back_n(this->size() - N);
} else if (N > this->size()) {
if (this->capacity() < N)
this->grow(N);
this->reserve(N);
for (auto I = this->end(), E = this->begin() + N; I != E; ++I)
if (ForOverwrite)
new (&*I) T;
Expand All @@ -570,8 +568,7 @@ class SmallVectorImpl : public SmallVectorTemplateBase<T> {
return;

if (N < this->size()) {
this->destroy_range(this->begin()+N, this->end());
this->set_size(N);
this->pop_back_n(this->size() - N);
return;
}

Expand Down Expand Up @@ -606,9 +603,7 @@ class SmallVectorImpl : public SmallVectorTemplateBase<T> {
void append(in_iter in_start, in_iter in_end) {
this->assertSafeToAddRange(in_start, in_end);
size_type NumInputs = std::distance(in_start, in_end);
if (NumInputs > this->capacity() - this->size())
this->grow(this->size()+NumInputs);

this->reserve(this->size() + NumInputs);
this->uninitialized_copy(in_start, in_end, this->end());
this->set_size(this->size() + NumInputs);
}
Expand All @@ -630,8 +625,7 @@ class SmallVectorImpl : public SmallVectorTemplateBase<T> {
void assign(size_type NumElts, const T &Elt) {
this->assertSafeToReferenceAfterResize(&Elt, 0);
clear();
if (this->capacity() < NumElts)
this->grow(NumElts);
this->reserve(NumElts);
this->set_size(NumElts);
std::uninitialized_fill(this->begin(), this->end(), Elt);
}
Expand Down Expand Up @@ -892,10 +886,8 @@ void SmallVectorImpl<T>::swap(SmallVectorImpl<T> &RHS) {
std::swap(this->Capacity, RHS.Capacity);
return;
}
if (RHS.size() > this->capacity())
this->grow(RHS.size());
if (this->size() > RHS.capacity())
RHS.grow(this->size());
this->reserve(RHS.size());
RHS.reserve(this->size());

// Swap the shared elements.
size_t NumShared = this->size();
Expand Down Expand Up @@ -950,8 +942,7 @@ SmallVectorImpl<T> &SmallVectorImpl<T>::
// FIXME: don't do this if they're efficiently moveable.
if (this->capacity() < RHSSize) {
// Destroy current elements.
this->destroy_range(this->begin(), this->end());
this->set_size(0);
this->clear();
CurSize = 0;
this->grow(RHSSize);
} else if (CurSize) {
Expand Down Expand Up @@ -1010,8 +1001,7 @@ SmallVectorImpl<T> &SmallVectorImpl<T>::operator=(SmallVectorImpl<T> &&RHS) {
// elements.
if (this->capacity() < RHSSize) {
// Destroy current elements.
this->destroy_range(this->begin(), this->end());
this->set_size(0);
this->clear();
CurSize = 0;
this->grow(RHSSize);
} else if (CurSize) {
Expand Down
2 changes: 1 addition & 1 deletion llvm/include/llvm/Config/llvm-config.h.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

/* Indicate that this is LLVM compiled from the amd-gfx branch. */
#define LLVM_HAVE_BRANCH_AMD_GFX
#define LLVM_MAIN_REVISION 376986
#define LLVM_MAIN_REVISION 376990

/* Define if LLVM_ENABLE_DUMP is enabled */
#cmakedefine LLVM_ENABLE_DUMP
Expand Down

0 comments on commit f12986b

Please sign in to comment.