[PATCH] D158522: [NFC][CLANG] Fix static analyzer bugs about large copy by values

Soumi Manna via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 22 08:44:54 PDT 2023


Manna created this revision.
Manna added reviewers: aaron.ballman, tahonermann.
Herald added subscribers: ctetreau, manas, ASDenysPetrov, dkrupp, donat.nagy, Szelethus, a.sidorin, baloghadamsoftware.
Herald added a project: All.
Manna requested review of this revision.
Herald added a project: clang.

Static Analyzer Tool complains about a large function call parameter which is is passed by value in CGBuiltin.cpp file.

1. In CodeGenFunction::​EmitSMELdrStr(clang::​SVETypeFlags, llvm::​SmallVectorImpl<llvm::​Value *> &, unsigned int): We are passing parameter TypeFlags of type clang::SVETypeFlags  by value.

2. In CodeGenFunction::​EmitSMEZero(clang::​SVETypeFlags, llvm::​SmallVectorImpl<llvm::​Value *> &, unsigned int): We are passing parameter TypeFlags of type clang::SVETypeFlags  by value.

3. In cCodeGenFunction::​EmitSMEReadWrite(clang::​SVETypeFlags, llvm::​SmallVectorImpl<llvm::​Value *> &, unsigned int): We are passing parameter TypeFlags of type clang::SVETypeFlags  by value.

4. In CodeGenFunction::​EmitSMELd1St1(clang::​SVETypeFlags, llvm::​SmallVectorImpl<llvm::​Value *> &, unsigned int): We are passing parameter TypeFlags of type clang::SVETypeFlags  by value.

I see many places in CGBuiltin.cpp file, we are passing parameter TypeFlags of type clang::SVETypeFlags by reference.

clang::SVETypeFlags inherits several other types: https://clang.llvm.org/doxygen/classclang_1_1SVETypeFlags-members.html

This patch passes parameter TypeFlags by reference instead of by value in the function.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D158522

Files:
  clang/lib/CodeGen/CGBuiltin.cpp


Index: clang/lib/CodeGen/CGBuiltin.cpp
===================================================================
--- clang/lib/CodeGen/CGBuiltin.cpp
+++ clang/lib/CodeGen/CGBuiltin.cpp
@@ -9515,7 +9515,7 @@
   return Builder.CreateAdd(Base, CastOffset, "tileslice");
 }
 
-Value *CodeGenFunction::EmitSMELd1St1(SVETypeFlags TypeFlags,
+Value *CodeGenFunction::EmitSMELd1St1(const SVETypeFlags &TypeFlags,
                                       SmallVectorImpl<Value *> &Ops,
                                       unsigned IntID) {
   Ops[3] = EmitSVEPredicateCast(
@@ -9545,7 +9545,7 @@
   return Builder.CreateCall(F, NewOps);
 }
 
-Value *CodeGenFunction::EmitSMEReadWrite(SVETypeFlags TypeFlags,
+Value *CodeGenFunction::EmitSMEReadWrite(const SVETypeFlags &TypeFlags,
                                          SmallVectorImpl<Value *> &Ops,
                                          unsigned IntID) {
   auto *VecTy = getSVEType(TypeFlags);
@@ -9562,7 +9562,7 @@
   return Builder.CreateCall(F, Ops);
 }
 
-Value *CodeGenFunction::EmitSMEZero(SVETypeFlags TypeFlags,
+Value *CodeGenFunction::EmitSMEZero(const SVETypeFlags &TypeFlags,
                                     SmallVectorImpl<Value *> &Ops,
                                     unsigned IntID) {
   // svzero_za() intrinsic zeros the entire za tile and has no paramters.
@@ -9572,7 +9572,7 @@
   return Builder.CreateCall(F, Ops);
 }
 
-Value *CodeGenFunction::EmitSMELdrStr(SVETypeFlags TypeFlags,
+Value *CodeGenFunction::EmitSMELdrStr(const SVETypeFlags &TypeFlags,
                                       SmallVectorImpl<Value *> &Ops,
                                       unsigned IntID) {
   Function *Cntsb = CGM.getIntrinsic(Intrinsic::aarch64_sme_cntsb);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158522.552383.patch
Type: text/x-patch
Size: 1726 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20230822/3626370c/attachment-0001.bin>


More information about the cfe-commits mailing list