[clang] 7968981 - [SVE] Eliminate calls to default-false VectorType::get() from Clang
Author: Christopher Tetreault Date: 2020-06-01T10:02:14-07:00 New Revision: 796898172c48a475f27f038e587c35dbba9ab7a6 URL: https://github.com/llvm/llvm-project/commit/796898172c48a475f27f038e587c35dbba9ab7a6 DIFF: https://github.com/llvm/llvm-project/commit/796898172c48a475f27f038e587c35dbba9ab7a6.diff LOG: [SVE] Eliminate calls to default-false VectorType::get() from Clang Reviewers: efriedma, david-arm, fpetrogalli, ddunbar, rjmccall Reviewed By: fpetrogalli, rjmccall Subscribers: tschuett, rkruppe, psnobl, dmgreen, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D80323 Added: Modified: clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/CodeGenTypes.cpp clang/lib/CodeGen/SwiftCallingConv.cpp clang/lib/CodeGen/TargetInfo.cpp clang/utils/TableGen/MveEmitter.cpp Removed: diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index b5129249c016..cf8c8a1669d7 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -4486,29 +4486,29 @@ static llvm::VectorType *GetNeonType(CodeGenFunction *CGF, switch (TypeFlags.getEltType()) { case NeonTypeFlags::Int8: case NeonTypeFlags::Poly8: -return llvm::VectorType::get(CGF->Int8Ty, V1Ty ? 1 : (8 << IsQuad)); +return llvm::FixedVectorType::get(CGF->Int8Ty, V1Ty ? 1 : (8 << IsQuad)); case NeonTypeFlags::Int16: case NeonTypeFlags::Poly16: -return llvm::VectorType::get(CGF->Int16Ty, V1Ty ? 1 : (4 << IsQuad)); +return llvm::FixedVectorType::get(CGF->Int16Ty, V1Ty ? 1 : (4 << IsQuad)); case NeonTypeFlags::Float16: if (HasLegalHalfType) - return llvm::VectorType::get(CGF->HalfTy, V1Ty ? 1 : (4 << IsQuad)); + return llvm::FixedVectorType::get(CGF->HalfTy, V1Ty ? 1 : (4 << IsQuad)); else - return llvm::VectorType::get(CGF->Int16Ty, V1Ty ? 1 : (4 << IsQuad)); + return llvm::FixedVectorType::get(CGF->Int16Ty, V1Ty ? 1 : (4 << IsQuad)); case NeonTypeFlags::Int32: -return llvm::VectorType::get(CGF->Int32Ty, V1Ty ? 1 : (2 << IsQuad)); +return llvm::FixedVectorType::get(CGF->Int32Ty, V1Ty ? 1 : (2 << IsQuad)); case NeonTypeFlags::Int64: case NeonTypeFlags::Poly64: -return llvm::VectorType::get(CGF->Int64Ty, V1Ty ? 1 : (1 << IsQuad)); +return llvm::FixedVectorType::get(CGF->Int64Ty, V1Ty ? 1 : (1 << IsQuad)); case NeonTypeFlags::Poly128: // FIXME: i128 and f128 doesn't get fully support in Clang and llvm. // There is a lot of i128 and f128 API missing. // so we use v16i8 to represent poly128 and get pattern matched. -return llvm::VectorType::get(CGF->Int8Ty, 16); +return llvm::FixedVectorType::get(CGF->Int8Ty, 16); case NeonTypeFlags::Float32: -return llvm::VectorType::get(CGF->FloatTy, V1Ty ? 1 : (2 << IsQuad)); +return llvm::FixedVectorType::get(CGF->FloatTy, V1Ty ? 1 : (2 << IsQuad)); case NeonTypeFlags::Float64: -return llvm::VectorType::get(CGF->DoubleTy, V1Ty ? 1 : (1 << IsQuad)); +return llvm::FixedVectorType::get(CGF->DoubleTy, V1Ty ? 1 : (1 << IsQuad)); } llvm_unreachable("Unknown vector element type!"); } @@ -4518,11 +4518,11 @@ static llvm::VectorType *GetFloatNeonType(CodeGenFunction *CGF, int IsQuad = IntTypeFlags.isQuad(); switch (IntTypeFlags.getEltType()) { case NeonTypeFlags::Int16: -return llvm::VectorType::get(CGF->HalfTy, (4 << IsQuad)); +return llvm::FixedVectorType::get(CGF->HalfTy, (4 << IsQuad)); case NeonTypeFlags::Int32: -return llvm::VectorType::get(CGF->FloatTy, (2 << IsQuad)); +return llvm::FixedVectorType::get(CGF->FloatTy, (2 << IsQuad)); case NeonTypeFlags::Int64: -return llvm::VectorType::get(CGF->DoubleTy, (1 << IsQuad)); +return llvm::FixedVectorType::get(CGF->DoubleTy, (1 << IsQuad)); default: llvm_unreachable("Type can't be converted to floating-point!"); } @@ -5403,7 +5403,7 @@ Function *CodeGenFunction::LookupNeonLLVMIntrinsic(unsigned IntrinsicID, if (Modifier & AddRetType) { llvm::Type *Ty = ConvertType(E->getCallReturnType(getContext())); if (Modifier & VectorizeRetType) - Ty = llvm::VectorType::get( + Ty = llvm::FixedVectorType::get( Ty, VectorSize ? VectorSize / Ty->getPrimitiveSizeInBits() : 1); Tys.push_back(Ty); @@ -5412,7 +5412,7 @@ Function *CodeGenFunction::LookupNeonLLVMIntrinsic(unsigned IntrinsicID, // Arguments. if (Modifier & VectorizeArgTypes) { int Elts = VectorSize ? VectorSize / ArgType->getPrimitiveSizeInBits() : 1; -ArgType = llvm::VectorType::get(ArgType, Elts); +ArgType = llvm::FixedVectorType::get(ArgType, Elts); } if (Modifier & (Add1ArgType | Add2ArgTypes)) @@ -5586,7 +5586,7 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( Ty = HalfTy; break; } -llvm::Type *
[clang] 2a1418f - Fix syntax error
Author: Christopher Tetreault Date: 2020-04-09T13:46:23-07:00 New Revision: 2a1418f242ab17d8d8fef6fe829fc1b9363877ca URL: https://github.com/llvm/llvm-project/commit/2a1418f242ab17d8d8fef6fe829fc1b9363877ca DIFF: https://github.com/llvm/llvm-project/commit/2a1418f242ab17d8d8fef6fe829fc1b9363877ca.diff LOG: Fix syntax error Added: Modified: clang/lib/Tooling/InterpolatingCompilationDatabase.cpp Removed: diff --git a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp index 64a9c12220ac..fa61560e5123 100644 --- a/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp +++ b/clang/lib/Tooling/InterpolatingCompilationDatabase.cpp @@ -116,7 +116,7 @@ static types::ID foldType(types::ID Lang) { return types::TY_ObjCXX; case types::TY_CUDA: case types::TY_CUDA_DEVICE: -return types::TY_CUDA: +return types::TY_CUDA; default: return types::TY_INVALID; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] f22fbe3 - Clean up usages of asserting vector getters in Type
Author: Christopher Tetreault Date: 2020-04-13T13:01:40-07:00 New Revision: f22fbe3a152ed1e7712c6580405cb28db00187a5 URL: https://github.com/llvm/llvm-project/commit/f22fbe3a152ed1e7712c6580405cb28db00187a5 DIFF: https://github.com/llvm/llvm-project/commit/f22fbe3a152ed1e7712c6580405cb28db00187a5.diff LOG: Clean up usages of asserting vector getters in Type Summary: Remove usages of asserting vector getters in Type in preparation for the VectorType refactor. The existence of these functions complicates the refactor while adding little value. Reviewers: sdesmalen, efriedma, krememek Reviewed By: sdesmalen, efriedma Subscribers: dexonsmith, Charusso, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77257 Added: Modified: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/PatternInit.cpp clang/lib/CodeGen/TargetInfo.cpp Removed: diff --git a/clang/lib/CodeGen/CGAtomic.cpp b/clang/lib/CodeGen/CGAtomic.cpp index 07d3cef7f999..a58450ddd4c5 100644 --- a/clang/lib/CodeGen/CGAtomic.cpp +++ b/clang/lib/CodeGen/CGAtomic.cpp @@ -119,8 +119,9 @@ namespace { ValueTy = lvalue.getType(); ValueSizeInBits = C.getTypeSize(ValueTy); AtomicTy = ValueTy = CGF.getContext().getExtVectorType( -lvalue.getType(), lvalue.getExtVectorAddress() - .getElementType()->getVectorNumElements()); +lvalue.getType(), cast( + lvalue.getExtVectorAddress().getElementType()) + ->getNumElements()); AtomicSizeInBits = C.getTypeSize(AtomicTy); AtomicAlign = ValueAlign = lvalue.getAlignment(); LVal = lvalue; diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index f985e5848a39..fb0c8b3aeaa3 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -4521,7 +4521,7 @@ Value *CodeGenFunction::EmitNeonSplat(Value *V, Constant *C, } Value *CodeGenFunction::EmitNeonSplat(Value *V, Constant *C) { - ElementCount EC = V->getType()->getVectorElementCount(); + ElementCount EC = cast(V->getType())->getElementCount(); return EmitNeonSplat(V, C, EC); } @@ -5452,8 +5452,8 @@ static Value *EmitCommonNeonSISDBuiltinExpr( assert(ArgTy->isVectorTy() && !Ops[j]->getType()->isVectorTy()); // The constant argument to an _n_ intrinsic always has Int32Ty, so truncate // it before inserting. -Ops[j] = -CGF.Builder.CreateTruncOrBitCast(Ops[j], ArgTy->getVectorElementType()); +Ops[j] = CGF.Builder.CreateTruncOrBitCast( +Ops[j], cast(ArgTy)->getElementType()); Ops[j] = CGF.Builder.CreateInsertElement(UndefValue::get(ArgTy), Ops[j], C0); } @@ -5742,7 +5742,7 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( case NEON::BI__builtin_neon_vld1q_x3_v: case NEON::BI__builtin_neon_vld1_x4_v: case NEON::BI__builtin_neon_vld1q_x4_v: { -llvm::Type *PTy = llvm::PointerType::getUnqual(VTy->getVectorElementType()); +llvm::Type *PTy = llvm::PointerType::getUnqual(VTy->getElementType()); Ops[1] = Builder.CreateBitCast(Ops[1], PTy); llvm::Type *Tys[2] = { VTy, PTy }; Function *F = CGM.getIntrinsic(LLVMIntrinsic, Tys); @@ -5851,11 +5851,11 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( case NEON::BI__builtin_neon_vqdmulh_lane_v: case NEON::BI__builtin_neon_vqrdmulhq_lane_v: case NEON::BI__builtin_neon_vqrdmulh_lane_v: { -llvm::Type *RTy = Ty; +auto *RTy = cast(Ty); if (BuiltinID == NEON::BI__builtin_neon_vqdmulhq_lane_v || BuiltinID == NEON::BI__builtin_neon_vqrdmulhq_lane_v) - RTy = llvm::VectorType::get(Ty->getVectorElementType(), - Ty->getVectorNumElements() * 2); + RTy = llvm::VectorType::get(RTy->getElementType(), + RTy->getNumElements() * 2); llvm::Type *Tys[2] = { RTy, GetNeonType(this, NeonTypeFlags(Type.getEltType(), false, /*isQuad*/ false))}; @@ -5946,7 +5946,7 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( case NEON::BI__builtin_neon_vst1q_x3_v: case NEON::BI__builtin_neon_vst1_x4_v: case NEON::BI__builtin_neon_vst1q_x4_v: { -llvm::Type *PTy = llvm::PointerType::getUnqual(VTy->getVectorElementType()); +llvm::Type *PTy = llvm::PointerType::getUnqual(VTy->getElementType()); // TODO: Currently in AArch32 mode the pointer operand comes first, whereas // in AArch64 it comes last. We may want to stick to one or another. if (Arch == llvm::Triple::aarch64 || Arch == llvm::Triple::aarch64_be || @@ -7092,8 +7092,9 @@ static llvm::Value *MVEImmediateShr(CGBuilderTy &Builder, llvm::Value *V, // eq
[clang] 670f2f6 - [SVE] Remove calls to getBitWidth from clang
Author: Christopher Tetreault Date: 2020-04-14T13:29:09-07:00 New Revision: 670f2f694bba24c2c2647d48e0bdf400365c283b URL: https://github.com/llvm/llvm-project/commit/670f2f694bba24c2c2647d48e0bdf400365c283b DIFF: https://github.com/llvm/llvm-project/commit/670f2f694bba24c2c2647d48e0bdf400365c283b.diff LOG: [SVE] Remove calls to getBitWidth from clang Reviewers: efriedma Reviewed By: efriedma Subscribers: tschuett, rkruppe, psnobl, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77903 Added: Modified: clang/lib/CodeGen/TargetInfo.cpp Removed: diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp index bd8b4655d2a4..22128534beda 100644 --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -970,7 +970,8 @@ static llvm::Type* X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF, .Cases("y", "&y", "^Ym", true) .Default(false); if (IsMMXCons && Ty->isVectorTy()) { -if (cast(Ty)->getBitWidth() != 64) { +if (cast(Ty)->getPrimitiveSizeInBits().getFixedSize() != +64) { // Invalid MMX constraint return nullptr; } @@ -2260,7 +2261,7 @@ class X86_64ABIInfo : public SwiftABIInfo { if (info.isDirect()) { llvm::Type *ty = info.getCoerceToType(); if (llvm::VectorType *vectorTy = dyn_cast_or_null(ty)) -return (vectorTy->getBitWidth() > 128); +return vectorTy->getPrimitiveSizeInBits().getFixedSize() > 128; } return false; } ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 464a069 - [SVE] Fix unsigned is always >= 0
Author: Christopher Tetreault Date: 2020-04-15T15:23:49-07:00 New Revision: 464a0697e36ae84c4292402c7774c6ec6e93a438 URL: https://github.com/llvm/llvm-project/commit/464a0697e36ae84c4292402c7774c6ec6e93a438 DIFF: https://github.com/llvm/llvm-project/commit/464a0697e36ae84c4292402c7774c6ec6e93a438.diff LOG: [SVE] Fix unsigned is always >= 0 Reviewers: efriedma, sdesmalen Reviewed By: sdesmalen Subscribers: tschuett, rkruppe, psnobl, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D78131 Added: Modified: clang/utils/TableGen/SveEmitter.cpp Removed: diff --git a/clang/utils/TableGen/SveEmitter.cpp b/clang/utils/TableGen/SveEmitter.cpp index 5f9f5d5ede8c..79258a8fbbf2 100644 --- a/clang/utils/TableGen/SveEmitter.cpp +++ b/clang/utils/TableGen/SveEmitter.cpp @@ -801,9 +801,10 @@ void SVEEmitter::createIntrinsic( // Collate a list of range/option checks for the immediates. SmallVector ImmChecks; for (auto *R : ImmCheckList) { - unsigned Arg = R->getValueAsInt("Arg"); - unsigned EltSizeArg = R->getValueAsInt("EltSizeArg"); - unsigned Kind = R->getValueAsDef("Kind")->getValueAsInt("Value"); + int64_t Arg = R->getValueAsInt("Arg"); + int64_t EltSizeArg = R->getValueAsInt("EltSizeArg"); + int64_t Kind = R->getValueAsDef("Kind")->getValueAsInt("Value"); + assert(Arg >= 0 && Kind >= 0 && "Arg and Kind must be nonnegative"); unsigned ElementSizeInBits = 0; if (EltSizeArg >= 0) ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] eb81c85 - [SVE] Deprecate default false variant of VectorType::get
Author: Christopher Tetreault Date: 2020-06-16T15:16:11-07:00 New Revision: eb81c85afdcd3aa6d5e3c1ab73821a659630b799 URL: https://github.com/llvm/llvm-project/commit/eb81c85afdcd3aa6d5e3c1ab73821a659630b799 DIFF: https://github.com/llvm/llvm-project/commit/eb81c85afdcd3aa6d5e3c1ab73821a659630b799.diff LOG: [SVE] Deprecate default false variant of VectorType::get Reviewers: efriedma, fpetrogalli, kmclaughlin, huntergr Reviewed By: fpetrogalli Subscribers: cfe-commits, tschuett, rkruppe, psnobl, llvm-commits Tags: #llvm, #clang Differential Revision: https://reviews.llvm.org/D80342 Added: Modified: clang/lib/CodeGen/CGBuiltin.cpp llvm/include/llvm/IR/DerivedTypes.h llvm/unittests/Analysis/VectorUtilsTest.cpp llvm/unittests/CodeGen/LowLevelTypeTest.cpp llvm/unittests/FuzzMutate/OperationsTest.cpp llvm/unittests/IR/ConstantsTest.cpp llvm/unittests/IR/IRBuilderTest.cpp llvm/unittests/IR/InstructionsTest.cpp llvm/unittests/IR/PatternMatch.cpp llvm/unittests/IR/VectorTypesTest.cpp Removed: diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index c3cfed34eeba..3b3ea5e95705 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -6149,25 +6149,25 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( case NEON::BI__builtin_neon_vbfdot_v: case NEON::BI__builtin_neon_vbfdotq_v: { llvm::Type *InputTy = - llvm::VectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); +llvm::FixedVectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); llvm::Type *Tys[2] = { Ty, InputTy }; return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vbfdot"); } case NEON::BI__builtin_neon_vbfmmlaq_v: { llvm::Type *InputTy = - llvm::VectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); +llvm::FixedVectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); llvm::Type *Tys[2] = { Ty, InputTy }; return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vbfmmla"); } case NEON::BI__builtin_neon_vbfmlalbq_v: { llvm::Type *InputTy = - llvm::VectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); +llvm::FixedVectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); llvm::Type *Tys[2] = { Ty, InputTy }; return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vbfmlalb"); } case NEON::BI__builtin_neon_vbfmlaltq_v: { llvm::Type *InputTy = - llvm::VectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); +llvm::FixedVectorType::get(Int8Ty, Ty->getPrimitiveSizeInBits() / 8); llvm::Type *Tys[2] = { Ty, InputTy }; return EmitNeonCall(CGM.getIntrinsic(Int, Tys), Ops, "vbfmlalt"); } diff --git a/llvm/include/llvm/IR/DerivedTypes.h b/llvm/include/llvm/IR/DerivedTypes.h index 25eb783cf6cd..3618447168be 100644 --- a/llvm/include/llvm/IR/DerivedTypes.h +++ b/llvm/include/llvm/IR/DerivedTypes.h @@ -443,8 +443,20 @@ class VectorType : public Type { /// This static method is the primary way to construct an VectorType. static VectorType *get(Type *ElementType, ElementCount EC); + + /// Base class getter that specifically constructs a FixedVectorType. This + /// function is deprecated, and will be removed after LLVM 11 ships. Since + /// this always returns a FixedVectorType via a base VectorType pointer, + /// FixedVectorType::get(Type *, unsigned) is strictly better since no cast is + /// required to call getNumElements() on the result. + LLVM_ATTRIBUTE_DEPRECATED( + inline static VectorType *get(Type *ElementType, unsigned NumElements), + "The base class version of get with the scalable argument defaulted to " + "false is deprecated. Either call VectorType::get(Type *, unsigned, " + "bool) and pass false, or call FixedVectorType::get(Type *, unsigned)."); + static VectorType *get(Type *ElementType, unsigned NumElements, - bool Scalable = false) { + bool Scalable) { return VectorType::get(ElementType, {NumElements, Scalable}); } @@ -537,6 +549,10 @@ class VectorType : public Type { } }; +inline VectorType *VectorType::get(Type *ElementType, unsigned NumElements) { + return VectorType::get(ElementType, NumElements, false); +} + /// Class to represent fixed width SIMD vectors class FixedVectorType : public VectorType { protected: diff --git a/llvm/unittests/Analysis/VectorUtilsTest.cpp b/llvm/unittests/Analysis/VectorUtilsTest.cpp index cf58fba37382..69e5285e8731 100644 --- a/llvm/unittests/Analysis/VectorUtilsTest.cpp +++ b/llvm/unittests/Analysis/VectorUtilsTest.cpp @@ -77,7 +77,7 @@ struct BasicTest : public testing::Test { } // namespace TEST_F(BasicTest, isSplat) { - Value *UndefVec = UndefValue::get(VectorType::get(IRB.getInt8Ty(), 4)); + Value *UndefVec = UndefValue::get(FixedVecto
[clang] c858deb - Remove asserting getters from base Type
Author: Christopher Tetreault Date: 2020-04-17T14:03:31-07:00 New Revision: c858debebc1308e748de882c745e179b1a398fa0 URL: https://github.com/llvm/llvm-project/commit/c858debebc1308e748de882c745e179b1a398fa0 DIFF: https://github.com/llvm/llvm-project/commit/c858debebc1308e748de882c745e179b1a398fa0.diff LOG: Remove asserting getters from base Type Summary: Remove asserting vector getters from Type in preparation for the VectorType refactor. The existence of these functions complicates the refactor while adding little value. Reviewers: dexonsmith, sdesmalen, efriedma Reviewed By: efriedma Subscribers: cfe-commits, hiraditya, llvm-commits Tags: #llvm, #clang Differential Revision: https://reviews.llvm.org/D77278 Added: Modified: clang/lib/CodeGen/CGBuiltin.cpp llvm/include/llvm/IR/DerivedTypes.h llvm/include/llvm/IR/Type.h llvm/lib/CodeGen/CodeGenPrepare.cpp llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp llvm/unittests/IR/VPIntrinsicTest.cpp Removed: diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index f4832ef4afb2..8ee69740f15c 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -7573,8 +7573,7 @@ Value *CodeGenFunction::EmitSVEMaskedStore(const CallExpr *E, // The vector type that is stored may be diff erent from the // eventual type stored to memory. auto VectorTy = cast(Ops.back()->getType()); - auto MemoryTy = - llvm::VectorType::get(MemEltTy, VectorTy->getVectorElementCount()); + auto MemoryTy = llvm::VectorType::get(MemEltTy, VectorTy->getElementCount()); Value *Predicate = EmitSVEPredicateCast(Ops[0], MemoryTy); Value *BasePtr = Builder.CreateBitCast(Ops[1], MemoryTy->getPointerTo()); diff --git a/llvm/include/llvm/IR/DerivedTypes.h b/llvm/include/llvm/IR/DerivedTypes.h index 92017448fe0d..186430754303 100644 --- a/llvm/include/llvm/IR/DerivedTypes.h +++ b/llvm/include/llvm/IR/DerivedTypes.h @@ -531,18 +531,6 @@ class VectorType : public Type { } }; -unsigned Type::getVectorNumElements() const { - return cast(this)->getNumElements(); -} - -bool Type::getVectorIsScalable() const { - return cast(this)->isScalable(); -} - -ElementCount Type::getVectorElementCount() const { - return cast(this)->getElementCount(); -} - bool Type::isVectorTy() const { return isa(this); } /// Class to represent pointers. @@ -597,8 +585,8 @@ Type *Type::getWithNewBitWidth(unsigned NewBitWidth) const { isIntOrIntVectorTy() && "Original type expected to be a vector of integers or a scalar integer."); Type *NewType = getIntNTy(getContext(), NewBitWidth); - if (isVectorTy()) -NewType = VectorType::get(NewType, getVectorElementCount()); + if (auto *VTy = dyn_cast(this)) +NewType = VectorType::get(NewType, VTy->getElementCount()); return NewType; } @@ -606,6 +594,12 @@ unsigned Type::getPointerAddressSpace() const { return cast(getScalarType())->getAddressSpace(); } +Type *Type::getScalarType() const { + if (isVectorTy()) +return cast(this)->getElementType(); + return const_cast(this); +} + } // end namespace llvm #endif // LLVM_IR_DERIVEDTYPES_H diff --git a/llvm/include/llvm/IR/Type.h b/llvm/include/llvm/IR/Type.h index 79d6964e3b3e..67be3ef480b7 100644 --- a/llvm/include/llvm/IR/Type.h +++ b/llvm/include/llvm/IR/Type.h @@ -300,11 +300,7 @@ class Type { /// If this is a vector type, return the element type, otherwise return /// 'this'. - Type *getScalarType() const { -if (isVectorTy()) - return getVectorElementType(); -return const_cast(this); - } + inline Type *getScalarType() const; //======// // Type Iteration support. @@ -339,8 +335,8 @@ class Type { //======// // Helper methods corresponding to subclass methods. This forces a cast to - // the specified subclass and calls its accessor. "getVectorNumElements" (for - // example) is shorthand for cast(Ty)->getNumElements(). This is + // the specified subclass and calls its accessor. "getArrayNumElements" (for + // example) is shorthand for cast(Ty)->getNumElements(). This is // only intended to cover the core methods that are frequently used, helper // methods should not be added here. @@ -361,14 +357,6 @@ class Type { return ContainedTys[0]; } - inline bool getVectorIsScalable() const; - inline unsigned getVectorNumElements() const; - inline ElementCount getVectorElementCount() const; - Type *getVectorElementType() const { -assert(getTypeID() == VectorTyID); -return ContainedTys[0]; - } - Type *getPointerElementType() const { assert(getTypeID() == PointerTyID); return ContainedTys[0]; diff --git a/llvm/lib/CodeGen/CodeGenPrepare.cpp b/llvm/lib/CodeGen/
[clang] da8918f - [SVE][NFC] Use ScalableVectorType in CGBuiltin
Author: Christopher Tetreault Date: 2020-04-27T16:29:45-07:00 New Revision: da8918f27e3020ea5d16c6e266f8916d022d41e0 URL: https://github.com/llvm/llvm-project/commit/da8918f27e3020ea5d16c6e266f8916d022d41e0 DIFF: https://github.com/llvm/llvm-project/commit/da8918f27e3020ea5d16c6e266f8916d022d41e0.diff LOG: [SVE][NFC] Use ScalableVectorType in CGBuiltin Summary: * Upgrade some usages of VectorType to use ScalableVectorType Reviewers: efriedma, david-arm, fpetrogalli, kmclaughlin Reviewed By: efriedma Subscribers: tschuett, rkruppe, psnobl, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D78842 Added: Modified: clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CodeGenFunction.h Removed: diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index b0e5eebe7b88..ee99e3523375 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -7542,66 +7542,68 @@ llvm::Type *CodeGenFunction::getEltType(SVETypeFlags TypeFlags) { // Return the llvm predicate vector type corresponding to the specified element // TypeFlags. -llvm::VectorType* CodeGenFunction::getSVEPredType(SVETypeFlags TypeFlags) { +llvm::ScalableVectorType * +CodeGenFunction::getSVEPredType(SVETypeFlags TypeFlags) { switch (TypeFlags.getEltType()) { default: llvm_unreachable("Unhandled SVETypeFlag!"); case SVETypeFlags::EltTyInt8: -return llvm::VectorType::get(Builder.getInt1Ty(), { 16, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 16); case SVETypeFlags::EltTyInt16: -return llvm::VectorType::get(Builder.getInt1Ty(), { 8, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 8); case SVETypeFlags::EltTyInt32: -return llvm::VectorType::get(Builder.getInt1Ty(), { 4, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 4); case SVETypeFlags::EltTyInt64: -return llvm::VectorType::get(Builder.getInt1Ty(), { 2, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 2); case SVETypeFlags::EltTyFloat16: -return llvm::VectorType::get(Builder.getInt1Ty(), { 8, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 8); case SVETypeFlags::EltTyFloat32: -return llvm::VectorType::get(Builder.getInt1Ty(), { 4, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 4); case SVETypeFlags::EltTyFloat64: -return llvm::VectorType::get(Builder.getInt1Ty(), { 2, true }); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 2); } } // Return the llvm vector type corresponding to the specified element TypeFlags. -llvm::VectorType *CodeGenFunction::getSVEType(const SVETypeFlags &TypeFlags) { +llvm::ScalableVectorType * +CodeGenFunction::getSVEType(const SVETypeFlags &TypeFlags) { switch (TypeFlags.getEltType()) { default: llvm_unreachable("Invalid SVETypeFlag!"); case SVETypeFlags::EltTyInt8: -return llvm::VectorType::get(Builder.getInt8Ty(), {16, true}); +return llvm::ScalableVectorType::get(Builder.getInt8Ty(), 16); case SVETypeFlags::EltTyInt16: -return llvm::VectorType::get(Builder.getInt16Ty(), {8, true}); +return llvm::ScalableVectorType::get(Builder.getInt16Ty(), 8); case SVETypeFlags::EltTyInt32: -return llvm::VectorType::get(Builder.getInt32Ty(), {4, true}); +return llvm::ScalableVectorType::get(Builder.getInt32Ty(), 4); case SVETypeFlags::EltTyInt64: -return llvm::VectorType::get(Builder.getInt64Ty(), {2, true}); +return llvm::ScalableVectorType::get(Builder.getInt64Ty(), 2); case SVETypeFlags::EltTyFloat16: -return llvm::VectorType::get(Builder.getHalfTy(), {8, true}); +return llvm::ScalableVectorType::get(Builder.getHalfTy(), 8); case SVETypeFlags::EltTyFloat32: -return llvm::VectorType::get(Builder.getFloatTy(), {4, true}); +return llvm::ScalableVectorType::get(Builder.getFloatTy(), 4); case SVETypeFlags::EltTyFloat64: -return llvm::VectorType::get(Builder.getDoubleTy(), {2, true}); +return llvm::ScalableVectorType::get(Builder.getDoubleTy(), 2); case SVETypeFlags::EltTyBool8: -return llvm::VectorType::get(Builder.getInt1Ty(), {16, true}); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 16); case SVETypeFlags::EltTyBool16: -return llvm::VectorType::get(Builder.getInt1Ty(), {8, true}); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 8); case SVETypeFlags::EltTyBool32: -return llvm::VectorType::get(Builder.getInt1Ty(), {4, true}); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 4); case SVETypeFlags::EltTyBool64: -return llvm::VectorType::get(Builder.getInt1Ty(), {2, true}); +return llvm::ScalableVectorType::get(Builder.getInt1Ty(), 2); } } constexpr unsigned SVEBitsPerBlock = 128; -static llvm::VectorType* g
[clang] ef3678c - [SVE] Update EmitSVEPredicateCast to take a ScalableVectorType
Author: Christopher Tetreault Date: 2020-04-28T11:22:20-07:00 New Revision: ef3678cfeea69a882bd58df42b6d21a0860703fd URL: https://github.com/llvm/llvm-project/commit/ef3678cfeea69a882bd58df42b6d21a0860703fd DIFF: https://github.com/llvm/llvm-project/commit/ef3678cfeea69a882bd58df42b6d21a0860703fd.diff LOG: [SVE] Update EmitSVEPredicateCast to take a ScalableVectorType Summary: Removes usage of VectorType::getNumElements identified by test located at CodeGen/aarch64-sve-intrinsics/acle_sve_abs.c. Since the type is an SVE predicate vector, it makes sense to specialize the code for scalable vectors only. Reviewers: rengolin, efriedma Reviewed By: efriedma Subscribers: tschuett, kristof.beyls, rkruppe, psnobl, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D78958 Added: Modified: clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CodeGenFunction.h Removed: diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index ee99e3523375..95ef19e36607 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -7609,15 +7609,14 @@ static llvm::ScalableVectorType *getSVEVectorForElementType(llvm::Type *EltTy) { // Reinterpret the input predicate so that it can be used to correctly isolate // the elements of the specified datatype. Value *CodeGenFunction::EmitSVEPredicateCast(Value *Pred, - llvm::VectorType *VTy) { - llvm::VectorType *RTy = llvm::VectorType::get( - IntegerType::get(getLLVMContext(), 1), VTy->getElementCount()); + llvm::ScalableVectorType *VTy) { + auto *RTy = llvm::VectorType::get(IntegerType::get(getLLVMContext(), 1), VTy); if (Pred->getType() == RTy) return Pred; unsigned IntID; llvm::Type *IntrinsicTy; - switch (VTy->getNumElements()) { + switch (VTy->getMinNumElements()) { default: llvm_unreachable("unsupported element count!"); case 2: @@ -7948,7 +7947,7 @@ Value *CodeGenFunction::EmitAArch64SVEBuiltinExpr(unsigned BuiltinID, // Predicate results must be converted to svbool_t. if (auto PredTy = dyn_cast(Call->getType())) if (PredTy->getScalarType()->isIntegerTy(1)) -Call = EmitSVEPredicateCast(Call, cast(Ty)); +Call = EmitSVEPredicateCast(Call, cast(Ty)); return Call; } diff --git a/clang/lib/CodeGen/CodeGenFunction.h b/clang/lib/CodeGen/CodeGenFunction.h index 7ea89eb3f6f9..0cc626bf5ecc 100644 --- a/clang/lib/CodeGen/CodeGenFunction.h +++ b/clang/lib/CodeGen/CodeGenFunction.h @@ -3919,7 +3919,8 @@ class CodeGenFunction : public CodeGenTypeCache { llvm::ScalableVectorType *getSVEType(const SVETypeFlags &TypeFlags); llvm::ScalableVectorType *getSVEPredType(SVETypeFlags TypeFlags); llvm::Value *EmitSVEDupX(llvm::Value *Scalar); - llvm::Value *EmitSVEPredicateCast(llvm::Value *Pred, llvm::VectorType *VTy); + llvm::Value *EmitSVEPredicateCast(llvm::Value *Pred, +llvm::ScalableVectorType *VTy); llvm::Value *EmitSVEGatherLoad(SVETypeFlags TypeFlags, llvm::SmallVectorImpl &Ops, unsigned IntID); ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 5a77b95 - [NFC] Improve doc string to mention that paths in diff are used as-is
Author: Christopher Tetreault Date: 2020-05-06T15:20:05-07:00 New Revision: 5a77b958e250fbf156474b42ccf5a82e8a36db72 URL: https://github.com/llvm/llvm-project/commit/5a77b958e250fbf156474b42ccf5a82e8a36db72 DIFF: https://github.com/llvm/llvm-project/commit/5a77b958e250fbf156474b42ccf5a82e8a36db72.diff LOG: [NFC] Improve doc string to mention that paths in diff are used as-is Summary: Add --relative to the suggested git-diff one liner. If the user does not pass this argument, then git will produce a diff with the path relative to the repository root. If the user's working directory is not the repository root, then clang-format will complain that the file is not found. The --relative argument makes git produce a diff with the files relative to the working directory. Add note to doc string to warn users about the fact that filenames embedded in the diff are used as-is with no attempts to "do what they mean, not what they say" Reviewers: djasper, alexfh, efriedma, klimek, thakis Reviewed By: efriedma Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D79054 Added: Modified: clang/tools/clang-format/clang-format-diff.py Removed: diff --git a/clang/tools/clang-format/clang-format- diff .py b/clang/tools/clang-format/clang-format- diff .py index 24c6f4ae456c..5977ab056515 100755 --- a/clang/tools/clang-format/clang-format- diff .py +++ b/clang/tools/clang-format/clang-format- diff .py @@ -13,9 +13,13 @@ lines. This is useful to reformat all the lines touched by a specific patch. Example usage for git/svn users: - git diff -U0 --no-color HEAD^ | clang-format- diff .py -p1 -i + git diff -U0 --no-color --relative HEAD^ | clang-format- diff .py -p1 -i svn diff -- diff -cmd= diff -x-U0 | clang-format- diff .py -i +It should be noted that the filename contained in the diff is used unmodified +to determine the source file to update. Users calling this script directly +should be careful to ensure that the path in the diff is correct relative to the +current working directory. """ from __future__ import absolute_import, division, print_function ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 19e883f - [SVE] Remove calls to VectorType::getNumElements from clang
Author: Christopher Tetreault Date: 2020-08-26T11:12:26-07:00 New Revision: 19e883fc59887e98a49ec03557ad2b6bc5537e03 URL: https://github.com/llvm/llvm-project/commit/19e883fc59887e98a49ec03557ad2b6bc5537e03 DIFF: https://github.com/llvm/llvm-project/commit/19e883fc59887e98a49ec03557ad2b6bc5537e03.diff LOG: [SVE] Remove calls to VectorType::getNumElements from clang Reviewed By: RKSimon Differential Revision: https://reviews.llvm.org/D82582 Added: Modified: clang/lib/CodeGen/CGAtomic.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGExpr.cpp clang/lib/CodeGen/CGExprScalar.cpp clang/lib/CodeGen/SwiftCallingConv.cpp Removed: diff --git a/clang/lib/CodeGen/CGAtomic.cpp b/clang/lib/CodeGen/CGAtomic.cpp index d7720a23dd72..a640cb7b5a6e 100644 --- a/clang/lib/CodeGen/CGAtomic.cpp +++ b/clang/lib/CodeGen/CGAtomic.cpp @@ -119,7 +119,7 @@ namespace { ValueTy = lvalue.getType(); ValueSizeInBits = C.getTypeSize(ValueTy); AtomicTy = ValueTy = CGF.getContext().getExtVectorType( -lvalue.getType(), cast( +lvalue.getType(), cast( lvalue.getExtVectorAddress().getElementType()) ->getNumElements()); AtomicSizeInBits = C.getTypeSize(AtomicTy); diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index d002624cef4d..24e33c164009 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -4561,11 +4561,11 @@ Value *CodeGenFunction::EmitTargetBuiltinExpr(unsigned BuiltinID, getTarget().getTriple().getArch()); } -static llvm::VectorType *GetNeonType(CodeGenFunction *CGF, - NeonTypeFlags TypeFlags, - bool HasLegalHalfType = true, - bool V1Ty = false, - bool AllowBFloatArgsAndRet = true) { +static llvm::FixedVectorType *GetNeonType(CodeGenFunction *CGF, + NeonTypeFlags TypeFlags, + bool HasLegalHalfType = true, + bool V1Ty = false, + bool AllowBFloatArgsAndRet = true) { int IsQuad = TypeFlags.isQuad(); switch (TypeFlags.getEltType()) { case NeonTypeFlags::Int8: @@ -5621,8 +5621,8 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( const bool AllowBFloatArgsAndRet = getTargetHooks().getABIInfo().allowBFloatArgsAndRet(); - llvm::VectorType *VTy = GetNeonType(this, Type, HasLegalHalfType, false, - AllowBFloatArgsAndRet); + llvm::FixedVectorType *VTy = + GetNeonType(this, Type, HasLegalHalfType, false, AllowBFloatArgsAndRet); llvm::Type *Ty = VTy; if (!Ty) return nullptr; @@ -5663,8 +5663,8 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs"); return EmitNeonCall(CGM.getIntrinsic(LLVMIntrinsic, Ty), Ops, "vabs"); case NEON::BI__builtin_neon_vaddhn_v: { -llvm::VectorType *SrcTy = -llvm::VectorType::getExtendedElementVectorType(VTy); +llvm::FixedVectorType *SrcTy = +llvm::FixedVectorType::getExtendedElementVectorType(VTy); // %sum = add <4 x i32> %lhs, %rhs Ops[0] = Builder.CreateBitCast(Ops[0], SrcTy); @@ -5936,14 +5936,16 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( return Builder.CreateDefaultAlignedStore(Ops[1], Ops[0]); } case NEON::BI__builtin_neon_vmovl_v: { -llvm::Type *DTy =llvm::VectorType::getTruncatedElementVectorType(VTy); +llvm::FixedVectorType *DTy = +llvm::FixedVectorType::getTruncatedElementVectorType(VTy); Ops[0] = Builder.CreateBitCast(Ops[0], DTy); if (Usgn) return Builder.CreateZExt(Ops[0], Ty, "vmovl"); return Builder.CreateSExt(Ops[0], Ty, "vmovl"); } case NEON::BI__builtin_neon_vmovn_v: { -llvm::Type *QTy = llvm::VectorType::getExtendedElementVectorType(VTy); +llvm::FixedVectorType *QTy = +llvm::FixedVectorType::getExtendedElementVectorType(VTy); Ops[0] = Builder.CreateBitCast(Ops[0], QTy); return Builder.CreateTrunc(Ops[0], Ty, "vmovn"); } @@ -5989,7 +5991,7 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( case NEON::BI__builtin_neon_vqdmulh_lane_v: case NEON::BI__builtin_neon_vqrdmulhq_lane_v: case NEON::BI__builtin_neon_vqrdmulh_lane_v: { -auto *RTy = cast(Ty); +auto *RTy = cast(Ty); if (BuiltinID == NEON::BI__builtin_neon_vqdmulhq_lane_v || BuiltinID == NEON::BI__builtin_neon_vqrdmulhq_lane_v) RTy = llvm::FixedVectorType::get(RTy->getElementType(), @@ -6038,7 +6040,8 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr(
[clang] 0703b07 - [CMake] Actually require python 3.6 or greater
Author: Christopher Tetreault Date: 2021-01-29T11:47:21-08:00 New Revision: 0703b0753c40dad30f1683403f6600bd2cb42055 URL: https://github.com/llvm/llvm-project/commit/0703b0753c40dad30f1683403f6600bd2cb42055 DIFF: https://github.com/llvm/llvm-project/commit/0703b0753c40dad30f1683403f6600bd2cb42055.diff LOG: [CMake] Actually require python 3.6 or greater Previously, CMake would find any version of Python3. However, the project claims to require 3.6 or greater, and 3.6 features are being used. Reviewed By: yln Differential Revision: https://reviews.llvm.org/D95635 Added: Modified: clang/CMakeLists.txt lld/CMakeLists.txt llvm/CMakeLists.txt mlir/CMakeLists.txt Removed: diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 9e74014134a0..466b92ba6143 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -131,7 +131,7 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} ) if(LLVM_INCLUDE_TESTS) -find_package(Python3 REQUIRED COMPONENTS Interpreter) +find_package(Python3 3.6 REQUIRED COMPONENTS Interpreter) # Check prebuilt llvm/utils. if(EXISTS ${LLVM_TOOLS_BINARY_DIR}/FileCheck${CMAKE_EXECUTABLE_SUFFIX} diff --git a/lld/CMakeLists.txt b/lld/CMakeLists.txt index d4e561b50d8f..4923361a9969 100644 --- a/lld/CMakeLists.txt +++ b/lld/CMakeLists.txt @@ -57,7 +57,7 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) include(CheckAtomic) if(LLVM_INCLUDE_TESTS) -find_package(Python3 REQUIRED COMPONENTS Interpreter) +find_package(Python3 3.6 REQUIRED COMPONENTS Interpreter) # Check prebuilt llvm/utils. if(EXISTS ${LLVM_TOOLS_BINARY_DIR}/FileCheck${CMAKE_EXECUTABLE_SUFFIX} diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index 40be7a855932..f0cb42b77c64 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -697,7 +697,7 @@ set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER FALSE CACHE BOOL include(HandleLLVMOptions) -find_package(Python3 REQUIRED COMPONENTS Interpreter) +find_package(Python3 3.6 REQUIRED COMPONENTS Interpreter) ## diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt index cbae5fd54823..b2eec04520c9 100644 --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -79,7 +79,7 @@ set(MLIR_PYTHON_BINDINGS_VERSION_LOCKED 1 CACHE BOOL if(MLIR_BINDINGS_PYTHON_ENABLED) include(MLIRDetectPythonEnv) - find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED) + find_package(Python3 3.6 COMPONENTS Interpreter Development NumPy REQUIRED) message(STATUS "Found python include dirs: ${Python3_INCLUDE_DIRS}") message(STATUS "Found python libraries: ${Python3_LIBRARIES}") message(STATUS "Found numpy v${Python3_NumPy_VERSION}: ${Python3_NumPy_INCLUDE_DIRS}") ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 55448ab - [AArch64] Adding Neon Polynomial vadd Intrinsics
Author: Christopher Tetreault Date: 2021-02-19T14:48:12-08:00 New Revision: 55448ab540ded21bb2880e52efcf22e07603a096 URL: https://github.com/llvm/llvm-project/commit/55448ab540ded21bb2880e52efcf22e07603a096 DIFF: https://github.com/llvm/llvm-project/commit/55448ab540ded21bb2880e52efcf22e07603a096.diff LOG: [AArch64] Adding Neon Polynomial vadd Intrinsics This patch adds the following intrinsics: vadd_p8 vadd_p16 vadd_p64 vaddq_p8 vaddq_p16 vaddq_p64 vaddq_p128 Reviewed By: t.p.northover, DavidSpickett, ctetreau Differential Revision: https://reviews.llvm.org/D96825 Added: clang/test/CodeGen/aarch64-poly-add.c Modified: clang/include/clang/Basic/arm_neon.td clang/lib/CodeGen/CGBuiltin.cpp Removed: diff --git a/clang/include/clang/Basic/arm_neon.td b/clang/include/clang/Basic/arm_neon.td index 9835c13c0dcd..cb8e30445a76 100644 --- a/clang/include/clang/Basic/arm_neon.td +++ b/clang/include/clang/Basic/arm_neon.td @@ -1147,6 +1147,8 @@ def SM4E : SInst<"vsm4e", "...", "QUi">; def SM4EKEY : SInst<"vsm4ekey", "...", "QUi">; } +def VADDP : WInst<"vadd", "...", "PcPsPlQPcQPsQPlQPk">; + // Float -> Int conversions with explicit rounding mode diff --git a/clang/lib/CodeGen/CGBuiltin.cpp b/clang/lib/CodeGen/CGBuiltin.cpp index 3ab5d2a5b684..c1eaba49ce91 100644 --- a/clang/lib/CodeGen/CGBuiltin.cpp +++ b/clang/lib/CodeGen/CGBuiltin.cpp @@ -5371,7 +5371,10 @@ static const ARMVectorIntrinsicInfo ARMSIMDIntrinsicMap [] = { NEONMAP2(vabdq_v, arm_neon_vabdu, arm_neon_vabds, Add1ArgType | UnsignedAlts), NEONMAP1(vabs_v, arm_neon_vabs, 0), NEONMAP1(vabsq_v, arm_neon_vabs, 0), + NEONMAP0(vadd_v), NEONMAP0(vaddhn_v), + NEONMAP0(vaddq_p128), + NEONMAP0(vaddq_v), NEONMAP1(vaesdq_v, arm_neon_aesd, 0), NEONMAP1(vaeseq_v, arm_neon_aese, 0), NEONMAP1(vaesimcq_v, arm_neon_aesimc, 0), @@ -5665,7 +5668,10 @@ static const ARMVectorIntrinsicInfo AArch64SIMDIntrinsicMap[] = { NEONMAP0(splatq_laneq_v), NEONMAP1(vabs_v, aarch64_neon_abs, 0), NEONMAP1(vabsq_v, aarch64_neon_abs, 0), + NEONMAP0(vadd_v), NEONMAP0(vaddhn_v), + NEONMAP0(vaddq_p128), + NEONMAP0(vaddq_v), NEONMAP1(vaesdq_v, aarch64_crypto_aesd, 0), NEONMAP1(vaeseq_v, aarch64_crypto_aese, 0), NEONMAP1(vaesimcq_v, aarch64_crypto_aesimc, 0), @@ -6302,6 +6308,14 @@ Value *CodeGenFunction::EmitCommonNeonBuiltinExpr( if (VTy->getElementType()->isFloatingPointTy()) return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, Ty), Ops, "vabs"); return EmitNeonCall(CGM.getIntrinsic(LLVMIntrinsic, Ty), Ops, "vabs"); + case NEON::BI__builtin_neon_vadd_v: + case NEON::BI__builtin_neon_vaddq_v: { +llvm::Type *VTy = llvm::FixedVectorType::get(Int8Ty, Quad ? 16 : 8); +Ops[0] = Builder.CreateBitCast(Ops[0], VTy); +Ops[1] = Builder.CreateBitCast(Ops[1], VTy); +Ops[0] = Builder.CreateXor(Ops[0], Ops[1]); +return Builder.CreateBitCast(Ops[0], Ty); + } case NEON::BI__builtin_neon_vaddhn_v: { llvm::FixedVectorType *SrcTy = llvm::FixedVectorType::getExtendedElementVectorType(VTy); @@ -9543,6 +9557,15 @@ Value *CodeGenFunction::EmitAArch64BuiltinExpr(unsigned BuiltinID, case NEON::BI__builtin_neon_vabsh_f16: Ops.push_back(EmitScalarExpr(E->getArg(0))); return EmitNeonCall(CGM.getIntrinsic(Intrinsic::fabs, HalfTy), Ops, "vabs"); + case NEON::BI__builtin_neon_vaddq_p128: { +llvm::Type *Ty = GetNeonType(this, NeonTypeFlags::Poly128); +Ops.push_back(EmitScalarExpr(E->getArg(1))); +Ops[0] = Builder.CreateBitCast(Ops[0], Ty); +Ops[1] = Builder.CreateBitCast(Ops[1], Ty); +Ops[0] = Builder.CreateXor(Ops[0], Ops[1]); +llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128); +return Builder.CreateBitCast(Ops[0], Int128Ty); + } case NEON::BI__builtin_neon_vldrq_p128: { llvm::Type *Int128Ty = llvm::Type::getIntNTy(getLLVMContext(), 128); llvm::Type *Int128PTy = llvm::PointerType::get(Int128Ty, 0); diff --git a/clang/test/CodeGen/aarch64-poly-add.c b/clang/test/CodeGen/aarch64-poly-add.c new file mode 100644 index ..ff09fbced163 --- /dev/null +++ b/clang/test/CodeGen/aarch64-poly-add.c @@ -0,0 +1,85 @@ +// NOTE: Assertions have been autogenerated by utils/update_cc_test_checks.py +// REQUIRES: aarch64-registered-target +// RUN: %clang_cc1 -triple aarch64-linux-gnu -target-feature +neon \ +// RUN: -disable-O0-optnone -emit-llvm -o - %s | opt -S -mem2reg \ +// RUN: | FileCheck %s + +#include + +// CHECK-LABEL: @test_vadd_p8( +// CHECK-NEXT: entry: +// CHECK-NEXT:[[TMP0:%.*]] = xor <8 x i8> [[A:%.*]], [[B:%.*]] +// CHECK-NEXT:ret <8 x i8> [[TMP0]] +// +poly8x8_t test_vadd_p8(poly8x8_t a, poly8x8_t b) { + return vadd_p8 (a, b); +} + +/
[clang] 2afb939 - [hwasan] Flag stack safety check as requiring aarch64
Author: Christopher Tetreault Date: 2021-08-18T11:14:01-07:00 New Revision: 2afb9394a745733739f217d53cd9cf4ae03a3157 URL: https://github.com/llvm/llvm-project/commit/2afb9394a745733739f217d53cd9cf4ae03a3157 DIFF: https://github.com/llvm/llvm-project/commit/2afb9394a745733739f217d53cd9cf4ae03a3157.diff LOG: [hwasan] Flag stack safety check as requiring aarch64 Reviewed By: fmayer Differential Revision: https://reviews.llvm.org/D108241 Added: Modified: clang/test/CodeGen/hwasan-stack-safety-analysis.c Removed: diff --git a/clang/test/CodeGen/hwasan-stack-safety-analysis.c b/clang/test/CodeGen/hwasan-stack-safety-analysis.c index ba50274de282..59fc53f8b1d1 100644 --- a/clang/test/CodeGen/hwasan-stack-safety-analysis.c +++ b/clang/test/CodeGen/hwasan-stack-safety-analysis.c @@ -1,3 +1,5 @@ +// REQUIRES: aarch64-registered-target + // RUN: %clang -fno-legacy-pass-manager -fsanitize=hwaddress -target aarch64-linux-gnu -S -emit-llvm -mllvm -hwasan-use-stack-safety=true -mllvm -hwasan-generate-tags-with-calls -O2 %s -o - | FileCheck %s --check-prefix=SAFETY // RUN: %clang -fno-legacy-pass-manager -fsanitize=hwaddress -target aarch64-linux-gnu -S -emit-llvm -mllvm -hwasan-use-stack-safety=false -mllvm -hwasan-generate-tags-with-calls -O2 %s -o - | FileCheck %s --check-prefix=NOSAFETY ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] 3997076 - [CMake] Require python 3.6 if enabling LLVM test targets
Author: Christopher Tetreault Date: 2021-03-15T09:50:39-07:00 New Revision: 39970764af39415ad62136ff75b0f89577c18037 URL: https://github.com/llvm/llvm-project/commit/39970764af39415ad62136ff75b0f89577c18037 DIFF: https://github.com/llvm/llvm-project/commit/39970764af39415ad62136ff75b0f89577c18037.diff LOG: [CMake] Require python 3.6 if enabling LLVM test targets The lit test suite uses python 3.6 features. Rather than a strange python syntax error upon running the lit tests, we will require the correct version in CMake. Reviewed By: serge-sans-paille, yln Differential Revision: https://reviews.llvm.org/D95635 Added: Modified: clang/CMakeLists.txt lld/CMakeLists.txt llvm/CMakeLists.txt llvm/cmake/modules/HandleLLVMOptions.cmake mlir/CMakeLists.txt Removed: diff --git a/clang/CMakeLists.txt b/clang/CMakeLists.txt index 4695dc8a46fff..9ecf4b9d2de86 100644 --- a/clang/CMakeLists.txt +++ b/clang/CMakeLists.txt @@ -131,7 +131,8 @@ if( CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR ) set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib${LLVM_LIBDIR_SUFFIX} ) if(LLVM_INCLUDE_TESTS) -find_package(Python3 REQUIRED COMPONENTS Interpreter) +find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION} REQUIRED + COMPONENTS Interpreter) # Check prebuilt llvm/utils. if(EXISTS ${LLVM_TOOLS_BINARY_DIR}/FileCheck${CMAKE_EXECUTABLE_SUFFIX} diff --git a/lld/CMakeLists.txt b/lld/CMakeLists.txt index d4e561b50d8f8..cbca979aaeb11 100644 --- a/lld/CMakeLists.txt +++ b/lld/CMakeLists.txt @@ -57,7 +57,8 @@ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) include(CheckAtomic) if(LLVM_INCLUDE_TESTS) -find_package(Python3 REQUIRED COMPONENTS Interpreter) +find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION} REQUIRED + COMPONENTS Interpreter) # Check prebuilt llvm/utils. if(EXISTS ${LLVM_TOOLS_BINARY_DIR}/FileCheck${CMAKE_EXECUTABLE_SUFFIX} diff --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt index f5298de9f7ca6..22c1a130f4a56 100644 --- a/llvm/CMakeLists.txt +++ b/llvm/CMakeLists.txt @@ -693,7 +693,8 @@ set(ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER TRUE CACHE BOOL include(HandleLLVMOptions) -find_package(Python3 REQUIRED COMPONENTS Interpreter) +find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION} REQUIRED +COMPONENTS Interpreter) ## diff --git a/llvm/cmake/modules/HandleLLVMOptions.cmake b/llvm/cmake/modules/HandleLLVMOptions.cmake index 32fb4e10e31e9..2e088bd6e9168 100644 --- a/llvm/cmake/modules/HandleLLVMOptions.cmake +++ b/llvm/cmake/modules/HandleLLVMOptions.cmake @@ -1176,3 +1176,11 @@ if(LLVM_USE_RELATIVE_PATHS_IN_FILES) append_if(SUPPORTS_FFILE_PREFIX_MAP "-ffile-prefix-map=${source_root}/=${LLVM_SOURCE_PREFIX}" CMAKE_C_FLAGS CMAKE_CXX_FLAGS) add_flag_if_supported("-no-canonical-prefixes" NO_CANONICAL_PREFIXES) endif() + +if(LLVM_INCLUDE_TESTS) + # Lit test suite requires at least python 3.6 + set(LLVM_MINIMUM_PYTHON_VERSION 3.6) +else() + # FIXME: it is unknown if this is the actual minimum bound + set(LLVM_MINIMUM_PYTHON_VERSION 3.0) +endif() diff --git a/mlir/CMakeLists.txt b/mlir/CMakeLists.txt index 7385e6b172226..79ef5510ad2d3 100644 --- a/mlir/CMakeLists.txt +++ b/mlir/CMakeLists.txt @@ -106,7 +106,8 @@ set(MLIR_PYTHON_BINDINGS_VERSION_LOCKED 1 CACHE BOOL if(MLIR_BINDINGS_PYTHON_ENABLED) include(MLIRDetectPythonEnv) - find_package(Python3 COMPONENTS Interpreter Development NumPy REQUIRED) + find_package(Python3 ${LLVM_MINIMUM_PYTHON_VERSION} +COMPONENTS Interpreter Development NumPy REQUIRED) message(STATUS "Found python include dirs: ${Python3_INCLUDE_DIRS}") message(STATUS "Found python libraries: ${Python3_LIBRARIES}") message(STATUS "Found numpy v${Python3_NumPy_VERSION}: ${Python3_NumPy_INCLUDE_DIRS}") ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits