[llvm] [InstSimplify] Add basic constant folding for `llvm.sincos` (PR #114527)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 22 11:10:44 PST 2024


================
@@ -3466,6 +3467,44 @@ ConstantFoldStructCall(StringRef Name, Intrinsic::ID IntrinsicID,
       return nullptr;
     return ConstantStruct::get(StTy, Result0, Result1);
   }
+  case Intrinsic::sincos: {
+    Type *Ty = StTy->getContainedType(0);
+    Type *TyScalar = Ty->getScalarType();
+
+    auto ConstantFoldScalarSincosCall =
+        [&](Constant *Op) -> std::pair<Constant *, Constant *> {
+      Constant *SinResult =
+          ConstantFoldScalarCall(Name, Intrinsic::sin, TyScalar, Op, TLI, Call);
+      if (!SinResult)
+        return {};
+      Constant *CosResult =
+          ConstantFoldScalarCall(Name, Intrinsic::cos, TyScalar, Op, TLI, Call);
+      if (!CosResult)
+        return {};
+      return std::make_pair(SinResult, CosResult);
+    };
+
+    if (auto *FVTy = dyn_cast<FixedVectorType>(Ty)) {
+      SmallVector<Constant *, 4> SinResults(FVTy->getNumElements());
+      SmallVector<Constant *, 4> CosResults(FVTy->getNumElements());
----------------
arsenm wrote:

Use the default small size? Or 8 is more common for vectors 

https://github.com/llvm/llvm-project/pull/114527


More information about the llvm-commits mailing list