[llvm] [clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-11-02 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat closed 
https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[llvm] [clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-11-02 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat updated 
https://github.com/llvm/llvm-project/pull/66860

>From a43d20450eef2d41e88ab867de2656e2fd9631b7 Mon Sep 17 00:00:00 2001
From: 4vtomat 
Date: Tue, 19 Sep 2023 23:06:01 -0700
Subject: [PATCH 1/3] [RISCV] Fix wrong implication for zvknhb.

---
 clang/include/clang/Basic/riscv_vector.td|  9 -
 .../include/clang/Support/RISCVVIntrinsicUtils.h |  5 +++--
 clang/lib/Sema/SemaRISCVVectorLookup.cpp |  1 +
 clang/test/Sema/zvk-invalid-zvknha.c | 11 +++
 clang/utils/TableGen/RISCVVEmitter.cpp   |  1 +
 llvm/lib/Support/RISCVISAInfo.cpp|  2 --
 llvm/lib/Target/RISCV/RISCVFeatures.td   | 16 +++-
 llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td   | 16 +++-
 llvm/test/CodeGen/RISCV/attributes.ll| 16 
 llvm/test/CodeGen/RISCV/rvv/vsha2ch.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2cl.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2ms.ll   |  6 ++
 llvm/test/MC/RISCV/attribute-arch.s  |  8 
 llvm/test/MC/RISCV/rvv/zvknh.s   |  6 +++---
 14 files changed, 79 insertions(+), 30 deletions(-)
 create mode 100644 clang/test/Sema/zvk-invalid-zvknha.c

diff --git a/clang/include/clang/Basic/riscv_vector.td 
b/clang/include/clang/Basic/riscv_vector.td
index 8bbfd1cef5106a5..1d24b4e75f9dd5f 100644
--- a/clang/include/clang/Basic/riscv_vector.td
+++ b/clang/include/clang/Basic/riscv_vector.td
@@ -2588,8 +2588,15 @@ let UnMaskedPolicyScheme = HasPolicyOperand, HasMasked = 
false in {
 defm vaesz   : RVVOutBuiltinSetZvk;
   }
 
-  // zvknha or zvknhb
+  // zvknha
   let RequiredFeatures = ["Zvknha"] in {
+defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"i">;
+  }
+
+  // zvknhb
+  let RequiredFeatures = ["Zvknhb"] in {
 defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"il">;
diff --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h 
b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
index 90d99b7efa8aff9..c455bb2c45889f3 100644
--- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -493,8 +493,9 @@ enum RVVRequire : uint16_t {
   RVV_REQ_Zvkg = 1 << 8,
   RVV_REQ_Zvkned = 1 << 9,
   RVV_REQ_Zvknha = 1 << 10,
-  RVV_REQ_Zvksed = 1 << 11,
-  RVV_REQ_Zvksh = 1 << 12,
+  RVV_REQ_Zvknhb = 1 << 11,
+  RVV_REQ_Zvksed = 1 << 12,
+  RVV_REQ_Zvksh = 1 << 13,
 
   LLVM_MARK_AS_BITMASK_ENUM(RVV_REQ_Zvksh)
 };
diff --git a/clang/lib/Sema/SemaRISCVVectorLookup.cpp 
b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
index acdf3260007bc3a..1ba68f54b6db19c 100644
--- a/clang/lib/Sema/SemaRISCVVectorLookup.cpp
+++ b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
@@ -213,6 +213,7 @@ void RISCVIntrinsicManagerImpl::ConstructRVVIntrinsics(
   {"experimental-zvkg", RVV_REQ_Zvkg},
   {"experimental-zvkned", RVV_REQ_Zvkned},
   {"experimental-zvknha", RVV_REQ_Zvknha},
+  {"experimental-zvknhb", RVV_REQ_Zvknhb},
   {"experimental-zvksed", RVV_REQ_Zvksed},
   {"experimental-zvksh", RVV_REQ_Zvksh}};
 
diff --git a/clang/test/Sema/zvk-invalid-zvknha.c 
b/clang/test/Sema/zvk-invalid-zvknha.c
new file mode 100644
index 000..0ce2e321a175f5f
--- /dev/null
+++ b/clang/test/Sema/zvk-invalid-zvknha.c
@@ -0,0 +1,11 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -target-feature +v -target-feature 
+experimental-zvknha %s -fsyntax-only -verify
+
+#include 
+
+void test_zvk_features() {
+  // zvknhb
+  __riscv_vsha2ch_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ch_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2cl_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2cl_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2ms_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ms_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+}
diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp 
b/clang/utils/TableGen/RISCVVEmitter.cpp
index 07d31642188eafd..d697099e47733fa 100644
--- a/clang/utils/TableGen/RISCVVEmitter.cpp
+++ b/clang/utils/TableGen/RISCVVEmitter.cpp
@@ -664,6 +664,7 @@ void RVVEmitter::createRVVIntrinsics(
   .Case("Zvkg", RVV_REQ_Zvkg)
   .Case("Zvkned", RVV_REQ_Zvkned)
   .Case("Zvknha", RVV_REQ_Zvknha)
+  .Case("Zvknhb", RVV_REQ_Zvknhb)
   .Case("Zvksed", RVV_REQ_Zvksed)
   .Case("Zvksh", RVV_REQ_Zvksh)
   

[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-26 Thread Craig Topper via cfe-commits

https://github.com/topperc approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-26 Thread Brandon Wu via cfe-commits

4vtomat wrote:

ping

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-10 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat updated 
https://github.com/llvm/llvm-project/pull/66860

>From 3c28f7bace91dc4edd5e87b9f1a36d100cf38318 Mon Sep 17 00:00:00 2001
From: 4vtomat 
Date: Tue, 19 Sep 2023 23:06:01 -0700
Subject: [PATCH 1/3] [RISCV] Fix wrong implication for zvknhb.

---
 clang/include/clang/Basic/riscv_vector.td|  9 -
 .../include/clang/Support/RISCVVIntrinsicUtils.h |  5 +++--
 clang/lib/Sema/SemaRISCVVectorLookup.cpp |  1 +
 clang/test/Sema/zvk-invalid-zvknha.c | 11 +++
 clang/utils/TableGen/RISCVVEmitter.cpp   |  1 +
 llvm/lib/Support/RISCVISAInfo.cpp|  2 --
 llvm/lib/Target/RISCV/RISCVFeatures.td   | 16 +++-
 llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td   | 16 +++-
 llvm/test/CodeGen/RISCV/attributes.ll| 16 
 llvm/test/CodeGen/RISCV/rvv/vsha2ch.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2cl.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2ms.ll   |  6 ++
 llvm/test/MC/RISCV/attribute-arch.s  |  8 
 llvm/test/MC/RISCV/rvv/zvknh.s   |  6 +++---
 14 files changed, 79 insertions(+), 30 deletions(-)
 create mode 100644 clang/test/Sema/zvk-invalid-zvknha.c

diff --git a/clang/include/clang/Basic/riscv_vector.td 
b/clang/include/clang/Basic/riscv_vector.td
index 60a1a2b2be6fb40..8d9c4237e59bf9f 100644
--- a/clang/include/clang/Basic/riscv_vector.td
+++ b/clang/include/clang/Basic/riscv_vector.td
@@ -2997,8 +2997,15 @@ let UnMaskedPolicyScheme = HasPolicyOperand, HasMasked = 
false in {
 defm vaesz   : RVVOutBuiltinSetZvk;
   }
 
-  // zvknha or zvknhb
+  // zvknha
   let RequiredFeatures = ["Zvknha"] in {
+defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"i">;
+  }
+
+  // zvknhb
+  let RequiredFeatures = ["Zvknhb"] in {
 defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"il">;
diff --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h 
b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
index 8ba57d77221dc52..b703259a777ec85 100644
--- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -491,8 +491,9 @@ enum RVVRequire : uint16_t {
   RVV_REQ_Zvkg = 1 << 6,
   RVV_REQ_Zvkned = 1 << 7,
   RVV_REQ_Zvknha = 1 << 8,
-  RVV_REQ_Zvksed = 1 << 9,
-  RVV_REQ_Zvksh = 1 << 10,
+  RVV_REQ_Zvknhb = 1 << 9,
+  RVV_REQ_Zvksed = 1 << 10,
+  RVV_REQ_Zvksh = 1 << 11,
 
   LLVM_MARK_AS_BITMASK_ENUM(RVV_REQ_Zvksh)
 };
diff --git a/clang/lib/Sema/SemaRISCVVectorLookup.cpp 
b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
index ae584dc68719901..cf5c074761e017e 100644
--- a/clang/lib/Sema/SemaRISCVVectorLookup.cpp
+++ b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
@@ -211,6 +211,7 @@ void RISCVIntrinsicManagerImpl::ConstructRVVIntrinsics(
   {"experimental-zvkg", RVV_REQ_Zvkg},
   {"experimental-zvkned", RVV_REQ_Zvkned},
   {"experimental-zvknha", RVV_REQ_Zvknha},
+  {"experimental-zvknhb", RVV_REQ_Zvknhb},
   {"experimental-zvksed", RVV_REQ_Zvksed},
   {"experimental-zvksh", RVV_REQ_Zvksh}};
 
diff --git a/clang/test/Sema/zvk-invalid-zvknha.c 
b/clang/test/Sema/zvk-invalid-zvknha.c
new file mode 100644
index 000..0ce2e321a175f5f
--- /dev/null
+++ b/clang/test/Sema/zvk-invalid-zvknha.c
@@ -0,0 +1,11 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -target-feature +v -target-feature 
+experimental-zvknha %s -fsyntax-only -verify
+
+#include 
+
+void test_zvk_features() {
+  // zvknhb
+  __riscv_vsha2ch_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ch_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2cl_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2cl_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2ms_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ms_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+}
diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp 
b/clang/utils/TableGen/RISCVVEmitter.cpp
index 41025926058ed07..368136208d9a751 100644
--- a/clang/utils/TableGen/RISCVVEmitter.cpp
+++ b/clang/utils/TableGen/RISCVVEmitter.cpp
@@ -662,6 +662,7 @@ void RVVEmitter::createRVVIntrinsics(
   .Case("Zvkg", RVV_REQ_Zvkg)
   .Case("Zvkned", RVV_REQ_Zvkned)
   .Case("Zvknha", RVV_REQ_Zvknha)
+  .Case("Zvknhb", RVV_REQ_Zvknhb)
   .Case("Zvksed", RVV_REQ_Zvksed)
   .Case("Zvksh", RVV_REQ_Zvksh)
   .De

[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-10 Thread Brandon Wu via cfe-commits


@@ -1013,7 +1013,6 @@ static const char *ImpliedExtsZvfhmin[] = {"zve32f"};
 static const char *ImpliedExtsZvkn[] = {"zvkb", "zvkned", "zvknhb", "zvkt"};
 static const char *ImpliedExtsZvknc[] = {"zvbc", "zvkn"};
 static const char *ImpliedExtsZvkng[] = {"zvkg", "zvkn"};
-static const char *ImpliedExtsZvknhb[] = {"zvknha"};

4vtomat wrote:

Oh I missed it, thanks!

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-05 Thread Craig Topper via cfe-commits

https://github.com/topperc requested changes to this pull request.


https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-05 Thread Craig Topper via cfe-commits


@@ -1013,7 +1013,6 @@ static const char *ImpliedExtsZvfhmin[] = {"zve32f"};
 static const char *ImpliedExtsZvkn[] = {"zvkb", "zvkned", "zvknhb", "zvkt"};
 static const char *ImpliedExtsZvknc[] = {"zvbc", "zvkn"};
 static const char *ImpliedExtsZvkng[] = {"zvkg", "zvkn"};
-static const char *ImpliedExtsZvknhb[] = {"zvknha"};

topperc wrote:

Do we need to change this to imply zve64x to match RISCV.td

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-05 Thread Craig Topper via cfe-commits

https://github.com/topperc edited 
https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-05 Thread Craig Topper via cfe-commits

https://github.com/topperc approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-10-05 Thread Brandon Wu via cfe-commits

4vtomat wrote:

ping

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-21 Thread Brandon Wu via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

4vtomat wrote:

My colleague just show me the 
[spec](https://github.com/riscv/riscv-crypto/blob/main/doc/vector/riscv-crypto-spec-vector.adoc#1-extensions-overview)
 has mentioned: "The 
[Zvknhb](https://github.com/llvm/llvm-project/pull/66860#zvknh) and 
[[zvbc]](https://github.com/llvm/llvm-project/pull/66860#zvbc) Vector Crypto 
Extensions --and accordingly the composite extensions 
[[Zvkn]](https://github.com/llvm/llvm-project/pull/66860#Zvkn) and 
[[Zvks]](https://github.com/llvm/llvm-project/pull/66860#Zvks)-- require a 
Zve64x base, or application ("V") base Vector Extension."
so I think those checks should be moved to **ImpliedExts***.


https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat resolved 
https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat updated 
https://github.com/llvm/llvm-project/pull/66860

>From 3c28f7bace91dc4edd5e87b9f1a36d100cf38318 Mon Sep 17 00:00:00 2001
From: 4vtomat 
Date: Tue, 19 Sep 2023 23:06:01 -0700
Subject: [PATCH 1/2] [RISCV] Fix wrong implication for zvknhb.

---
 clang/include/clang/Basic/riscv_vector.td|  9 -
 .../include/clang/Support/RISCVVIntrinsicUtils.h |  5 +++--
 clang/lib/Sema/SemaRISCVVectorLookup.cpp |  1 +
 clang/test/Sema/zvk-invalid-zvknha.c | 11 +++
 clang/utils/TableGen/RISCVVEmitter.cpp   |  1 +
 llvm/lib/Support/RISCVISAInfo.cpp|  2 --
 llvm/lib/Target/RISCV/RISCVFeatures.td   | 16 +++-
 llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td   | 16 +++-
 llvm/test/CodeGen/RISCV/attributes.ll| 16 
 llvm/test/CodeGen/RISCV/rvv/vsha2ch.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2cl.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2ms.ll   |  6 ++
 llvm/test/MC/RISCV/attribute-arch.s  |  8 
 llvm/test/MC/RISCV/rvv/zvknh.s   |  6 +++---
 14 files changed, 79 insertions(+), 30 deletions(-)
 create mode 100644 clang/test/Sema/zvk-invalid-zvknha.c

diff --git a/clang/include/clang/Basic/riscv_vector.td 
b/clang/include/clang/Basic/riscv_vector.td
index 60a1a2b2be6fb40..8d9c4237e59bf9f 100644
--- a/clang/include/clang/Basic/riscv_vector.td
+++ b/clang/include/clang/Basic/riscv_vector.td
@@ -2997,8 +2997,15 @@ let UnMaskedPolicyScheme = HasPolicyOperand, HasMasked = 
false in {
 defm vaesz   : RVVOutBuiltinSetZvk;
   }
 
-  // zvknha or zvknhb
+  // zvknha
   let RequiredFeatures = ["Zvknha"] in {
+defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"i">;
+  }
+
+  // zvknhb
+  let RequiredFeatures = ["Zvknhb"] in {
 defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"il">;
diff --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h 
b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
index 8ba57d77221dc52..b703259a777ec85 100644
--- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -491,8 +491,9 @@ enum RVVRequire : uint16_t {
   RVV_REQ_Zvkg = 1 << 6,
   RVV_REQ_Zvkned = 1 << 7,
   RVV_REQ_Zvknha = 1 << 8,
-  RVV_REQ_Zvksed = 1 << 9,
-  RVV_REQ_Zvksh = 1 << 10,
+  RVV_REQ_Zvknhb = 1 << 9,
+  RVV_REQ_Zvksed = 1 << 10,
+  RVV_REQ_Zvksh = 1 << 11,
 
   LLVM_MARK_AS_BITMASK_ENUM(RVV_REQ_Zvksh)
 };
diff --git a/clang/lib/Sema/SemaRISCVVectorLookup.cpp 
b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
index ae584dc68719901..cf5c074761e017e 100644
--- a/clang/lib/Sema/SemaRISCVVectorLookup.cpp
+++ b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
@@ -211,6 +211,7 @@ void RISCVIntrinsicManagerImpl::ConstructRVVIntrinsics(
   {"experimental-zvkg", RVV_REQ_Zvkg},
   {"experimental-zvkned", RVV_REQ_Zvkned},
   {"experimental-zvknha", RVV_REQ_Zvknha},
+  {"experimental-zvknhb", RVV_REQ_Zvknhb},
   {"experimental-zvksed", RVV_REQ_Zvksed},
   {"experimental-zvksh", RVV_REQ_Zvksh}};
 
diff --git a/clang/test/Sema/zvk-invalid-zvknha.c 
b/clang/test/Sema/zvk-invalid-zvknha.c
new file mode 100644
index 000..0ce2e321a175f5f
--- /dev/null
+++ b/clang/test/Sema/zvk-invalid-zvknha.c
@@ -0,0 +1,11 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -target-feature +v -target-feature 
+experimental-zvknha %s -fsyntax-only -verify
+
+#include 
+
+void test_zvk_features() {
+  // zvknhb
+  __riscv_vsha2ch_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ch_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2cl_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2cl_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2ms_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ms_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+}
diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp 
b/clang/utils/TableGen/RISCVVEmitter.cpp
index 41025926058ed07..368136208d9a751 100644
--- a/clang/utils/TableGen/RISCVVEmitter.cpp
+++ b/clang/utils/TableGen/RISCVVEmitter.cpp
@@ -662,6 +662,7 @@ void RVVEmitter::createRVVIntrinsics(
   .Case("Zvkg", RVV_REQ_Zvkg)
   .Case("Zvkned", RVV_REQ_Zvkned)
   .Case("Zvknha", RVV_REQ_Zvknha)
+  .Case("Zvknhb", RVV_REQ_Zvknhb)
   .Case("Zvksed", RVV_REQ_Zvksed)
   .Case("Zvksh", RVV_REQ_Zvksh)
   .De

[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

4vtomat wrote:

Sure, maybe I can ask Nicolas directly, but maybe it should be handle in 
another patch.

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Craig Topper via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

topperc wrote:

maybe we should ask for clarification in https://github.com/riscv/riscv-crypto

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

4vtomat wrote:

And I should also remove these 
[checks](https://github.com/llvm/llvm-project/blob/69074bf144c1bf54040d289584e3d1d54f883a37/llvm/lib/Support/RISCVISAInfo.cpp#L940C1-L940C1)
 and add them to **ImpliedExts***?

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Craig Topper via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

topperc wrote:

> If so, why should the check like this exist?
> 
> https://github.com/llvm/llvm-project/blob/69074bf144c1bf54040d289584e3d1d54f883a37/llvm/lib/Support/RISCVISAInfo.cpp#L935

That's a good question. That one is weird because Zve32x implies Zvl32b, but 
Zvl32b requires at least Zve32x. So they're mutually dependent.

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat unresolved 
https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

4vtomat wrote:

If so, why should the check like this exist?
https://github.com/llvm/llvm-project/blob/69074bf144c1bf54040d289584e3d1d54f883a37/llvm/lib/Support/RISCVISAInfo.cpp#L935

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Craig Topper via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

topperc wrote:

I think "requires" might mean "implies". This keeps happening with different 
extensions. Here's one example 
https://github.com/riscv/riscv-v-spec/issues/723#issuecomment-922153867

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat resolved 
https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits

4vtomat wrote:

no change, just to re-trigger checks.

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat updated 
https://github.com/llvm/llvm-project/pull/66860

>From 3c28f7bace91dc4edd5e87b9f1a36d100cf38318 Mon Sep 17 00:00:00 2001
From: 4vtomat 
Date: Tue, 19 Sep 2023 23:06:01 -0700
Subject: [PATCH] [RISCV] Fix wrong implication for zvknhb.

---
 clang/include/clang/Basic/riscv_vector.td|  9 -
 .../include/clang/Support/RISCVVIntrinsicUtils.h |  5 +++--
 clang/lib/Sema/SemaRISCVVectorLookup.cpp |  1 +
 clang/test/Sema/zvk-invalid-zvknha.c | 11 +++
 clang/utils/TableGen/RISCVVEmitter.cpp   |  1 +
 llvm/lib/Support/RISCVISAInfo.cpp|  2 --
 llvm/lib/Target/RISCV/RISCVFeatures.td   | 16 +++-
 llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td   | 16 +++-
 llvm/test/CodeGen/RISCV/attributes.ll| 16 
 llvm/test/CodeGen/RISCV/rvv/vsha2ch.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2cl.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2ms.ll   |  6 ++
 llvm/test/MC/RISCV/attribute-arch.s  |  8 
 llvm/test/MC/RISCV/rvv/zvknh.s   |  6 +++---
 14 files changed, 79 insertions(+), 30 deletions(-)
 create mode 100644 clang/test/Sema/zvk-invalid-zvknha.c

diff --git a/clang/include/clang/Basic/riscv_vector.td 
b/clang/include/clang/Basic/riscv_vector.td
index 60a1a2b2be6fb40..8d9c4237e59bf9f 100644
--- a/clang/include/clang/Basic/riscv_vector.td
+++ b/clang/include/clang/Basic/riscv_vector.td
@@ -2997,8 +2997,15 @@ let UnMaskedPolicyScheme = HasPolicyOperand, HasMasked = 
false in {
 defm vaesz   : RVVOutBuiltinSetZvk;
   }
 
-  // zvknha or zvknhb
+  // zvknha
   let RequiredFeatures = ["Zvknha"] in {
+defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"i">;
+  }
+
+  // zvknhb
+  let RequiredFeatures = ["Zvknhb"] in {
 defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"il">;
diff --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h 
b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
index 8ba57d77221dc52..b703259a777ec85 100644
--- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -491,8 +491,9 @@ enum RVVRequire : uint16_t {
   RVV_REQ_Zvkg = 1 << 6,
   RVV_REQ_Zvkned = 1 << 7,
   RVV_REQ_Zvknha = 1 << 8,
-  RVV_REQ_Zvksed = 1 << 9,
-  RVV_REQ_Zvksh = 1 << 10,
+  RVV_REQ_Zvknhb = 1 << 9,
+  RVV_REQ_Zvksed = 1 << 10,
+  RVV_REQ_Zvksh = 1 << 11,
 
   LLVM_MARK_AS_BITMASK_ENUM(RVV_REQ_Zvksh)
 };
diff --git a/clang/lib/Sema/SemaRISCVVectorLookup.cpp 
b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
index ae584dc68719901..cf5c074761e017e 100644
--- a/clang/lib/Sema/SemaRISCVVectorLookup.cpp
+++ b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
@@ -211,6 +211,7 @@ void RISCVIntrinsicManagerImpl::ConstructRVVIntrinsics(
   {"experimental-zvkg", RVV_REQ_Zvkg},
   {"experimental-zvkned", RVV_REQ_Zvkned},
   {"experimental-zvknha", RVV_REQ_Zvknha},
+  {"experimental-zvknhb", RVV_REQ_Zvknhb},
   {"experimental-zvksed", RVV_REQ_Zvksed},
   {"experimental-zvksh", RVV_REQ_Zvksh}};
 
diff --git a/clang/test/Sema/zvk-invalid-zvknha.c 
b/clang/test/Sema/zvk-invalid-zvknha.c
new file mode 100644
index 000..0ce2e321a175f5f
--- /dev/null
+++ b/clang/test/Sema/zvk-invalid-zvknha.c
@@ -0,0 +1,11 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -target-feature +v -target-feature 
+experimental-zvknha %s -fsyntax-only -verify
+
+#include 
+
+void test_zvk_features() {
+  // zvknhb
+  __riscv_vsha2ch_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ch_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2cl_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2cl_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2ms_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ms_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+}
diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp 
b/clang/utils/TableGen/RISCVVEmitter.cpp
index 41025926058ed07..368136208d9a751 100644
--- a/clang/utils/TableGen/RISCVVEmitter.cpp
+++ b/clang/utils/TableGen/RISCVVEmitter.cpp
@@ -662,6 +662,7 @@ void RVVEmitter::createRVVIntrinsics(
   .Case("Zvkg", RVV_REQ_Zvkg)
   .Case("Zvkned", RVV_REQ_Zvkned)
   .Case("Zvknha", RVV_REQ_Zvknha)
+  .Case("Zvknhb", RVV_REQ_Zvknhb)
   .Case("Zvksed", RVV_REQ_Zvksed)
   .Case("Zvksh", RVV_REQ_Zvksh)
   .Defaul

[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Brandon Wu via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

4vtomat wrote:

`Zvknhb` requires `Zve64x` but doesn't **imply** `Zvk64x lol~

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-20 Thread Jianjian Guan via cfe-commits


@@ -599,15 +599,21 @@ def HasStdExtZvkned : 
Predicate<"Subtarget->hasStdExtZvkned()">,
 def FeatureStdExtZvknha
 : SubtargetFeature<"experimental-zvknha", "HasStdExtZvknha", "true",
"'Zvknha' (Vector SHA-2 (SHA-256 only))">;
-
-def FeatureStdExtZvknhb
-: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
-   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))",
-   [FeatureStdExtZvknha]>;
 def HasStdExtZvknha : Predicate<"Subtarget->hasStdExtZvknha()">,
 AssemblerPredicate<(all_of 
FeatureStdExtZvknha),
 "'Zvknha' (Vector SHA-2 (SHA-256 only))">;
 
+def FeatureStdExtZvknhb
+: SubtargetFeature<"experimental-zvknhb", "HasStdExtZvknhb", "true",
+   "'Zvknhb' (Vector SHA-2 (SHA-256 and SHA-512))">;

jacquesguan wrote:

I think that Zvknhb requires Zve64x

https://github.com/llvm/llvm-project/pull/66860
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [RISCV] Fix wrong implication for zvknhb. (PR #66860)

2023-09-19 Thread Brandon Wu via cfe-commits

https://github.com/4vtomat created 
https://github.com/llvm/llvm-project/pull/66860

None

>From 041da389550eeb7865a91b8b0e723a04ed2f84e1 Mon Sep 17 00:00:00 2001
From: 4vtomat 
Date: Tue, 19 Sep 2023 23:06:01 -0700
Subject: [PATCH] [RISCV] Fix wrong implication for zvknhb.

---
 clang/include/clang/Basic/riscv_vector.td|  9 -
 .../include/clang/Support/RISCVVIntrinsicUtils.h |  5 +++--
 clang/lib/Sema/SemaRISCVVectorLookup.cpp |  1 +
 clang/test/Sema/zvk-invalid-zvknha.c | 11 +++
 clang/utils/TableGen/RISCVVEmitter.cpp   |  1 +
 llvm/lib/Support/RISCVISAInfo.cpp|  2 --
 llvm/lib/Target/RISCV/RISCVFeatures.td   | 16 +++-
 llvm/lib/Target/RISCV/RISCVInstrInfoZvk.td   | 16 +++-
 llvm/test/CodeGen/RISCV/attributes.ll| 16 
 llvm/test/CodeGen/RISCV/rvv/vsha2ch.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2cl.ll   |  6 ++
 llvm/test/CodeGen/RISCV/rvv/vsha2ms.ll   |  6 ++
 llvm/test/MC/RISCV/attribute-arch.s  |  8 
 llvm/test/MC/RISCV/rvv/zvknh.s   |  6 +++---
 14 files changed, 79 insertions(+), 30 deletions(-)
 create mode 100644 clang/test/Sema/zvk-invalid-zvknha.c

diff --git a/clang/include/clang/Basic/riscv_vector.td 
b/clang/include/clang/Basic/riscv_vector.td
index 60a1a2b2be6fb40..8d9c4237e59bf9f 100644
--- a/clang/include/clang/Basic/riscv_vector.td
+++ b/clang/include/clang/Basic/riscv_vector.td
@@ -2997,8 +2997,15 @@ let UnMaskedPolicyScheme = HasPolicyOperand, HasMasked = 
false in {
 defm vaesz   : RVVOutBuiltinSetZvk;
   }
 
-  // zvknha or zvknhb
+  // zvknha
   let RequiredFeatures = ["Zvknha"] in {
+defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"i">;
+defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"i">;
+  }
+
+  // zvknhb
+  let RequiredFeatures = ["Zvknhb"] in {
 defm vsha2ch : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2cl : RVVOutOp2BuiltinSetVVZvk<"il">;
 defm vsha2ms : RVVOutOp2BuiltinSetVVZvk<"il">;
diff --git a/clang/include/clang/Support/RISCVVIntrinsicUtils.h 
b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
index 8ba57d77221dc52..b703259a777ec85 100644
--- a/clang/include/clang/Support/RISCVVIntrinsicUtils.h
+++ b/clang/include/clang/Support/RISCVVIntrinsicUtils.h
@@ -491,8 +491,9 @@ enum RVVRequire : uint16_t {
   RVV_REQ_Zvkg = 1 << 6,
   RVV_REQ_Zvkned = 1 << 7,
   RVV_REQ_Zvknha = 1 << 8,
-  RVV_REQ_Zvksed = 1 << 9,
-  RVV_REQ_Zvksh = 1 << 10,
+  RVV_REQ_Zvknhb = 1 << 9,
+  RVV_REQ_Zvksed = 1 << 10,
+  RVV_REQ_Zvksh = 1 << 11,
 
   LLVM_MARK_AS_BITMASK_ENUM(RVV_REQ_Zvksh)
 };
diff --git a/clang/lib/Sema/SemaRISCVVectorLookup.cpp 
b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
index ae584dc68719901..cf5c074761e017e 100644
--- a/clang/lib/Sema/SemaRISCVVectorLookup.cpp
+++ b/clang/lib/Sema/SemaRISCVVectorLookup.cpp
@@ -211,6 +211,7 @@ void RISCVIntrinsicManagerImpl::ConstructRVVIntrinsics(
   {"experimental-zvkg", RVV_REQ_Zvkg},
   {"experimental-zvkned", RVV_REQ_Zvkned},
   {"experimental-zvknha", RVV_REQ_Zvknha},
+  {"experimental-zvknhb", RVV_REQ_Zvknhb},
   {"experimental-zvksed", RVV_REQ_Zvksed},
   {"experimental-zvksh", RVV_REQ_Zvksh}};
 
diff --git a/clang/test/Sema/zvk-invalid-zvknha.c 
b/clang/test/Sema/zvk-invalid-zvknha.c
new file mode 100644
index 000..0ce2e321a175f5f
--- /dev/null
+++ b/clang/test/Sema/zvk-invalid-zvknha.c
@@ -0,0 +1,11 @@
+// REQUIRES: riscv-registered-target
+// RUN: %clang_cc1 -triple riscv64 -target-feature +v -target-feature 
+experimental-zvknha %s -fsyntax-only -verify
+
+#include 
+
+void test_zvk_features() {
+  // zvknhb
+  __riscv_vsha2ch_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ch_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2cl_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2cl_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+  __riscv_vsha2ms_vv_u64m1(); // expected-error {{call to undeclared function 
'__riscv_vsha2ms_vv_u64m1'; ISO C99 and later do not support implicit function 
declarations}}
+}
diff --git a/clang/utils/TableGen/RISCVVEmitter.cpp 
b/clang/utils/TableGen/RISCVVEmitter.cpp
index 41025926058ed07..368136208d9a751 100644
--- a/clang/utils/TableGen/RISCVVEmitter.cpp
+++ b/clang/utils/TableGen/RISCVVEmitter.cpp
@@ -662,6 +662,7 @@ void RVVEmitter::createRVVIntrinsics(
   .Case("Zvkg", RVV_REQ_Zvkg)
   .Case("Zvkned", RVV_REQ_Zvkned)
   .Case("Zvknha", RVV_REQ_Zvknha)
+  .Case("Zvknhb", RVV_REQ_Zvknhb)
   .Case("Zvksed", RVV_REQ_Zvksed)
   .Case("Zvksh", RVV_REQ_Zvksh)
   .