Skip to content

Commit

Permalink
Merged master:7bf168390fd into amd-gfx:a06e03ac400
Browse files Browse the repository at this point in the history
Local branch amd-gfx a06e03a Merged master:760bbda2d82 into amd-gfx:3377900a4e6
Remote branch master 7bf1683 [BDCE] SExt -> ZExt when no sign bits is used and instruction has multiple uses
  • Loading branch information
Sw authored and Sw committed Jul 10, 2020
2 parents a06e03a + 7bf1683 commit d5bbbc9
Show file tree
Hide file tree
Showing 26 changed files with 388 additions and 264 deletions.
81 changes: 52 additions & 29 deletions clang-tools-extra/clangd/FindTarget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,24 @@ nodeToString(const ast_type_traits::DynTypedNode &N) {
return S;
}

// Helper function for getMembersReferencedViaDependentName()
// which takes a dependent type `T` and heuristically
// resolves it to a CXXRecordDecl in which we can try name lookup.
CXXRecordDecl *resolveTypeToRecordDecl(const Type *T) {
assert(T);
if (const auto *ICNT = T->getAs<InjectedClassNameType>()) {
T = ICNT->getInjectedSpecializationType().getTypePtrOrNull();
}
const auto *TST = T->getAs<TemplateSpecializationType>();
if (!TST)
return nullptr;
const ClassTemplateDecl *TD = dyn_cast_or_null<ClassTemplateDecl>(
TST->getTemplateName().getAsTemplateDecl());
if (!TD)
return nullptr;
return TD->getTemplatedDecl();
}

// Given a dependent type and a member name, heuristically resolve the
// name to one or more declarations.
// The current heuristic is simply to look up the name in the primary
Expand All @@ -82,25 +100,17 @@ std::vector<const NamedDecl *> getMembersReferencedViaDependentName(
ET->getDecl()->lookup(NameFactory(ET->getDecl()->getASTContext()));
return {Result.begin(), Result.end()};
}
if (auto *ICNT = T->getAs<InjectedClassNameType>()) {
T = ICNT->getInjectedSpecializationType().getTypePtrOrNull();
if (auto *RD = resolveTypeToRecordDecl(T)) {
if (!RD->hasDefinition())
return {};
RD = RD->getDefinition();
DeclarationName Name = NameFactory(RD->getASTContext());
return RD->lookupDependentName(Name, [=](const NamedDecl *D) {
return IsNonstaticMember ? D->isCXXInstanceMember()
: !D->isCXXInstanceMember();
});
}
auto *TST = T->getAs<TemplateSpecializationType>();
if (!TST)
return {};
const ClassTemplateDecl *TD = dyn_cast_or_null<ClassTemplateDecl>(
TST->getTemplateName().getAsTemplateDecl());
if (!TD)
return {};
CXXRecordDecl *RD = TD->getTemplatedDecl();
if (!RD->hasDefinition())
return {};
RD = RD->getDefinition();
DeclarationName Name = NameFactory(RD->getASTContext());
return RD->lookupDependentName(Name, [=](const NamedDecl *D) {
return IsNonstaticMember ? D->isCXXInstanceMember()
: !D->isCXXInstanceMember();
});
return {};
}

// Given the type T of a dependent expression that appears of the LHS of a "->",
Expand Down Expand Up @@ -144,6 +154,28 @@ const Type *getPointeeType(const Type *T) {
return FirstArg.getAsType().getTypePtrOrNull();
}

// Try to heuristically resolve a dependent expression `E` to one
// or more declarations that it likely references.
std::vector<const NamedDecl *> resolveDependentExprToDecls(const Expr *E) {
assert(E->isTypeDependent());
if (const auto *ME = dyn_cast<CXXDependentScopeMemberExpr>(E)) {
const Type *BaseType = ME->getBaseType().getTypePtrOrNull();
if (ME->isArrow()) {
BaseType = getPointeeType(BaseType);
}
return getMembersReferencedViaDependentName(
BaseType, [ME](ASTContext &) { return ME->getMember(); },
/*IsNonstaticMember=*/true);
}
if (const auto *RE = dyn_cast<DependentScopeDeclRefExpr>(E)) {
return getMembersReferencedViaDependentName(
RE->getQualifier()->getAsType(),
[RE](ASTContext &) { return RE->getDeclName(); },
/*IsNonstaticMember=*/false);
}
return {};
}

