[llvm-commits] [llvm] r79623 - /llvm/trunk/utils/PerfectShuffle/PerfectShuffle.cpp
Anton Korobeynikov
asl at math.spbu.ru
Fri Aug 21 05:41:03 PDT 2009
Author: asl
Date: Fri Aug 21 07:41:03 2009
New Revision: 79623
URL: http://llvm.org/viewvc/llvm-project?rev=79623&view=rev
Log:
Add simple cost model to perfect shuffle. Currently we're doing just greedy search for cost instead of (proper) dynamic programming approach.
Modified:
llvm/trunk/utils/PerfectShuffle/PerfectShuffle.cpp
Modified: llvm/trunk/utils/PerfectShuffle/PerfectShuffle.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/utils/PerfectShuffle/PerfectShuffle.cpp?rev=79623&r1=79622&r2=79623&view=diff
==============================================================================
--- llvm/trunk/utils/PerfectShuffle/PerfectShuffle.cpp (original)
+++ llvm/trunk/utils/PerfectShuffle/PerfectShuffle.cpp Fri Aug 21 07:41:03 2009
@@ -104,9 +104,11 @@
unsigned short ShuffleMask;
unsigned short OpNum;
const char *Name;
-
- Operator(unsigned short shufflemask, const char *name, unsigned opnum)
- : ShuffleMask(shufflemask), OpNum(opnum), Name(name) {
+ unsigned Cost;
+
+ Operator(unsigned short shufflemask, const char *name, unsigned opnum,
+ unsigned cost = 1)
+ : ShuffleMask(shufflemask), OpNum(opnum), Name(name), Cost(cost) {
TheOperators.push_back(this);
}
~Operator() {
@@ -119,7 +121,8 @@
}
const char *getName() const { return Name; }
-
+ unsigned getCost() const { return Cost; }
+
unsigned short getTransformedMask(unsigned short LHSMask, unsigned RHSMask) {
// Extract the elements from LHSMask and RHSMask, as appropriate.
unsigned Result = 0;
@@ -302,7 +305,7 @@
// Evaluate op(LHS,LHS)
unsigned ResultMask = Op->getTransformedMask(LHS, LHS);
- unsigned Cost = ShufTab[LHS].Cost + 1;
+ unsigned Cost = ShufTab[LHS].Cost + Op->getCost();
if (Cost < ShufTab[ResultMask].Cost) {
ShufTab[ResultMask].Cost = Cost;
ShufTab[ResultMask].Op = Op;
@@ -340,7 +343,7 @@
EvaluateOps(LHS, Vals, NumVals);
EvaluateOps(RHS, Vals, NumVals);
- unsigned Cost = NumVals + 1;
+ unsigned Cost = NumVals + Op->getCost();
if (Cost < ShufTab[ResultMask].Cost) {
ShufTab[ResultMask].Cost = Cost;
ShufTab[ResultMask].Op = Op;
More information about the llvm-commits
mailing list