[PATCH] D143364: [RISCV] Support scalar/fix-length vector NTLH intrinsic with different domain
    Craig Topper via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Tue Apr 11 12:14:17 PDT 2023
    
    
  
craig.topper added inline comments.
================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:19975
+    llvm::Type *ResTy = ConvertType(E->getType());
+    ConstantInt *Mode = llvm::cast<llvm::ConstantInt>(Ops[1]);
+
----------------
Is `llvm::` needed on the `cast`? I think cast is imported into the clang namespace.
================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:19975
+    llvm::Type *ResTy = ConvertType(E->getType());
+    ConstantInt *Mode = llvm::cast<llvm::ConstantInt>(Ops[1]);
+
----------------
craig.topper wrote:
> Is `llvm::` needed on the `cast`? I think cast is imported into the clang namespace.
You can drop llvm:: on ConstantInt in the cast since you didn't need it for the `ConstantInt *Mode` part.
================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:19990
+  case RISCV::BI__builtin_riscv_ntl_store: {
+    ConstantInt *Mode = llvm::cast<llvm::ConstantInt>(Ops[2]);
+
----------------
Same comments as above
================
Comment at: clang/lib/Headers/riscv_ntlh.h:24
+
+#define __riscv_ntl_load(PTR, DOMAIN) __builtin_riscv_ntl_load(PTR, DOMAIN)
+#define __riscv_ntl_store(PTR, VAL, DOMAIN)                                    \
----------------
Need parentheses around PTR and DOMAIN in the expansion.
```
#define __riscv_ntl_load(PTR, DOMAIN) __builtin_riscv_ntl_load((PTR), (DOMAIN))
```
================
Comment at: clang/lib/Headers/riscv_ntlh.h:26
+#define __riscv_ntl_store(PTR, VAL, DOMAIN)                                    \
+  __builtin_riscv_ntl_store(PTR, VAL, DOMAIN)
+
----------------
Same here
================
Comment at: clang/test/CodeGen/RISCV/ntlh-intrinsics/riscv32-zihintntl.c:115
+  __riscv_ntl_store(&d1, 1.0, __RISCV_NTLH_ALL);  // CHECK: store double{{.*}}align 8, !nontemporal !7
+
+}
----------------
Do we need to test vectors?
================
Comment at: clang/test/CodeGen/RISCV/ntlh-intrinsics/riscv32-zihintntl.c:119
+
+// CHECK: !4 = !{i32 2}
+// CHECK: !5 = !{i32 3}
----------------
There are multiple places in the LangRef that say the nontemporal node can only have value of 1.
```
The optional !nontemporal metadata must reference a single metadata name <nontemp_node> corresponding to a metadata node with one i32 entry of value 1.
```
At the very least those need to be updated.
================
Comment at: llvm/lib/Target/RISCV/RISCVInstrInfoZihintntl.td:14
 
-let hasSideEffects = 0, mayLoad = 0, mayStore = 0, Size = 4 in {
-  def PseudoNTLALL :  Pseudo<(outs), (ins), [], "ntl.all">, 
+let hasSideEffects = 0, mayLoad = 0, mayStore = 0, Size = 4, isCodeGenOnly = 1 in {
+  def PseudoNTLP1   :  Pseudo<(outs), (ins), [], "ntl.p1">, 
----------------
Doesn't Pseudo already set isCodeGenOnly=1?
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D143364/new/
https://reviews.llvm.org/D143364
    
    
More information about the llvm-commits
mailing list