const NamedDecl *getTemplatePattern(const NamedDecl *D) {
if (const CXXRecordDecl *CRD = dyn_cast<CXXRecordDecl>(D)) {
if (const auto *Result = CRD->getTemplateInstantiationPattern())
Expand Down Expand Up @@ -341,21 +373,12 @@ struct TargetFinder {
}
void
VisitCXXDependentScopeMemberExpr(const CXXDependentScopeMemberExpr *E) {
const Type *BaseType = E->getBaseType().getTypePtrOrNull();
if (E->isArrow()) {
BaseType = getPointeeType(BaseType);
}
for (const NamedDecl *D : getMembersReferencedViaDependentName(
BaseType, [E](ASTContext &) { return E->getMember(); },
/*IsNonstaticMember=*/true)) {
for (const NamedDecl *D : resolveDependentExprToDecls(E)) {
Outer.add(D, Flags);
}
}
void VisitDependentScopeDeclRefExpr(const DependentScopeDeclRefExpr *E) {
for (const NamedDecl *D : getMembersReferencedViaDependentName(
E->getQualifier()->getAsType(),
[E](ASTContext &) { return E->getDeclName(); },
/*IsNonstaticMember=*/false)) {
for (const NamedDecl *D : resolveDependentExprToDecls(E)) {
Outer.add(D, Flags);
}
}
Expand Down
1 change: 1 addition & 0 deletions clang/include/clang/Basic/DiagnosticOptions.def
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ VALUE_DIAGOPT(ShowCategories, 2, 0) /// Show categories: 0 -> none, 1 -> Number,
ENUM_DIAGOPT(Format, TextDiagnosticFormat, 2, Clang) /// Format for diagnostics:

DIAGOPT(ShowColors, 1, 0) /// Show diagnostics with ANSI color sequences.
DIAGOPT(UseANSIEscapeCodes, 1, 0)
ENUM_DIAGOPT(ShowOverloads, OverloadsShown, 1,
Ovl_All) /// Overload candidates to show.
DIAGOPT(VerifyDiagnostics, 1, 0) /// Check that diagnostics match the expected
Expand Down
3 changes: 2 additions & 1 deletion clang/include/clang/Driver/Options.td
Original file line number Diff line number Diff line change
Expand Up @@ -849,7 +849,8 @@ def fdiagnostics_color : Flag<["-"], "fdiagnostics-color">, Group<f_Group>,
Flags<[CoreOption, DriverOption]>;
def fdiagnostics_color_EQ : Joined<["-"], "fdiagnostics-color=">, Group<f_Group>;
def fansi_escape_codes : Flag<["-"], "fansi-escape-codes">, Group<f_Group>,
Flags<[CoreOption, CC1Option]>, HelpText<"Use ANSI escape codes for diagnostics">;
Flags<[CoreOption, CC1Option]>, HelpText<"Use ANSI escape codes for diagnostics">,
MarshallingInfoFlag<"DiagnosticOpts->UseANSIEscapeCodes", "false">;
def fcomment_block_commands : CommaJoined<["-"], "fcomment-block-commands=">, Group<f_clang_Group>, Flags<[CC1Option]>,
HelpText<"Treat each comma separated argument in <arg> as a documentation comment block command">,
MetaVarName<"<arg>">;
Expand Down
6 changes: 4 additions & 2 deletions clang/lib/Frontend/CompilerInvocation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1580,8 +1580,6 @@ bool clang::ParseDiagnosticArgs(DiagnosticOptions &Opts, ArgList &Args,
Opts.AbsolutePath = Args.hasArg(OPT_fdiagnostics_absolute_paths);
Opts.ShowOptionNames = !Args.hasArg(OPT_fno_diagnostics_show_option);

llvm::sys::Process::UseANSIEscapeCodes(Args.hasArg(OPT_fansi_escape_codes));

// Default behavior is to not to show note include stacks.
Opts.ShowNoteIncludeStack = false;
if (Arg *A = Args.getLastArg(OPT_fdiagnostics_show_note_include_stack,
Expand Down Expand Up @@ -3724,6 +3722,10 @@ bool CompilerInvocation::CreateFromArgs(CompilerInvocation &Res,
}

Success &= Res.parseSimpleArgs(Args, Diags);

llvm::sys::Process::UseANSIEscapeCodes(
Res.DiagnosticOpts->UseANSIEscapeCodes);

Success &= ParseAnalyzerArgs(*Res.getAnalyzerOpts(), Args, Diags);
Success &= ParseMigratorArgs(Res.getMigratorOpts(), Args);
ParseDependencyOutputArgs(Res.getDependencyOutputOpts(), Args);
Expand Down
62 changes: 59 additions & 3 deletions lldb/source/Utility/ARM64_DWARF_Registers.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,31 @@ enum {
sp = x31,
pc = 32,
cpsr = 33,
// 34-63 reserved
// 34-45 reserved

// 64-bit SVE Vector granule pseudo register
vg = 46,

// VG ́8-bit SVE first fault register
ffr = 47,

// VG x ́8-bit SVE predicate registers
p0 = 48,
p1,
p2,
p3,
p4,
p5,
p6,
p7,
p8,
p9,
p10,
p11,
p12,
p13,
p14,
p15,

// V0-V31 (128 bit vector registers)
v0 = 64,
Expand Down Expand Up @@ -85,9 +109,41 @@ enum {
v28,
v29,
v30,
v31
v31,

// 96-127 reserved
// VG ́64-bit SVE vector registers
z0 = 96,
z1,
z2,
z3,
z4,
z5,
z6,
z7,
z8,
z9,
z10,
z11,
z12,
z13,
z14,
z15,
z16,
z17,
z18,
z19,
z20,
z21,
z22,
z23,
z24,
z25,
z26,
z27,
z28,
z29,
z30,
z31
};

} // namespace arm64_dwarf
Expand Down
66 changes: 62 additions & 4 deletions lldb/source/Utility/ARM64_ehframe_Registers.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,10 +49,34 @@ enum {
lr, // aka x30
sp, // aka x31 aka wzr
pc, // value is 32
cpsr
};
cpsr,
// 34-45 reserved

enum {
// 64-bit SVE Vector granule pseudo register
vg = 46,

// VG ́8-bit SVE first fault register
ffr = 47,

// VG x ́8-bit SVE predicate registers
p0 = 48,
p1,
p2,
p3,
p4,
p5,
p6,
p7,
p8,
p9,
p10,
p11,
p12,
p13,
p14,
p15,

// V0-V31 (128 bit vector registers)
v0 = 64,
v1,
v2,
Expand Down Expand Up @@ -84,7 +108,41 @@ enum {
v28,
v29,
v30,
v31 // 95
v31,

// VG ́64-bit SVE vector registers
z0 = 96,
z1,
z2,
z3,
z4,
z5,
z6,
z7,
z8,
z9,
z10,
z11,
z12,
z13,
z14,
z15,
z16,
z17,
z18,
z19,
z20,
z21,
z22,
z23,
z24,
z25,
z26,
z27,
z28,
z29,
z30,
z31
};
}

Expand Down
57 changes: 0 additions & 57 deletions llvm/include/llvm/Analysis/OrderedInstructions.h

This file was deleted.

1 change: 0 additions & 1 deletion llvm/lib/Analysis/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ add_llvm_component_library(LLVMAnalysis
ObjCARCAnalysisUtils.cpp
ObjCARCInstKind.cpp
OptimizationRemarkEmitter.cpp
OrderedInstructions.cpp
PHITransAddr.cpp
PhiValues.cpp
PostDominators.cpp
Expand Down
Loading

0 comments on commit d5bbbc9

Please sign in to comment.