[llvm] [InstCombine] optimize powi(X,Y) * X with Ofast (PR #69998)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 6 22:46:11 PST 2024


================
@@ -68,6 +68,22 @@ template <typename T> inline OneUse_match<T> m_OneUse(const T &SubPattern) {
   return SubPattern;
 }
 
+template <typename SubPattern_t> struct AllowReassoc_match {
+  SubPattern_t SubPattern;
+
+  AllowReassoc_match(const SubPattern_t &SP) : SubPattern(SP) {}
+
+  template <typename OpTy> bool match(OpTy *V) {
+    auto *I = dyn_cast<FPMathOperator>(V);
+    return I && I->hasAllowReassoc() && SubPattern.match(I);
+  }
+};
+
+template <typename T>
+inline AllowReassoc_match<T> m_AllowReassoc(const T &SubPattern) {
----------------
arsenm wrote:

This isn't quite the API I had in my mind. I envisioned the required flags as a template parameter to the existing matchers, so you could have something like: 
`m_FMul<Reassoc>(), m_Intrinsic<powi, Reassoc>`

However I wasn't expecting you to do anything for this in this patch. This is fine for now 


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


More information about the llvm-commits mailing list