Skip to content

Commit

Permalink
Merge from 'master' to 'sycl-web' (#13)
Browse files Browse the repository at this point in the history
  CONFLICT (content): Merge conflict in clang/lib/Driver/Driver.cpp
  • Loading branch information
Valery N Dmitriev committed Jun 22, 2020
2 parents cbb2e5a + 77df5a8 commit 50e4056
Show file tree
Hide file tree
Showing 32 changed files with 1,247 additions and 817 deletions.
6 changes: 4 additions & 2 deletions clang-tools-extra/clang-tidy/llvm/TwineLocalCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ namespace llvm_check {

void TwineLocalCheck::registerMatchers(MatchFinder *Finder) {
auto TwineType =
qualType(hasDeclaration(recordDecl(hasName("::llvm::Twine"))));
Finder->addMatcher(varDecl(hasType(TwineType)).bind("variable"), this);
qualType(hasDeclaration(cxxRecordDecl(hasName("::llvm::Twine"))));
Finder->addMatcher(
varDecl(unless(parmVarDecl()), hasType(TwineType)).bind("variable"),
this);
}

void TwineLocalCheck::check(const MatchFinder::MatchResult &Result) {
Expand Down
39 changes: 24 additions & 15 deletions clang-tools-extra/clang-tidy/utils/RenamerClangTidyCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,17 @@ void RenamerClangTidyCheck::addUsage(
// is already in there
RenamerClangTidyCheck::NamingCheckFailure &Failure =
NamingCheckFailures[Decl];
if (!Failure.RawUsageLocs.insert(FixLocation.getRawEncoding()).second)
return;

if (!Failure.ShouldFix())
return;

if (SourceMgr && SourceMgr->isWrittenInScratchSpace(FixLocation))
Failure.FixStatus = RenamerClangTidyCheck::ShouldFixStatus::InsideMacro;

if (!utils::rangeCanBeFixed(Range, SourceMgr))
Failure.FixStatus = RenamerClangTidyCheck::ShouldFixStatus::InsideMacro;

Failure.RawUsageLocs.insert(FixLocation.getRawEncoding());
}

void RenamerClangTidyCheck::addUsage(const NamedDecl *Decl, SourceRange Range,
Expand Down Expand Up @@ -248,13 +251,15 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
if (const auto *Decl =
Result.Nodes.getNodeAs<CXXConstructorDecl>("classRef")) {

addUsage(Decl->getParent(), Decl->getNameInfo().getSourceRange());
addUsage(Decl->getParent(), Decl->getNameInfo().getSourceRange(),
Result.SourceManager);

for (const auto *Init : Decl->inits()) {
if (!Init->isWritten() || Init->isInClassMemberInitializer())
continue;
if (const FieldDecl *FD = Init->getAnyMember())
addUsage(FD, SourceRange(Init->getMemberLocation()));
addUsage(FD, SourceRange(Init->getMemberLocation()),
Result.SourceManager);
// Note: delegating constructors and base class initializers are handled
// via the "typeLoc" matcher.
}
Expand All @@ -271,7 +276,7 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
// we want instead to replace the next token, that will be the identifier.
Range.setBegin(CharSourceRange::getTokenRange(Range).getEnd());

addUsage(Decl->getParent(), Range);
addUsage(Decl->getParent(), Range, Result.SourceManager);
return;
}

Expand All @@ -289,7 +294,7 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
// further TypeLocs handled below

if (Decl) {
addUsage(Decl, Loc->getSourceRange());
addUsage(Decl, Loc->getSourceRange(), Result.SourceManager);
return;
}

Expand All @@ -300,15 +305,15 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
SourceRange Range(Ref.getTemplateNameLoc(), Ref.getTemplateNameLoc());
if (const auto *ClassDecl = dyn_cast<TemplateDecl>(Decl)) {
if (const NamedDecl *TemplDecl = ClassDecl->getTemplatedDecl())
addUsage(TemplDecl, Range);
addUsage(TemplDecl, Range, Result.SourceManager);
return;
}
}

if (const auto &Ref =
Loc->getAs<DependentTemplateSpecializationTypeLoc>()) {
if (const TagDecl *Decl = Ref.getTypePtr()->getAsTagDecl())
addUsage(Decl, Loc->getSourceRange());
addUsage(Decl, Loc->getSourceRange(), Result.SourceManager);
return;
}
}
Expand All @@ -317,15 +322,16 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
Result.Nodes.getNodeAs<NestedNameSpecifierLoc>("nestedNameLoc")) {
if (const NestedNameSpecifier *Spec = Loc->getNestedNameSpecifier()) {
if (const NamespaceDecl *Decl = Spec->getAsNamespace()) {
addUsage(Decl, Loc->getLocalSourceRange());
addUsage(Decl, Loc->getLocalSourceRange(), Result.SourceManager);
return;
}
}
}

if (const auto *Decl = Result.Nodes.getNodeAs<UsingDecl>("using")) {
for (const auto *Shadow : Decl->shadows())
addUsage(Shadow->getTargetDecl(), Decl->getNameInfo().getSourceRange());
addUsage(Shadow->getTargetDecl(), Decl->getNameInfo().getSourceRange(),
Result.SourceManager);
return;
}

Expand Down Expand Up @@ -371,34 +377,37 @@ void RenamerClangTidyCheck::check(const MatchFinder::MatchResult &Result) {
// Fix using namespace declarations.
if (const auto *UsingNS = dyn_cast<UsingDirectiveDecl>(Decl))
addUsage(UsingNS->getNominatedNamespaceAsWritten(),
UsingNS->getIdentLocation());
UsingNS->getIdentLocation(), Result.SourceManager);

if (!Decl->getIdentifier() || Decl->getName().empty() || Decl->isImplicit())
return;

const auto *Canonical = cast<NamedDecl>(Decl->getCanonicalDecl());
if (Canonical != Decl) {
addUsage(Canonical, Decl->getLocation());
addUsage(Canonical, Decl->getLocation(), Result.SourceManager);
return;
}

// Fix type aliases in value declarations.
if (const auto *Value = Result.Nodes.getNodeAs<ValueDecl>("decl")) {
if (const Type *TypePtr = Value->getType().getTypePtrOrNull()) {
if (const auto *Typedef = TypePtr->getAs<TypedefType>())
addUsage(Typedef->getDecl(), Value->getSourceRange());
addUsage(Typedef->getDecl(), Value->getSourceRange(),
Result.SourceManager);
}
}

// Fix type aliases in function declarations.
if (const auto *Value = Result.Nodes.getNodeAs<FunctionDecl>("decl")) {
if (const auto *Typedef =
Value->getReturnType().getTypePtr()->getAs<TypedefType>())
addUsage(Typedef->getDecl(), Value->getSourceRange());
addUsage(Typedef->getDecl(), Value->getSourceRange(),
Result.SourceManager);
for (const ParmVarDecl *Param : Value->parameters()) {
if (const TypedefType *Typedef =
Param->getType().getTypePtr()->getAs<TypedefType>())
addUsage(Typedef->getDecl(), Value->getSourceRange());
addUsage(Typedef->getDecl(), Value->getSourceRange(),
Result.SourceManager);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ class Twine {
using namespace llvm;

void foo(const Twine &x);
void bar(Twine x);

static Twine Moo = Twine("bark") + "bah";
// CHECK-MESSAGES: :[[@LINE-1]]:14: warning: twine variables are prone to use-after-free bugs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -562,3 +562,19 @@ void ReferenceBadNamedFunction() {
}

} // namespace redecls

namespace scratchspace {
#define DUP(Tok) Tok
#define M1(Tok) DUP(badName##Tok())

// We don't want a warning here as the call to this in Foo is in a scratch
// buffer so its fix-it wouldn't be applied, resulting in invalid code.
void badNameWarn();

void Foo() {
M1(Warn);
}

#undef M1
#undef DUP
} // namespace scratchspace
58 changes: 20 additions & 38 deletions clang/include/clang/Basic/arm_neon.td
Original file line number Diff line number Diff line change
Expand Up @@ -190,28 +190,20 @@ def OP_SCALAR_QRDMLAH_LN : Op<(call "vqadd", $p0, (call "vqrdmulh", $p1,
def OP_SCALAR_QRDMLSH_LN : Op<(call "vqsub", $p0, (call "vqrdmulh", $p1,
(call "vget_lane", $p2, $p3)))>;

multiclass ScalarGetSetLaneOpsF16<string scalarTy,
string vectorTy4, string vectorTy8> {
def _GET_LN : Op<(bitcast scalarTy,
(call "vget_lane",
(bitcast "int16x4_t", $p0), $p1))>;
def _GET_LNQ : Op<(bitcast scalarTy,
(call "vget_lane",
(bitcast "int16x8_t", $p0), $p1))>;
def _SET_LN : Op<(bitcast vectorTy4,
(call "vset_lane",
(bitcast "int16_t", $p0),
(bitcast "int16x4_t", $p1), $p2))>;
def _SET_LNQ : Op<(bitcast vectorTy8,
(call "vset_lane",
(bitcast "int16_t", $p0),
(bitcast "int16x8_t", $p1), $p2))>;
}

defm OP_SCALAR_HALF: ScalarGetSetLaneOpsF16<"float16_t",
"float16x4_t", "float16x8_t">;
defm OP_SCALAR_BF16: ScalarGetSetLaneOpsF16<"bfloat16_t",
"bfloat16x4_t", "bfloat16x8_t">;
def OP_SCALAR_HALF_GET_LN : Op<(bitcast "float16_t",
(call "vget_lane",
(bitcast "int16x4_t", $p0), $p1))>;
def OP_SCALAR_HALF_GET_LNQ : Op<(bitcast "float16_t",
(call "vget_lane",
(bitcast "int16x8_t", $p0), $p1))>;
def OP_SCALAR_HALF_SET_LN : Op<(bitcast "float16x4_t",
(call "vset_lane",
(bitcast "int16_t", $p0),
(bitcast "int16x4_t", $p1), $p2))>;
def OP_SCALAR_HALF_SET_LNQ : Op<(bitcast "float16x8_t",
(call "vset_lane",
(bitcast "int16_t", $p0),
(bitcast "int16x8_t", $p1), $p2))>;

def OP_DOT_LN
: Op<(call "vdot", $p0, $p1,
Expand Down Expand Up @@ -1918,10 +1910,12 @@ let ArchGuard = "defined(__ARM_FEATURE_BF16_VECTOR_ARITHMETIC)" in {
def VGET_HIGH_BF : NoTestOpInst<"vget_high", ".Q", "b", OP_HI>;
def VGET_LOW_BF : NoTestOpInst<"vget_low", ".Q", "b", OP_LO>;

def VGET_LANE_BF : IOpInst<"vget_lane", "1.I", "b", OP_SCALAR_BF16_GET_LN>;
def VSET_LANE_BF : IOpInst<"vset_lane", ".1.I", "b", OP_SCALAR_BF16_SET_LN>;
def VGET_LANEQ_BF : IOpInst<"vget_lane", "1.I", "Qb", OP_SCALAR_BF16_GET_LNQ>;
def VSET_LANEQ_BF : IOpInst<"vset_lane", ".1.I", "Qb", OP_SCALAR_BF16_SET_LNQ>;
def VGET_LANE_BF : IInst<"vget_lane", "1.I", "bQb">;
def VSET_LANE_BF : IInst<"vset_lane", ".1.I", "bQb">;
def SCALAR_VDUP_LANE_BF : IInst<"vdup_lane", "1.I", "Sb">;
def SCALAR_VDUP_LANEQ_BF : IInst<"vdup_laneq", "1QI", "Sb"> {
let isLaneQ = 1;
}

def VLD1_BF : WInst<"vld1", ".(c*!)", "bQb">;
def VLD2_BF : WInst<"vld2", "2(c*!)", "bQb">;
Expand Down Expand Up @@ -1957,18 +1951,6 @@ let ArchGuard = "defined(__ARM_FEATURE_BF16_VECTOR_ARITHMETIC)" in {

}

let ArchGuard = "defined(__ARM_FEATURE_BF16_VECTOR_ARITHMETIC) && !defined(__aarch64__)" in {
def SCALAR_VDUP_LANE_BF_A32 : IOpInst<"vduph_lane", "1.I", "b", OP_SCALAR_BF16_GET_LN>;
def SCALAR_VDUP_LANEQ_BF_A32 : IOpInst<"vduph_laneq", "1.I", "Hb", OP_SCALAR_BF16_GET_LNQ>;
}

let ArchGuard = "defined(__ARM_FEATURE_BF16_VECTOR_ARITHMETIC) && defined(__aarch64__)" in {
def SCALAR_VDUP_LANE_BF_A64 : IInst<"vdup_lane", "1.I", "Sb">;
def SCALAR_VDUP_LANEQ_BF_A64 : IInst<"vdup_laneq", "1QI", "Sb"> {
let isLaneQ = 1;
}
}

let ArchGuard = "defined(__ARM_FEATURE_BF16) && !defined(__aarch64__)" in {
let BigEndianSafe = 1 in {
defm VREINTERPRET_BF : REINTERPRET_CROSS_TYPES<
Expand Down
4 changes: 2 additions & 2 deletions clang/lib/Basic/Targets/X86.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1518,14 +1518,14 @@ bool X86TargetInfo::hasFeature(StringRef Feature) const {
// X86TargetInfo::hasFeature for a somewhat comprehensive list).
bool X86TargetInfo::validateCpuSupports(StringRef FeatureStr) const {
return llvm::StringSwitch<bool>(FeatureStr)
#define X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, true)
#define X86_FEATURE_COMPAT(ENUM, STR) .Case(STR, true)
#include "llvm/Support/X86TargetParser.def"
.Default(false);
}

static llvm::X86::ProcessorFeatures getFeature(StringRef Name) {
return llvm::StringSwitch<llvm::X86::ProcessorFeatures>(Name)
#define X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, llvm::X86::ENUM)
#define X86_FEATURE_COMPAT(ENUM, STR) .Case(STR, llvm::X86::ENUM)
#include "llvm/Support/X86TargetParser.def"
;
// Note, this function should only be used after ensuring the value is
Expand Down
18 changes: 17 additions & 1 deletion clang/lib/CodeGen/CGBuiltin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6422,21 +6422,27 @@ static bool HasExtraNeonArgument(unsigned BuiltinID) {
default: break;
case NEON::BI__builtin_neon_vget_lane_i8:
case NEON::BI__builtin_neon_vget_lane_i16:
case NEON::BI__builtin_neon_vget_lane_bf16:
case NEON::BI__builtin_neon_vget_lane_i32:
case NEON::BI__builtin_neon_vget_lane_i64:
case NEON::BI__builtin_neon_vget_lane_f32:
case NEON::BI__builtin_neon_vgetq_lane_i8:
case NEON::BI__builtin_neon_vgetq_lane_i16:
case NEON::BI__builtin_neon_vgetq_lane_bf16:
case NEON::BI__builtin_neon_vgetq_lane_i32:
case NEON::BI__builtin_neon_vgetq_lane_i64:
case NEON::BI__builtin_neon_vgetq_lane_f32:
case NEON::BI__builtin_neon_vduph_lane_bf16:
case NEON::BI__builtin_neon_vduph_laneq_bf16:
case NEON::BI__builtin_neon_vset_lane_i8:
case NEON::BI__builtin_neon_vset_lane_i16:
case NEON::BI__builtin_neon_vset_lane_bf16:
case NEON::BI__builtin_neon_vset_lane_i32:
case NEON::BI__builtin_neon_vset_lane_i64:
case NEON::BI__builtin_neon_vset_lane_f32:
case NEON::BI__builtin_neon_vsetq_lane_i8:
case NEON::BI__builtin_neon_vsetq_lane_i16:
case NEON::BI__builtin_neon_vsetq_lane_bf16:
case NEON::BI__builtin_neon_vsetq_lane_i32:
case NEON::BI__builtin_neon_vsetq_lane_i64:
case NEON::BI__builtin_neon_vsetq_lane_f32:
Expand Down Expand Up @@ -6882,12 +6888,16 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
case NEON::BI__builtin_neon_vget_lane_i16:
case NEON::BI__builtin_neon_vget_lane_i32:
case NEON::BI__builtin_neon_vget_lane_i64:
case NEON::BI__builtin_neon_vget_lane_bf16:
case NEON::BI__builtin_neon_vget_lane_f32:
case NEON::BI__builtin_neon_vgetq_lane_i8:
case NEON::BI__builtin_neon_vgetq_lane_i16:
case NEON::BI__builtin_neon_vgetq_lane_i32:
case NEON::BI__builtin_neon_vgetq_lane_i64:
case NEON::BI__builtin_neon_vgetq_lane_bf16:
case NEON::BI__builtin_neon_vgetq_lane_f32:
case NEON::BI__builtin_neon_vduph_lane_bf16:
case NEON::BI__builtin_neon_vduph_laneq_bf16:
return Builder.CreateExtractElement(Ops[0], Ops[1], "vget_lane");

case NEON::BI__builtin_neon_vrndns_f32: {
Expand All @@ -6900,11 +6910,13 @@ Value *CodeGenFunction::EmitARMBuiltinExpr(unsigned BuiltinID,
case NEON::BI__builtin_neon_vset_lane_i16:
case NEON::BI__builtin_neon_vset_lane_i32:
case NEON::BI__builtin_neon_vset_lane_i64:
case NEON::BI__builtin_neon_vset_lane_bf16:
case NEON::BI__builtin_neon_vset_lane_f32:
case NEON::BI__builtin_neon_vsetq_lane_i8:
case NEON::BI__builtin_neon_vsetq_lane_i16:
case NEON::BI__builtin_neon_vsetq_lane_i32:
case NEON::BI__builtin_neon_vsetq_lane_i64:
case NEON::BI__builtin_neon_vsetq_lane_bf16:
case NEON::BI__builtin_neon_vsetq_lane_f32:
return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");

Expand Down Expand Up @@ -9315,11 +9327,13 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
case NEON::BI__builtin_neon_vset_lane_i16:
case NEON::BI__builtin_neon_vset_lane_i32:
case NEON::BI__builtin_neon_vset_lane_i64:
case NEON::BI__builtin_neon_vset_lane_bf16:
case NEON::BI__builtin_neon_vset_lane_f32:
case NEON::BI__builtin_neon_vsetq_lane_i8:
case NEON::BI__builtin_neon_vsetq_lane_i16:
case NEON::BI__builtin_neon_vsetq_lane_i32:
case NEON::BI__builtin_neon_vsetq_lane_i64:
case NEON::BI__builtin_neon_vsetq_lane_bf16:
case NEON::BI__builtin_neon_vsetq_lane_f32:
Ops.push_back(EmitScalarExpr(E->getArg(2)));
return Builder.CreateInsertElement(Ops[1], Ops[0], Ops[2], "vset_lane");
Expand Down Expand Up @@ -9598,11 +9612,13 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID,
: Intrinsic::aarch64_neon_sqsub;
return EmitNeonCall(CGM.getIntrinsic(AccInt, Int64Ty), Ops, "vqdmlXl");
}
case NEON::BI__builtin_neon_vget_lane_bf16:
case NEON::BI__builtin_neon_vduph_lane_bf16:
case NEON::BI__builtin_neon_vduph_lane_f16: {
return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
"vget_lane");
}
case NEON::BI__builtin_neon_vgetq_lane_bf16:
case NEON::BI__builtin_neon_vduph_laneq_bf16:
case NEON::BI__builtin_neon_vduph_laneq_f16: {
return Builder.CreateExtractElement(Ops[0], EmitScalarExpr(E->getArg(1)),
Expand Down Expand Up @@ -11652,7 +11668,7 @@ CodeGenFunction::GetX86CpuSupportsMask(ArrayRef<StringRef> FeatureStrs) {
for (const StringRef &FeatureStr : FeatureStrs) {
unsigned Feature =
StringSwitch<unsigned>(FeatureStr)
#define X86_FEATURE_COMPAT(VAL, ENUM, STR) .Case(STR, VAL)
#define X86_FEATURE_COMPAT(ENUM, STR) .Case(STR, llvm::X86::ENUM)
#include "llvm/Support/X86TargetParser.def"
;
FeaturesMask |= (1ULL << Feature);
Expand Down
Loading

0 comments on commit 50e4056

Please sign in to comment.