[PATCH] D98848: [RISCV][Clang] Add RVV Vector Indexed Load intrinsic functions.
Craig Topper via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 22 15:40:54 PDT 2021
craig.topper added inline comments.
================
Comment at: clang/include/clang/Basic/riscv_vector.td:90
+// equivalent integer vector type with EEW and corresponding ELMUL (elmul =
+// (eew/sew) * lmul). Fore example, vector type is __rvv_float16m4
+// (SEW=16, LMUL=4) and Log2EEW is 3 (EEW=8), and then equivalent vector
----------------
Fore -> For
================
Comment at: clang/include/clang/Basic/riscv_vector.td:93
+// type is __rvv_uint8m2_t (elmul=(8/16)*4 = 2). Ignore to define a new
+// builtins if its qeuivalent type has illegal lmul.
//
----------------
equivalent*
================
Comment at: clang/utils/TableGen/RISCVVEmitter.cpp:95
+ const std::string &getShortStr() {
+ if (ShortStr.empty())
+ initShortStr();
----------------
Why would it be empty? Don't we call initShortStr in the constructor? This at least needs a comment explaining why it is different than the other get*Str functions.
================
Comment at: clang/utils/TableGen/RISCVVEmitter.cpp:621
+ // Extract and compute complex type transformer. It can only appear one time.
+ const Regex ComplexEx("\\((.*:.*)\\).*");
+ SmallVector<StringRef> Matches;
----------------
Do we really need a regex here? Can't we just check that it starts with '(' and then do a find for the ')'?
================
Comment at: clang/utils/TableGen/RISCVVEmitter.cpp:626
+ "only allow one complex type transformer");
+ Transformer.consume_front(Twine("(" + Matches[1] + ")").str());
+ auto UpdateAndCheckComplexProto = [&]() {
----------------
Can we do
```
Transformer = Transformer.drop_front(Matches[1].size() + 2);
```
================
Comment at: clang/utils/TableGen/RISCVVEmitter.cpp:1011
+ size_t Idx = 0;
+ // Bypass complex prototype because it could have primitive type
+ // char.
----------------
I'd write this as "Skip over complex prototype because it could contain primitive type character."
================
Comment at: clang/utils/TableGen/RISCVVEmitter.cpp:1026
+ parsePrototypes(Prototypes, SuffixStrs,
+ [&](StringRef Proto, SmallVector<std::string> &Result) {
+ auto T = computeType(Type, Log2LMUL, Proto);
----------------
You don't need to pass SuffixStrs into parsePrototypes you can just capture it in the lambda and use SuffixStrs.push_back() in the lambda.
================
Comment at: clang/utils/TableGen/RISCVVEmitter.cpp:1066
+ parsePrototypes(Prototypes, ProtoSeq,
+ [](StringRef Proto, SmallVector<std::string> &Result) {
+ Result.push_back(Proto.str());
----------------
Just capture ProtoSeq in the lambda capture list and use ProtoSeq.push_back in the body.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D98848/new/
https://reviews.llvm.org/D98848
More information about the cfe-commits
mailing list