4033 strcmp(opType,"RoundDoubleMode")==0 ||
4034 strcmp(opType,"RoundFloat")==0 ||
4035 strcmp(opType,"ReverseBytesI")==0 ||
4036 strcmp(opType,"ReverseBytesL")==0 ||
4037 strcmp(opType,"ReverseBytesUS")==0 ||
4038 strcmp(opType,"ReverseBytesS")==0 ||
4039 strcmp(opType,"ReplicateB")==0 ||
4040 strcmp(opType,"ReplicateS")==0 ||
4041 strcmp(opType,"ReplicateI")==0 ||
4042 strcmp(opType,"ReplicateL")==0 ||
4043 strcmp(opType,"ReplicateF")==0 ||
4044 strcmp(opType,"ReplicateD")==0 ||
4045 strcmp(opType,"AddReductionVI")==0 ||
4046 strcmp(opType,"AddReductionVL")==0 ||
4047 strcmp(opType,"AddReductionVF")==0 ||
4048 strcmp(opType,"AddReductionVD")==0 ||
4049 strcmp(opType,"MulReductionVI")==0 ||
4050 strcmp(opType,"MulReductionVL")==0 ||
4051 strcmp(opType,"MulReductionVF")==0 ||
4052 strcmp(opType,"MulReductionVD")==0 ||
4053 strcmp(opType,"MinReductionV")== 0 ||
4054 strcmp(opType,"MaxReductionV")== 0 ||
4055 strcmp(opType,"AndReductionV")==0 ||
4056 strcmp(opType,"OrReductionV")==0 ||
4057 strcmp(opType,"XorReductionV")==0 ||
4058 0 /* 0 to line up columns nicely */ )
4059 return 1;
4060 }
4061 return 0;
4062 }
4063
4064 bool MatchRule::is_ideal_if() const {
4065 if( !_opType ) return false;
4066 return
4067 !strcmp(_opType,"If" ) ||
4068 !strcmp(_opType,"CountedLoopEnd");
4069 }
4070
4071 bool MatchRule::is_ideal_fastlock() const {
4072 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4073 return (strcmp(_rChild->_opType,"FastLock") == 0);
4074 }
4135
4136 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4137 const char *opType = _rChild->_opType;
4138 ideal_load = is_load_from_memory(opType);
4139 }
4140
4141 return ideal_load;
4142 }
4143
4144 bool MatchRule::is_vector() const {
4145 static const char *vector_list[] = {
4146 "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4147 "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4148 "MulVB","MulVS","MulVI","MulVL","MulVF","MulVD",
4149 "CMoveVD", "CMoveVF",
4150 "DivVF","DivVD",
4151 "MinV","MaxV",
4152 "AbsVB","AbsVS","AbsVI","AbsVL","AbsVF","AbsVD",
4153 "NegVF","NegVD","NegVI",
4154 "SqrtVD","SqrtVF",
4155 "AndV" ,"XorV" ,"OrV", "NotV",
4156 "MaxV", "MinV",
4157 "AddReductionVI", "AddReductionVL",
4158 "AddReductionVF", "AddReductionVD",
4159 "MulReductionVI", "MulReductionVL",
4160 "MulReductionVF", "MulReductionVD",
4161 "MaxReductionV", "MinReductionV",
4162 "AndReductionV", "OrReductionV", "XorReductionV",
4163 "MulAddVS2VI", "MacroLogicV",
4164 "LShiftCntV","RShiftCntV",
4165 "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4166 "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4167 "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4168 "VLShiftV","VRShiftV","VURShiftV",
4169 "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4170 "RoundDoubleModeV","LoadVector","StoreVector","LoadVectorGather", "StoreVectorScatter",
4171 "VectorTest", "VectorLoadMask", "VectorStoreMask", "VectorBlend", "VectorInsert",
4172 "VectorRearrange","VectorLoadShuffle", "VectorLoadConst",
4173 "VectorCastB2X", "VectorCastS2X", "VectorCastI2X",
4174 "VectorCastL2X", "VectorCastF2X", "VectorCastD2X",
4175 "VectorMaskWrapper", "VectorMaskCmp", "VectorReinterpret",
4176 "FmaVD", "FmaVF","PopCountVI",
4177 // Next are not supported currently.
4178 "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4179 "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4180 };
4181 int cnt = sizeof(vector_list)/sizeof(char*);
4182 if (_rChild) {
4183 const char *opType = _rChild->_opType;
4184 for (int i=0; i<cnt; i++)
4185 if (strcmp(opType,vector_list[i]) == 0)
4186 return true;
4187 }
4188 return false;
|
4033 strcmp(opType,"RoundDoubleMode")==0 ||
4034 strcmp(opType,"RoundFloat")==0 ||
4035 strcmp(opType,"ReverseBytesI")==0 ||
4036 strcmp(opType,"ReverseBytesL")==0 ||
4037 strcmp(opType,"ReverseBytesUS")==0 ||
4038 strcmp(opType,"ReverseBytesS")==0 ||
4039 strcmp(opType,"ReplicateB")==0 ||
4040 strcmp(opType,"ReplicateS")==0 ||
4041 strcmp(opType,"ReplicateI")==0 ||
4042 strcmp(opType,"ReplicateL")==0 ||
4043 strcmp(opType,"ReplicateF")==0 ||
4044 strcmp(opType,"ReplicateD")==0 ||
4045 strcmp(opType,"AddReductionVI")==0 ||
4046 strcmp(opType,"AddReductionVL")==0 ||
4047 strcmp(opType,"AddReductionVF")==0 ||
4048 strcmp(opType,"AddReductionVD")==0 ||
4049 strcmp(opType,"MulReductionVI")==0 ||
4050 strcmp(opType,"MulReductionVL")==0 ||
4051 strcmp(opType,"MulReductionVF")==0 ||
4052 strcmp(opType,"MulReductionVD")==0 ||
4053 strcmp(opType,"MinReductionV")==0 ||
4054 strcmp(opType,"MaxReductionV")==0 ||
4055 strcmp(opType,"AndReductionV")==0 ||
4056 strcmp(opType,"OrReductionV")==0 ||
4057 strcmp(opType,"XorReductionV")==0 ||
4058 0 /* 0 to line up columns nicely */ )
4059 return 1;
4060 }
4061 return 0;
4062 }
4063
4064 bool MatchRule::is_ideal_if() const {
4065 if( !_opType ) return false;
4066 return
4067 !strcmp(_opType,"If" ) ||
4068 !strcmp(_opType,"CountedLoopEnd");
4069 }
4070
4071 bool MatchRule::is_ideal_fastlock() const {
4072 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4073 return (strcmp(_rChild->_opType,"FastLock") == 0);
4074 }
4135
4136 if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4137 const char *opType = _rChild->_opType;
4138 ideal_load = is_load_from_memory(opType);
4139 }
4140
4141 return ideal_load;
4142 }
4143
4144 bool MatchRule::is_vector() const {
4145 static const char *vector_list[] = {
4146 "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4147 "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4148 "MulVB","MulVS","MulVI","MulVL","MulVF","MulVD",
4149 "CMoveVD", "CMoveVF",
4150 "DivVF","DivVD",
4151 "MinV","MaxV",
4152 "AbsVB","AbsVS","AbsVI","AbsVL","AbsVF","AbsVD",
4153 "NegVF","NegVD","NegVI",
4154 "SqrtVD","SqrtVF",
4155 "AndV" ,"XorV" ,"OrV",
4156 "MaxV", "MinV",
4157 "AddReductionVI", "AddReductionVL",
4158 "AddReductionVF", "AddReductionVD",
4159 "MulReductionVI", "MulReductionVL",
4160 "MulReductionVF", "MulReductionVD",
4161 "MaxReductionV", "MinReductionV",
4162 "AndReductionV", "OrReductionV", "XorReductionV",
4163 "MulAddVS2VI", "MacroLogicV",
4164 "LShiftCntV","RShiftCntV",
4165 "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4166 "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4167 "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4168 "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4169 "RoundDoubleModeV","LoadVector","StoreVector","LoadVectorGather", "StoreVectorScatter",
4170 "VectorTest", "VectorLoadMask", "VectorStoreMask", "VectorBlend", "VectorInsert",
4171 "VectorRearrange","VectorLoadShuffle", "VectorLoadConst",
4172 "VectorCastB2X", "VectorCastS2X", "VectorCastI2X",
4173 "VectorCastL2X", "VectorCastF2X", "VectorCastD2X",
4174 "VectorMaskWrapper", "VectorMaskCmp", "VectorReinterpret",
4175 "FmaVD", "FmaVF","PopCountVI",
4176 // Next are not supported currently.
4177 "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4178 "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4179 };
4180 int cnt = sizeof(vector_list)/sizeof(char*);
4181 if (_rChild) {
4182 const char *opType = _rChild->_opType;
4183 for (int i=0; i<cnt; i++)
4184 if (strcmp(opType,vector_list[i]) == 0)
4185 return true;
4186 }
4187 return false;
|