[PATCH] D13994: [SimplifyLibCalls] Optimization for pow(x, n) where n is some constant

David Majnemer via llvm-commits llvm-commits at lists.llvm.org
Tue Nov 17 20:14:36 PST 2015


majnemer added inline comments.

================
Comment at: lib/Transforms/Utils/SimplifyLibCalls.cpp:1068-1069
@@ +1067,4 @@
+
+  Value *AddChain[33];
+  AddChain[1]  = pow1;
+  AddChain[2]  = B.CreateFMul(pow1, pow1);
----------------
Perhaps we should assert that `Exp != 0` ?

================
Comment at: lib/Transforms/Utils/SimplifyLibCalls.cpp:1088-1101
@@ +1087,16 @@
+  AddChain[19] = B.CreateFMul(AddChain[1],  AddChain[18]);
+  AddChain[20] = B.CreateFMul(AddChain[10], AddChain[10]);
+  AddChain[21] = B.CreateFMul(AddChain[6],  AddChain[15]);
+  AddChain[22] = B.CreateFMul(AddChain[11], AddChain[11]);
+  AddChain[23] = B.CreateFMul(AddChain[3],  AddChain[20]);
+  AddChain[24] = B.CreateFMul(AddChain[12], AddChain[12]);
+  AddChain[25] = B.CreateFMul(AddChain[8],  AddChain[17]);
+  AddChain[26] = B.CreateFMul(AddChain[13], AddChain[13]);
+  AddChain[27] = B.CreateFMul(AddChain[3],  AddChain[24]);
+  AddChain[28] = B.CreateFMul(AddChain[14], AddChain[14]);
+  AddChain[29] = B.CreateFMul(AddChain[4],  AddChain[25]);
+  AddChain[30] = B.CreateFMul(AddChain[15], AddChain[15]);
+  AddChain[31] = B.CreateFMul(AddChain[3],  AddChain[28]);
+  AddChain[32] = B.CreateFMul(AddChain[16], AddChain[16]);
+  return AddChain[Exp];
+}
----------------
You will end up creating unnecessary instructions if `Exp < 32`, please do not do this.

================
Comment at: test/Transforms/InstCombine/pow-4.ll:3
@@ +2,3 @@
+
+; RUN: opt -instcombine -S < %s | FileCheck %s --check-prefix=CHECK
+
----------------
You don't need --check-prefix=CHECK


http://reviews.llvm.org/D13994





More information about the llvm-commits mailing list