< prev index next >

src/hotspot/share/adlc/formssel.cpp

Print this page
rev 49190 : Add support for vector popcount


4163   static const char *vector_list[] = {
4164     "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4165     "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4166     "MulVS","MulVI","MulVL","MulVF","MulVD",
4167     "CMoveVD", "CMoveVF",
4168     "DivVF","DivVD",
4169     "AbsVF","AbsVD",
4170     "NegVF","NegVD",
4171     "SqrtVD","SqrtVF",
4172     "AndV" ,"XorV" ,"OrV",
4173     "AddReductionVI", "AddReductionVL",
4174     "AddReductionVF", "AddReductionVD",
4175     "MulReductionVI", "MulReductionVL",
4176     "MulReductionVF", "MulReductionVD",
4177     "LShiftCntV","RShiftCntV",
4178     "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4179     "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4180     "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4181     "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4182     "LoadVector","StoreVector",
4183     "FmaVD", "FmaVF",
4184     // Next are not supported currently.
4185     "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4186     "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4187   };
4188   int cnt = sizeof(vector_list)/sizeof(char*);
4189   if (_rChild) {
4190     const char  *opType = _rChild->_opType;
4191     for (int i=0; i<cnt; i++)
4192       if (strcmp(opType,vector_list[i]) == 0)
4193         return true;
4194   }
4195   return false;
4196 }
4197 
4198 
4199 bool MatchRule::skip_antidep_check() const {
4200   // Some loads operate on what is effectively immutable memory so we
4201   // should skip the anti dep computations.  For some of these nodes
4202   // the rewritable field keeps the anti dep logic from triggering but
4203   // for certain kinds of LoadKlass it does not since they are




4163   static const char *vector_list[] = {
4164     "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4165     "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4166     "MulVS","MulVI","MulVL","MulVF","MulVD",
4167     "CMoveVD", "CMoveVF",
4168     "DivVF","DivVD",
4169     "AbsVF","AbsVD",
4170     "NegVF","NegVD",
4171     "SqrtVD","SqrtVF",
4172     "AndV" ,"XorV" ,"OrV",
4173     "AddReductionVI", "AddReductionVL",
4174     "AddReductionVF", "AddReductionVD",
4175     "MulReductionVI", "MulReductionVL",
4176     "MulReductionVF", "MulReductionVD",
4177     "LShiftCntV","RShiftCntV",
4178     "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4179     "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4180     "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4181     "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4182     "LoadVector","StoreVector",
4183     "FmaVD", "FmaVF","PopCountVI",
4184     // Next are not supported currently.
4185     "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4186     "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4187   };
4188   int cnt = sizeof(vector_list)/sizeof(char*);
4189   if (_rChild) {
4190     const char  *opType = _rChild->_opType;
4191     for (int i=0; i<cnt; i++)
4192       if (strcmp(opType,vector_list[i]) == 0)
4193         return true;
4194   }
4195   return false;
4196 }
4197 
4198 
4199 bool MatchRule::skip_antidep_check() const {
4200   // Some loads operate on what is effectively immutable memory so we
4201   // should skip the anti dep computations.  For some of these nodes
4202   // the rewritable field keeps the anti dep logic from triggering but
4203   // for certain kinds of LoadKlass it does not since they are


< prev index next >