< prev index next >

src/hotspot/share/adlc/formssel.cpp

Print this page
rev 47825 : Support vectorization of sqrt for float


4017   }
4018   if( is_chain_rule(_AD.globalNames()) &&
4019       _lChild && strncmp(_lChild->_opType,"stackSlot",9)==0 )
4020     return 1;
4021   return 0;
4022 }
4023 
4024 
4025 int MatchRule::is_expensive() const {
4026   if( _rChild ) {
4027     const char  *opType = _rChild->_opType;
4028     if( strcmp(opType,"AtanD")==0 ||
4029         strcmp(opType,"DivD")==0 ||
4030         strcmp(opType,"DivF")==0 ||
4031         strcmp(opType,"DivI")==0 ||
4032         strcmp(opType,"Log10D")==0 ||
4033         strcmp(opType,"ModD")==0 ||
4034         strcmp(opType,"ModF")==0 ||
4035         strcmp(opType,"ModI")==0 ||
4036         strcmp(opType,"SqrtD")==0 ||

4037         strcmp(opType,"TanD")==0 ||
4038         strcmp(opType,"ConvD2F")==0 ||
4039         strcmp(opType,"ConvD2I")==0 ||
4040         strcmp(opType,"ConvD2L")==0 ||
4041         strcmp(opType,"ConvF2D")==0 ||
4042         strcmp(opType,"ConvF2I")==0 ||
4043         strcmp(opType,"ConvF2L")==0 ||
4044         strcmp(opType,"ConvI2D")==0 ||
4045         strcmp(opType,"ConvI2F")==0 ||
4046         strcmp(opType,"ConvI2L")==0 ||
4047         strcmp(opType,"ConvL2D")==0 ||
4048         strcmp(opType,"ConvL2F")==0 ||
4049         strcmp(opType,"ConvL2I")==0 ||
4050         strcmp(opType,"DecodeN")==0 ||
4051         strcmp(opType,"EncodeP")==0 ||
4052         strcmp(opType,"EncodePKlass")==0 ||
4053         strcmp(opType,"DecodeNKlass")==0 ||
4054         strcmp(opType,"FmaD") == 0 ||
4055         strcmp(opType,"FmaF") == 0 ||
4056         strcmp(opType,"RoundDouble")==0 ||


4150 Form::DataType MatchRule::is_ideal_load() const {
4151   Form::DataType ideal_load = Form::none;
4152 
4153   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4154     const char *opType = _rChild->_opType;
4155     ideal_load = is_load_from_memory(opType);
4156   }
4157 
4158   return ideal_load;
4159 }
4160 
4161 bool MatchRule::is_vector() const {
4162   static const char *vector_list[] = {
4163     "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4164     "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4165     "MulVS","MulVI","MulVL","MulVF","MulVD",
4166     "CMoveVD",
4167     "DivVF","DivVD",
4168     "AbsVF","AbsVD",
4169     "NegVF","NegVD",
4170     "SqrtVD",
4171     "AndV" ,"XorV" ,"OrV",
4172     "AddReductionVI", "AddReductionVL",
4173     "AddReductionVF", "AddReductionVD",
4174     "MulReductionVI", "MulReductionVL",
4175     "MulReductionVF", "MulReductionVD",
4176     "LShiftCntV","RShiftCntV",
4177     "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4178     "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4179     "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4180     "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4181     "LoadVector","StoreVector",
4182     "FmaVD", "FmaVF",
4183     // Next are not supported currently.
4184     "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4185     "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4186   };
4187   int cnt = sizeof(vector_list)/sizeof(char*);
4188   if (_rChild) {
4189     const char  *opType = _rChild->_opType;
4190     for (int i=0; i<cnt; i++)




4017   }
4018   if( is_chain_rule(_AD.globalNames()) &&
4019       _lChild && strncmp(_lChild->_opType,"stackSlot",9)==0 )
4020     return 1;
4021   return 0;
4022 }
4023 
4024 
4025 int MatchRule::is_expensive() const {
4026   if( _rChild ) {
4027     const char  *opType = _rChild->_opType;
4028     if( strcmp(opType,"AtanD")==0 ||
4029         strcmp(opType,"DivD")==0 ||
4030         strcmp(opType,"DivF")==0 ||
4031         strcmp(opType,"DivI")==0 ||
4032         strcmp(opType,"Log10D")==0 ||
4033         strcmp(opType,"ModD")==0 ||
4034         strcmp(opType,"ModF")==0 ||
4035         strcmp(opType,"ModI")==0 ||
4036         strcmp(opType,"SqrtD")==0 ||
4037         strcmp(opType,"SqrtF")==0 ||
4038         strcmp(opType,"TanD")==0 ||
4039         strcmp(opType,"ConvD2F")==0 ||
4040         strcmp(opType,"ConvD2I")==0 ||
4041         strcmp(opType,"ConvD2L")==0 ||
4042         strcmp(opType,"ConvF2D")==0 ||
4043         strcmp(opType,"ConvF2I")==0 ||
4044         strcmp(opType,"ConvF2L")==0 ||
4045         strcmp(opType,"ConvI2D")==0 ||
4046         strcmp(opType,"ConvI2F")==0 ||
4047         strcmp(opType,"ConvI2L")==0 ||
4048         strcmp(opType,"ConvL2D")==0 ||
4049         strcmp(opType,"ConvL2F")==0 ||
4050         strcmp(opType,"ConvL2I")==0 ||
4051         strcmp(opType,"DecodeN")==0 ||
4052         strcmp(opType,"EncodeP")==0 ||
4053         strcmp(opType,"EncodePKlass")==0 ||
4054         strcmp(opType,"DecodeNKlass")==0 ||
4055         strcmp(opType,"FmaD") == 0 ||
4056         strcmp(opType,"FmaF") == 0 ||
4057         strcmp(opType,"RoundDouble")==0 ||


4151 Form::DataType MatchRule::is_ideal_load() const {
4152   Form::DataType ideal_load = Form::none;
4153 
4154   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4155     const char *opType = _rChild->_opType;
4156     ideal_load = is_load_from_memory(opType);
4157   }
4158 
4159   return ideal_load;
4160 }
4161 
4162 bool MatchRule::is_vector() const {
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",
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++)


< prev index next >