4026 strcmp(opType,"ConvI2L")==0 || 4027 strcmp(opType,"ConvL2D")==0 || 4028 strcmp(opType,"ConvL2F")==0 || 4029 strcmp(opType,"ConvL2I")==0 || 4030 strcmp(opType,"DecodeN")==0 || 4031 strcmp(opType,"EncodeP")==0 || 4032 strcmp(opType,"EncodePKlass")==0 || 4033 strcmp(opType,"DecodeNKlass")==0 || 4034 strcmp(opType,"RoundDouble")==0 || 4035 strcmp(opType,"RoundFloat")==0 || 4036 strcmp(opType,"ReverseBytesI")==0 || 4037 strcmp(opType,"ReverseBytesL")==0 || 4038 strcmp(opType,"ReverseBytesUS")==0 || 4039 strcmp(opType,"ReverseBytesS")==0 || 4040 strcmp(opType,"ReplicateB")==0 || 4041 strcmp(opType,"ReplicateS")==0 || 4042 strcmp(opType,"ReplicateI")==0 || 4043 strcmp(opType,"ReplicateL")==0 || 4044 strcmp(opType,"ReplicateF")==0 || 4045 strcmp(opType,"ReplicateD")==0 || 4046 0 /* 0 to line up columns nicely */ ) 4047 return 1; 4048 } 4049 return 0; 4050 } 4051 4052 bool MatchRule::is_ideal_if() const { 4053 if( !_opType ) return false; 4054 return 4055 !strcmp(_opType,"If" ) || 4056 !strcmp(_opType,"CountedLoopEnd"); 4057 } 4058 4059 bool MatchRule::is_ideal_fastlock() const { 4060 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) { 4061 return (strcmp(_rChild->_opType,"FastLock") == 0); 4062 } 4063 return false; 4064 } 4065 4118 4119 4120 Form::DataType MatchRule::is_ideal_load() const { 4121 Form::DataType ideal_load = Form::none; 4122 4123 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) { 4124 const char *opType = _rChild->_opType; 4125 ideal_load = is_load_from_memory(opType); 4126 } 4127 4128 return ideal_load; 4129 } 4130 4131 bool MatchRule::is_vector() const { 4132 static const char *vector_list[] = { 4133 "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD", 4134 "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD", 4135 "MulVS","MulVI","MulVF","MulVD", 4136 "DivVF","DivVD", 4137 "AndV" ,"XorV" ,"OrV", 4138 "LShiftCntV","RShiftCntV", 4139 "LShiftVB","LShiftVS","LShiftVI","LShiftVL", 4140 "RShiftVB","RShiftVS","RShiftVI","RShiftVL", 4141 "URShiftVB","URShiftVS","URShiftVI","URShiftVL", 4142 "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD", 4143 "LoadVector","StoreVector", 4144 // Next are not supported currently. 4145 "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D", 4146 "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD" 4147 }; 4148 int cnt = sizeof(vector_list)/sizeof(char*); 4149 if (_rChild) { 4150 const char *opType = _rChild->_opType; 4151 for (int i=0; i<cnt; i++) 4152 if (strcmp(opType,vector_list[i]) == 0) 4153 return true; 4154 } 4155 return false; 4156 } 4157 | 4026 strcmp(opType,"ConvI2L")==0 || 4027 strcmp(opType,"ConvL2D")==0 || 4028 strcmp(opType,"ConvL2F")==0 || 4029 strcmp(opType,"ConvL2I")==0 || 4030 strcmp(opType,"DecodeN")==0 || 4031 strcmp(opType,"EncodeP")==0 || 4032 strcmp(opType,"EncodePKlass")==0 || 4033 strcmp(opType,"DecodeNKlass")==0 || 4034 strcmp(opType,"RoundDouble")==0 || 4035 strcmp(opType,"RoundFloat")==0 || 4036 strcmp(opType,"ReverseBytesI")==0 || 4037 strcmp(opType,"ReverseBytesL")==0 || 4038 strcmp(opType,"ReverseBytesUS")==0 || 4039 strcmp(opType,"ReverseBytesS")==0 || 4040 strcmp(opType,"ReplicateB")==0 || 4041 strcmp(opType,"ReplicateS")==0 || 4042 strcmp(opType,"ReplicateI")==0 || 4043 strcmp(opType,"ReplicateL")==0 || 4044 strcmp(opType,"ReplicateF")==0 || 4045 strcmp(opType,"ReplicateD")==0 || 4046 strcmp(opType,"AddReductionVI") == 0 || 4047 strcmp(opType,"AddReductionVL") == 0 || 4048 strcmp(opType,"AddReductionVF")==0 || 4049 strcmp(opType,"AddReductionVD")==0 || 4050 strcmp(opType,"MulReductionVI") == 0 || 4051 strcmp(opType,"MulReductionVF")==0 || 4052 strcmp(opType,"MulReductionVD")== 0 || 4053 0 /* 0 to line up columns nicely */ ) 4054 return 1; 4055 } 4056 return 0; 4057 } 4058 4059 bool MatchRule::is_ideal_if() const { 4060 if( !_opType ) return false; 4061 return 4062 !strcmp(_opType,"If" ) || 4063 !strcmp(_opType,"CountedLoopEnd"); 4064 } 4065 4066 bool MatchRule::is_ideal_fastlock() const { 4067 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) { 4068 return (strcmp(_rChild->_opType,"FastLock") == 0); 4069 } 4070 return false; 4071 } 4072 4125 4126 4127 Form::DataType MatchRule::is_ideal_load() const { 4128 Form::DataType ideal_load = Form::none; 4129 4130 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) { 4131 const char *opType = _rChild->_opType; 4132 ideal_load = is_load_from_memory(opType); 4133 } 4134 4135 return ideal_load; 4136 } 4137 4138 bool MatchRule::is_vector() const { 4139 static const char *vector_list[] = { 4140 "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD", 4141 "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD", 4142 "MulVS","MulVI","MulVF","MulVD", 4143 "DivVF","DivVD", 4144 "AndV" ,"XorV" ,"OrV", 4145 "AddReductionVI", "AddReductionVL", 4146 "AddReductionVF", "AddReductionVD", 4147 "MulReductionVI", 4148 "MulReductionVF", "MulReductionVD", 4149 "LShiftCntV","RShiftCntV", 4150 "LShiftVB","LShiftVS","LShiftVI","LShiftVL", 4151 "RShiftVB","RShiftVS","RShiftVI","RShiftVL", 4152 "URShiftVB","URShiftVS","URShiftVI","URShiftVL", 4153 "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD", 4154 "LoadVector","StoreVector", 4155 // Next are not supported currently. 4156 "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D", 4157 "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD" 4158 }; 4159 int cnt = sizeof(vector_list)/sizeof(char*); 4160 if (_rChild) { 4161 const char *opType = _rChild->_opType; 4162 for (int i=0; i<cnt; i++) 4163 if (strcmp(opType,vector_list[i]) == 0) 4164 return true; 4165 } 4166 return false; 4167 } 4168 |