aboutsummaryrefslogtreecommitdiff
path: root/src/share/vm/adlc/formssel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/share/vm/adlc/formssel.cpp')
-rw-r--r--src/share/vm/adlc/formssel.cpp36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/share/vm/adlc/formssel.cpp b/src/share/vm/adlc/formssel.cpp
index cccce31c2..fa5f91ca8 100644
--- a/src/share/vm/adlc/formssel.cpp
+++ b/src/share/vm/adlc/formssel.cpp
@@ -751,6 +751,7 @@ bool InstructForm::captures_bottom_type(FormDict &globals) const {
!strcmp(_matrule->_rChild->_opType,"DecodeN") ||
!strcmp(_matrule->_rChild->_opType,"EncodeP") ||
!strcmp(_matrule->_rChild->_opType,"LoadN") ||
+ !strcmp(_matrule->_rChild->_opType,"GetAndSetN") ||
!strcmp(_matrule->_rChild->_opType,"LoadNKlass") ||
!strcmp(_matrule->_rChild->_opType,"CreateEx") || // type of exception
!strcmp(_matrule->_rChild->_opType,"CheckCastPP")) ) return true;
@@ -3399,7 +3400,9 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
"StorePConditional", "StoreIConditional", "StoreLConditional",
"CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
"StoreCM",
- "ClearArray"
+ "ClearArray",
+ "GetAndAddI", "GetAndSetI", "GetAndSetP",
+ "GetAndAddL", "GetAndSetL", "GetAndSetN",
};
int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
if( strcmp(_opType,"PrefetchRead")==0 ||
@@ -4040,18 +4043,27 @@ Form::DataType MatchRule::is_ideal_load() const {
}
bool MatchRule::is_vector() const {
- if( _rChild ) {
+ static const char *vector_list[] = {
+ "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
+ "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
+ "MulVS","MulVI","MulVF","MulVD",
+ "DivVF","DivVD",
+ "AndV" ,"XorV" ,"OrV",
+ "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
+ "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
+ "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
+ "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
+ "LoadVector","StoreVector",
+ // Next are not supported currently.
+ "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
+ "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
+ };
+ int cnt = sizeof(vector_list)/sizeof(char*);
+ if (_rChild) {
const char *opType = _rChild->_opType;
- if( strcmp(opType,"ReplicateB")==0 ||
- strcmp(opType,"ReplicateS")==0 ||
- strcmp(opType,"ReplicateI")==0 ||
- strcmp(opType,"ReplicateL")==0 ||
- strcmp(opType,"ReplicateF")==0 ||
- strcmp(opType,"ReplicateD")==0 ||
- strcmp(opType,"LoadVector")==0 ||
- strcmp(opType,"StoreVector")==0 ||
- 0 /* 0 to line up columns nicely */ )
- return true;
+ for (int i=0; i<cnt; i++)
+ if (strcmp(opType,vector_list[i]) == 0)
+ return true;
}
return false;
}