[PATCH] D156223: [RISCV] Resolve a few bugs in RISCVVIntrinsicUtils.cpp
Brandon Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 3 01:48:52 PDT 2023
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGf3ce925083d2: [RISCV] Resolve a few bugs in RISCVVIntrinsicUtils.cpp (authored by 4vtomat).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D156223/new/
https://reviews.llvm.org/D156223
Files:
clang/include/clang/Support/RISCVVIntrinsicUtils.h
clang/lib/Sema/SemaRISCVVectorLookup.cpp
clang/lib/Support/RISCVVIntrinsicUtils.cpp
clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vlmul_trunc_v_invalid.c
Index: clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vlmul_trunc_v_invalid.c
===================================================================
--- /dev/null
+++ clang/test/CodeGen/RISCV/rvv-intrinsics-autogenerated/non-policy/non-overloaded/vlmul_trunc_v_invalid.c
@@ -0,0 +1,21 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -target-feature +v -target-feature +zfh \
+// RUN: -target-feature +zvfh -disable-O0-optnone %s -fsyntax-only -verify
+
+#include <riscv_vector.h>
+
+vuint64m2_t test_vlmul_trunc_v_u64m2_u64m2(vuint64m2_t op1) { // expected-note {{'test_vlmul_trunc_v_u64m2_u64m2' declared here}}
+ return __riscv_vlmul_trunc_v_u64m2_u64m2(op1); // expected-error {{call to undeclared function '__riscv_vlmul_trunc_v_u64m2_u64m2'; ISO C99 and later do not support implicit function declarations}} expected-error {{returning 'int' from a function with incompatible result type 'vuint64m2_t' (aka '__rvv_uint64m2_t')}} expected-note {{did you mean 'test_vlmul_trunc_v_u64m2_u64m2'?}}
+}
+
+vuint64m4_t test_vlmul_trunc_v_u64m4_u64m4(vuint64m4_t op1) { // expected-note {{'test_vlmul_trunc_v_u64m4_u64m4' declared here}}
+ return __riscv_vlmul_trunc_v_u64m4_u64m4(op1); // expected-error {{call to undeclared function '__riscv_vlmul_trunc_v_u64m4_u64m4'; ISO C99 and later do not support implicit function declarations}} expected-error {{returning 'int' from a function with incompatible result type 'vuint64m4_t' (aka '__rvv_uint64m4_t')}} expected-note {{did you mean 'test_vlmul_trunc_v_u64m4_u64m4'?}}
+}
+
+vuint64m1_t test_vlmul_trunc_v_u64m1_u64m1(vuint64m1_t op1) { // expected-note {{'test_vlmul_trunc_v_u64m1_u64m1' declared here}}
+ return __riscv_vlmul_trunc_v_u64m1_u64m1(op1); // expected-error {{call to undeclared function '__riscv_vlmul_trunc_v_u64m1_u64m1'; ISO C99 and later do not support implicit function declarations}} expected-error {{returning 'int' from a function with incompatible result type 'vuint64m1_t' (aka '__rvv_uint64m1_t')}} expected-note {{did you mean 'test_vlmul_trunc_v_u64m1_u64m1'?}}
+}
+
+vuint64m8_t test_vlmul_trunc_v_u64m8_u64m8(vuint64m8_t op1) { // expected-note {{'test_vlmul_trunc_v_u64m8_u64m8' declared here}}
+ return __riscv_vlmul_trunc_v_u64m8_u64m8(op1); // expected-error {{call to undeclared function '__riscv_vlmul_trunc_v_u64m8_u64m8'; ISO C99 and later do not support implicit function declarations}} expected-error {{returning 'int' from a function with incompatible result type 'vuint64m8_t' (aka '__rvv_uint64m8_t')}} expected-note {{did you mean 'test_vlmul_trunc_v_u64m8_u64m8'?}}
+}
Index: clang/lib/Support/RISCVVIntrinsicUtils.cpp
===================================================================
--- clang/lib/Support/RISCVVIntrinsicUtils.cpp
+++ clang/lib/Support/RISCVVIntrinsicUtils.cpp
@@ -742,6 +742,10 @@
break;
}
+ // Early return if the current type modifier is already invalid.
+ if (ScalarType == Invalid)
+ return;
+
for (unsigned TypeModifierMaskShift = 0;
TypeModifierMaskShift <= static_cast<unsigned>(TypeModifier::MaxOffset);
++TypeModifierMaskShift) {
@@ -803,13 +807,13 @@
void RVVType::applyFixedLog2LMUL(int Log2LMUL, enum FixedLMULType Type) {
switch (Type) {
case FixedLMULType::LargerThan:
- if (Log2LMUL < LMUL.Log2LMUL) {
+ if (Log2LMUL <= LMUL.Log2LMUL) {
ScalarType = ScalarTypeKind::Invalid;
return;
}
break;
case FixedLMULType::SmallerThan:
- if (Log2LMUL > LMUL.Log2LMUL) {
+ if (Log2LMUL >= LMUL.Log2LMUL) {
ScalarType = ScalarTypeKind::Invalid;
return;
}
Index: clang/lib/Sema/SemaRISCVVectorLookup.cpp
===================================================================
--- clang/lib/Sema/SemaRISCVVectorLookup.cpp
+++ clang/lib/Sema/SemaRISCVVectorLookup.cpp
@@ -133,6 +133,7 @@
}
break;
case Invalid:
+ case Undefined:
llvm_unreachable("Unhandled type.");
}
if (Type->isVector()) {
Index: clang/include/clang/Support/RISCVVIntrinsicUtils.h
===================================================================
--- clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -218,6 +218,7 @@
UnsignedInteger,
Float,
Invalid,
+ Undefined,
};
// Exponential LMUL
@@ -240,7 +241,7 @@
friend class RVVTypeCache;
BasicType BT;
- ScalarTypeKind ScalarType = Invalid;
+ ScalarTypeKind ScalarType = Undefined;
LMULType LMUL;
bool IsPointer = false;
// IsConstant indices are "int", but have the constant expression.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D156223.546747.patch
Type: text/x-patch
Size: 4597 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230803/5a31a821/attachment.bin>
More information about the cfe-commits
mailing list