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++)
|