[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-18 Thread Nikita Popov via cfe-commits

nikic wrote:

When building clang with clang, the regression on SemaChecking.cpp is now 
"only" 60% in terms of instructions retired (plus 0.4% during thin link, which 
is another ~50% in terms of SemaChecking).

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-18 Thread Sam Tebbs via cfe-commits

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-18 Thread Sam Tebbs via cfe-commits

SamTebbs33 wrote:

@nico I tried to cherry-pick your commit 
(c60663d128f8e0dccd418bdf16ecc403b96aa74a)  into my branch but for some reason 
it was always empty. It might be best for you to try recommitting it now.

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-15 Thread Sander de Smalen via cfe-commits

https://github.com/sdesmalen-arm approved this pull request.

Assuming the tests pass after changing `BuiltinType` to a `std::optional`, the 
patch looks fine to me.

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-15 Thread Sam Tebbs via cfe-commits


@@ -1702,6 +1705,62 @@ void SVEEmitter::createSMERangeChecks(raw_ostream ) {
   OS << "#endif\n\n";
 }
 
+void SVEEmitter::createStreamingAttrs(raw_ostream , ACLEKind Kind) {
+  std::vector RV = Records.getAllDerivedDefinitions("Inst");
+  SmallVector, 128> Defs;
+  for (auto *R : RV)
+createIntrinsic(R, Defs);
+
+  // The mappings must be sorted based on BuiltinID.
+  llvm::sort(Defs, [](const std::unique_ptr ,
+  const std::unique_ptr ) {
+return A->getMangledName() < B->getMangledName();
+  });
+
+  StringRef ExtensionKind;
+  switch (Kind) {
+  case ACLEKind::SME:
+ExtensionKind = "SME";
+break;
+  case ACLEKind::SVE:
+ExtensionKind = "SVE";
+break;
+  }
+
+  OS << "#ifdef GET_" << ExtensionKind << "_STREAMING_ATTRS\n";
+
+  // Ensure these are only emitted once.
+  std::set Emitted;
+  llvm::StringMap> StreamingMap;

SamTebbs33 wrote:

Thanks for the ideas. I ended up removing the sorting since grouping the 
builtins within the map makes the sorting across all builtins redundant anyway.

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-15 Thread Momchil Velikov via cfe-commits


@@ -1702,6 +1705,62 @@ void SVEEmitter::createSMERangeChecks(raw_ostream ) {
   OS << "#endif\n\n";
 }
 
+void SVEEmitter::createStreamingAttrs(raw_ostream , ACLEKind Kind) {
+  std::vector RV = Records.getAllDerivedDefinitions("Inst");
+  SmallVector, 128> Defs;
+  for (auto *R : RV)
+createIntrinsic(R, Defs);
+
+  // The mappings must be sorted based on BuiltinID.
+  llvm::sort(Defs, [](const std::unique_ptr ,
+  const std::unique_ptr ) {
+return A->getMangledName() < B->getMangledName();
+  });
+
+  StringRef ExtensionKind;
+  switch (Kind) {
+  case ACLEKind::SME:
+ExtensionKind = "SME";
+break;
+  case ACLEKind::SVE:
+ExtensionKind = "SVE";
+break;
+  }
+
+  OS << "#ifdef GET_" << ExtensionKind << "_STREAMING_ATTRS\n";
+
+  // Ensure these are only emitted once.
+  std::set Emitted;
+  llvm::StringMap> StreamingMap;

momchil-velikov wrote:

I'd suggest not using `std::set` at all, sort it like it's done now and use 
`DenseSet`

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-15 Thread Sander de Smalen via cfe-commits


@@ -1702,6 +1705,62 @@ void SVEEmitter::createSMERangeChecks(raw_ostream ) {
   OS << "#endif\n\n";
 }
 
+void SVEEmitter::createStreamingAttrs(raw_ostream , ACLEKind Kind) {
+  std::vector RV = Records.getAllDerivedDefinitions("Inst");
+  SmallVector, 128> Defs;
+  for (auto *R : RV)
+createIntrinsic(R, Defs);
+
+  // The mappings must be sorted based on BuiltinID.
+  llvm::sort(Defs, [](const std::unique_ptr ,
+  const std::unique_ptr ) {
+return A->getMangledName() < B->getMangledName();
+  });
+
+  StringRef ExtensionKind;
+  switch (Kind) {
+  case ACLEKind::SME:
+ExtensionKind = "SME";
+break;
+  case ACLEKind::SVE:
+ExtensionKind = "SVE";
+break;
+  }
+
+  OS << "#ifdef GET_" << ExtensionKind << "_STREAMING_ATTRS\n";
+
+  // Ensure these are only emitted once.
+  std::set Emitted;
+  llvm::StringMap> StreamingMap;

sdesmalen-arm wrote:

If you're using a `std::set` here, there is no need for sorting the Defs and 
also no need for `std::set<..> Emitted`

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-15 Thread Sander de Smalen via cfe-commits

sdesmalen-arm wrote:

> > If it's not too much trouble, could you `git cherry-pick 
> > c60663d128f8e0dccd418bdf16ecc403b96aa74a` into this? (Cool if not, ofc.)
> 
> Sure, I can do that. Would you also mind attempting to reproduce the compile 
> time with the latest commit, just to make sure it fixes the issue on your 
> end? I saw a 36 -> 31 second (compared to 30 on main) decrease which seems OK 
> but isn't on the same scale as the numbers you're seeing.

FWIW, on my machine (using -O3) compile time of SemaChecking.cpp goes from 25s 
(before this patch) -> 25.4s (after this patch), whereas before I saw a similar 
order of magnitude slowdown as @nico.

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-15 Thread Sam Tebbs via cfe-commits

SamTebbs33 wrote:

> If it's not too much trouble, could you `git cherry-pick 
> c60663d128f8e0dccd418bdf16ecc403b96aa74a` into this? (Cool if not, ofc.)

Sure, I can do that. Would you also mind attempting to reproduce the compile 
time with the latest commit, just to make sure it fixes the issue on your end? 
I saw a 36 -> 31 second (compared to 30 on main) decrease which seems OK but 
isn't on the same scale as the numbers you're seeing.

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-14 Thread Nico Weber via cfe-commits

nico wrote:

If it's not too much trouble, could you `git cherry-pick 
c60663d128f8e0dccd418bdf16ecc403b96aa74a` into this? (Cool if not, ofc.)

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-14 Thread via cfe-commits

github-actions[bot] wrote:




:warning: C/C++ code formatter, clang-format found issues in your code. 
:warning:



You can test this locally with the following command:


``bash
git-clang-format --diff 2952bc3384412ca67fd1dcd2eac595088d692802 
6dc8fa2c89159d234d9477358dd1ce1cbf059865 -- clang/include/clang/Sema/Sema.h 
clang/lib/Sema/SemaChecking.cpp 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za32.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_read.c 
clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_write.c 
clang/test/Sema/aarch64-incompat-sm-builtin-calls.c 
clang/test/Sema/aarch64-sme-intrinsics/acle_sme_imm.cpp 
clang/test/Sema/aarch64-sme-intrinsics/acle_sme_target.c 
clang/utils/TableGen/NeonEmitter.cpp clang/utils/TableGen/SveEmitter.cpp 
clang/utils/TableGen/TableGen.cpp clang/utils/TableGen/TableGenBackends.h
``





View the diff from clang-format here.


``diff
diff --git a/clang/utils/TableGen/TableGen.cpp 
b/clang/utils/TableGen/TableGen.cpp
index 9043d90d7c..24f4676557 100644
--- a/clang/utils/TableGen/TableGen.cpp
+++ b/clang/utils/TableGen/TableGen.cpp
@@ -288,11 +288,14 @@ cl::opt Action(
"Generate riscv_vector_builtin_cg.inc for clang"),
 clEnumValN(GenRISCVVectorBuiltinSema, "gen-riscv-vector-builtin-sema",
"Generate riscv_vector_builtin_sema.inc for clang"),
-clEnumValN(GenRISCVSiFiveVectorBuiltins, 
"gen-riscv-sifive-vector-builtins",
+clEnumValN(GenRISCVSiFiveVectorBuiltins,
+   "gen-riscv-sifive-vector-builtins",
"Generate riscv_sifive_vector_builtins.inc for clang"),
-clEnumValN(GenRISCVSiFiveVectorBuiltinCG, 
"gen-riscv-sifive-vector-builtin-codegen",
+clEnumValN(GenRISCVSiFiveVectorBuiltinCG,
+   "gen-riscv-sifive-vector-builtin-codegen",
"Generate riscv_sifive_vector_builtin_cg.inc for clang"),
-clEnumValN(GenRISCVSiFiveVectorBuiltinSema, 
"gen-riscv-sifive-vector-builtin-sema",
+clEnumValN(GenRISCVSiFiveVectorBuiltinSema,
+   "gen-riscv-sifive-vector-builtin-sema",
"Generate riscv_sifive_vector_builtin_sema.inc for clang"),
 clEnumValN(GenAttrDocs, "gen-attr-docs",
"Generate attribute documentation"),

``




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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-14 Thread Sam Tebbs via cfe-commits

SamTebbs33 wrote:

Commit 
[6dc8fa2](https://github.com/llvm/llvm-project/pull/75487/commits/6dc8fa2c89159d234d9477358dd1ce1cbf059865)
 is the only one with new content. 
[d9a8da1](https://github.com/llvm/llvm-project/pull/75487/commits/d9a8da139e93f0b3259cb22d7f4c55ed46f9f265)
 is the exact same as what was reverted.

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


[clang] [AArch64][SME] Warn when using a streaming builtin from a non-streaming function (PR #75487)

2023-12-14 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Sam Tebbs (SamTebbs33)


Changes

This PR adds a warning that's emitted when a non-streaming or 
non-streaming-compatible builtin is called in an unsuitable function.

Uses work by Kerry McLaughlin.

This is a re-upload of #74064 and fixes a compile time increase.


---

Patch is 308.99 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/75487.diff


19 Files Affected:

- (modified) clang/include/clang/Basic/CMakeLists.txt (+6) 
- (modified) clang/include/clang/Basic/arm_sve.td (+582-582) 
- (modified) clang/include/clang/Sema/Sema.h (+1) 
- (modified) clang/lib/Sema/SemaChecking.cpp (+47-4) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i32.c 
(+8-8) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_add-i64.c 
(+8-8) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za32.c 
(+7-7) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mopa-za64.c 
(+5-5) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za32.c 
(+7-7) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_mops-za64.c 
(+5-5) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_read.c (+96-96) 
- (modified) clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_write.c 
(+96-96) 
- (modified) clang/test/Sema/aarch64-incompat-sm-builtin-calls.c (+77) 
- (modified) clang/test/Sema/aarch64-sme-intrinsics/acle_sme_imm.cpp (+7-7) 
- (modified) clang/test/Sema/aarch64-sme-intrinsics/acle_sme_target.c (+5-4) 
- (modified) clang/utils/TableGen/NeonEmitter.cpp (+28) 
- (modified) clang/utils/TableGen/SveEmitter.cpp (+81) 
- (modified) clang/utils/TableGen/TableGen.cpp (+12) 
- (modified) clang/utils/TableGen/TableGenBackends.h (+2) 


``diff
diff --git a/clang/include/clang/Basic/CMakeLists.txt 
b/clang/include/clang/Basic/CMakeLists.txt
index 085e316fcc671d..73fd521aeeec31 100644
--- a/clang/include/clang/Basic/CMakeLists.txt
+++ b/clang/include/clang/Basic/CMakeLists.txt
@@ -88,6 +88,9 @@ clang_tablegen(arm_sve_typeflags.inc -gen-arm-sve-typeflags
 clang_tablegen(arm_sve_sema_rangechecks.inc -gen-arm-sve-sema-rangechecks
   SOURCE arm_sve.td
   TARGET ClangARMSveSemaRangeChecks)
+clang_tablegen(arm_sve_streaming_attrs.inc -gen-arm-sve-streaming-attrs
+  SOURCE arm_sve.td
+  TARGET ClangARMSveStreamingAttrs)
 clang_tablegen(arm_sme_builtins.inc -gen-arm-sme-builtins
   SOURCE arm_sme.td
   TARGET ClangARMSmeBuiltins)
@@ -97,6 +100,9 @@ clang_tablegen(arm_sme_builtin_cg.inc 
-gen-arm-sme-builtin-codegen
 clang_tablegen(arm_sme_sema_rangechecks.inc -gen-arm-sme-sema-rangechecks
   SOURCE arm_sme.td
   TARGET ClangARMSmeSemaRangeChecks)
+clang_tablegen(arm_sme_streaming_attrs.inc -gen-arm-sme-streaming-attrs
+  SOURCE arm_sme.td
+  TARGET ClangARMSmeStreamingAttrs)
 clang_tablegen(arm_cde_builtins.inc -gen-arm-cde-builtin-def
   SOURCE arm_cde.td
   TARGET ClangARMCdeBuiltinsDef)
diff --git a/clang/include/clang/Basic/arm_sve.td 
b/clang/include/clang/Basic/arm_sve.td
index db6f17d1c493af..3df77c931998f6 100644
--- a/clang/include/clang/Basic/arm_sve.td
+++ b/clang/include/clang/Basic/arm_sve.td
@@ -19,27 +19,27 @@ include "arm_sve_sme_incl.td"
 // Loads
 
 // Load one vector (scalar base)
-def SVLD1   : MInst<"svld1[_{2}]", "dPc", "csilUcUsUiUlhfd", [IsLoad], 
  MemEltTyDefault, "aarch64_sve_ld1">;
-def SVLD1SB : MInst<"svld1sb_{d}", "dPS", "silUsUiUl",   [IsLoad], 
  MemEltTyInt8,"aarch64_sve_ld1">;
-def SVLD1UB : MInst<"svld1ub_{d}", "dPW", "silUsUiUl",   [IsLoad, 
IsZExtReturn], MemEltTyInt8,"aarch64_sve_ld1">;
-def SVLD1SH : MInst<"svld1sh_{d}", "dPT", "ilUiUl",  [IsLoad], 
  MemEltTyInt16,   "aarch64_sve_ld1">;
-def SVLD1UH : MInst<"svld1uh_{d}", "dPX", "ilUiUl",  [IsLoad, 
IsZExtReturn], MemEltTyInt16,   "aarch64_sve_ld1">;
-def SVLD1SW : MInst<"svld1sw_{d}", "dPU", "lUl", [IsLoad], 
  MemEltTyInt32,   "aarch64_sve_ld1">;
-def SVLD1UW : MInst<"svld1uw_{d}", "dPY", "lUl", [IsLoad, 
IsZExtReturn], MemEltTyInt32,   "aarch64_sve_ld1">;
+def SVLD1   : MInst<"svld1[_{2}]", "dPc", "csilUcUsUiUlhfd", [IsLoad, 
IsStreamingCompatible],   MemEltTyDefault, "aarch64_sve_ld1">;
+def SVLD1SB : MInst<"svld1sb_{d}", "dPS", "silUsUiUl",   [IsLoad, 
IsStreamingCompatible],   MemEltTyInt8,"aarch64_sve_ld1">;
+def SVLD1UB : MInst<"svld1ub_{d}", "dPW", "silUsUiUl",   [IsLoad, 
IsZExtReturn, IsStreamingCompatible], MemEltTyInt8,"aarch64_sve_ld1">;
+def SVLD1SH : MInst<"svld1sh_{d}", "dPT", "ilUiUl",  [IsLoad, 
IsStreamingCompatible],   MemEltTyInt16,   "aarch64_sve_ld1">;
+def SVLD1UH : MInst<"svld1uh_{d}", "dPX", "ilUiUl",  [IsLoad, 
IsZExtReturn, IsStreamingCompatible], MemEltTyInt16,   "aarch64_sve_ld1">;
+def SVLD1SW : MInst<"svld1sw_{d}", "dPU", "lUl", [IsLoad,