Reland D78750: [SveEmitter] Add builtins for svdupq and svdupq_lane
Edit: Changed a few CHECK lines into CHECK-DAG lines.
This reverts commit 90f3f62cb087782fe2608e95d686c29067281b6e.
diff --git a/clang/utils/TableGen/SveEmitter.cpp b/clang/utils/TableGen/SveEmitter.cpp
index 12730d7..d8df92f 100644
--- a/clang/utils/TableGen/SveEmitter.cpp
+++ b/clang/utils/TableGen/SveEmitter.cpp
@@ -94,7 +94,9 @@
bool isDefault() const { return DefaultType; }
bool isFloat() const { return Float; }
bool isInteger() const { return !Float && !Predicate; }
- bool isScalarPredicate() const { return !Float && ElementBitwidth == 1; }
+ bool isScalarPredicate() const {
+ return !Float && Predicate && NumVectors == 0;
+ }
bool isPredicateVector() const { return Predicate; }
bool isPredicatePattern() const { return PredicatePattern; }
bool isPrefetchOp() const { return PrefetchOp; }
@@ -407,12 +409,12 @@
if (Float)
S += "float";
- else if (isScalarPredicate())
+ else if (isScalarPredicate() || isPredicateVector())
S += "bool";
else
S += "int";
- if (!isScalarPredicate())
+ if (!isScalarPredicate() && !isPredicateVector())
S += utostr(ElementBitwidth);
if (!isScalableVector() && isVector())
S += "x" + utostr(getNumElements());
@@ -433,7 +435,6 @@
switch (I) {
case 'P':
Predicate = true;
- ElementBitwidth = 1;
break;
case 'U':
Signed = false;