[clang] 7968981 - [SVE] Eliminate calls to default-false VectorType::get() from Clang

2020-06-01 Thread Christopher Tetreault via cfe-commits

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

2020-04-09 Thread Christopher Tetreault via cfe-commits

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

2020-04-13 Thread Christopher Tetreault via cfe-commits

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

2020-04-14 Thread Christopher Tetreault via cfe-commits

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

2020-04-15 Thread Christopher Tetreault via cfe-commits

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

2020-06-16 Thread Christopher Tetreault via cfe-commits

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

2020-04-17 Thread Christopher Tetreault via cfe-commits

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

2020-04-27 Thread Christopher Tetreault via cfe-commits

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

2020-04-28 Thread Christopher Tetreault via cfe-commits

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

2020-05-06 Thread Christopher Tetreault via cfe-commits

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

2020-08-26 Thread Christopher Tetreault via cfe-commits

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

2021-01-29 Thread Christopher Tetreault via cfe-commits

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

2021-02-19 Thread Christopher Tetreault via cfe-commits

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

2021-08-18 Thread Christopher Tetreault via cfe-commits

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

2021-03-15 Thread Christopher Tetreault via cfe-commits

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