hotspot/src/share/vm/opto/c2compiler.cpp
changeset 45514 0fc9cc73ce45
parent 42037 6269c5b5b651
child 46992 95000145dd81
equal deleted inserted replaced
45513:5431282d8ce1 45514:0fc9cc73ce45
     1 /*
     1 /*
     2  * Copyright (c) 1999, 2016, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   242     break;
   242     break;
   243   case vmIntrinsics::_reverseBytes_l:
   243   case vmIntrinsics::_reverseBytes_l:
   244     if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;
   244     if (!Matcher::match_rule_supported(Op_ReverseBytesL)) return false;
   245     break;
   245     break;
   246 
   246 
   247   /* CompareAndSwap, Object: */
   247   /* CompareAndSet, Object: */
   248   case vmIntrinsics::_compareAndSwapObject:
   248   case vmIntrinsics::_compareAndSetObject:
   249 #ifdef _LP64
   249 #ifdef _LP64
   250     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;
   250     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapN)) return false;
   251     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
   251     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
   252 #else
   252 #else
   253     if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
   253     if (!Matcher::match_rule_supported(Op_CompareAndSwapP)) return false;
   254 #endif
   254 #endif
   255     break;
   255     break;
   256   case vmIntrinsics::_weakCompareAndSwapObject:
   256   case vmIntrinsics::_weakCompareAndSetObjectPlain:
   257   case vmIntrinsics::_weakCompareAndSwapObjectAcquire:
   257   case vmIntrinsics::_weakCompareAndSetObjectAcquire:
   258   case vmIntrinsics::_weakCompareAndSwapObjectRelease:
   258   case vmIntrinsics::_weakCompareAndSetObjectRelease:
   259   case vmIntrinsics::_weakCompareAndSwapObjectVolatile:
   259   case vmIntrinsics::_weakCompareAndSetObject:
   260 #ifdef _LP64
   260 #ifdef _LP64
   261     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;
   261     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapN)) return false;
   262     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
   262     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
   263 #else
   263 #else
   264     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
   264     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapP)) return false;
   265 #endif
   265 #endif
   266     break;
   266     break;
   267   /* CompareAndSwap, Long: */
   267   /* CompareAndSet, Long: */
   268   case vmIntrinsics::_compareAndSwapLong:
   268   case vmIntrinsics::_compareAndSetLong:
   269     if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;
   269     if (!Matcher::match_rule_supported(Op_CompareAndSwapL)) return false;
   270     break;
   270     break;
   271   case vmIntrinsics::_weakCompareAndSwapLong:
   271   case vmIntrinsics::_weakCompareAndSetLongPlain:
   272   case vmIntrinsics::_weakCompareAndSwapLongAcquire:
   272   case vmIntrinsics::_weakCompareAndSetLongAcquire:
   273   case vmIntrinsics::_weakCompareAndSwapLongRelease:
   273   case vmIntrinsics::_weakCompareAndSetLongRelease:
   274   case vmIntrinsics::_weakCompareAndSwapLongVolatile:
   274   case vmIntrinsics::_weakCompareAndSetLong:
   275     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
   275     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
   276     break;
   276     break;
   277 
   277 
   278   /* CompareAndSwap, Int: */
   278   /* CompareAndSet, Int: */
   279   case vmIntrinsics::_compareAndSwapInt:
   279   case vmIntrinsics::_compareAndSetInt:
   280     if (!Matcher::match_rule_supported(Op_CompareAndSwapI)) return false;
   280     if (!Matcher::match_rule_supported(Op_CompareAndSwapI)) return false;
   281     break;
   281     break;
   282   case vmIntrinsics::_weakCompareAndSwapInt:
   282   case vmIntrinsics::_weakCompareAndSetIntPlain:
   283   case vmIntrinsics::_weakCompareAndSwapIntAcquire:
   283   case vmIntrinsics::_weakCompareAndSetIntAcquire:
   284   case vmIntrinsics::_weakCompareAndSwapIntRelease:
   284   case vmIntrinsics::_weakCompareAndSetIntRelease:
   285   case vmIntrinsics::_weakCompareAndSwapIntVolatile:
   285   case vmIntrinsics::_weakCompareAndSetInt:
   286     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
   286     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapL)) return false;
   287     break;
   287     break;
   288 
   288 
   289   /* CompareAndSwap, Byte: */
   289   /* CompareAndSet, Byte: */
   290   case vmIntrinsics::_compareAndSwapByte:
   290   case vmIntrinsics::_compareAndSetByte:
   291     if (!Matcher::match_rule_supported(Op_CompareAndSwapB)) return false;
   291     if (!Matcher::match_rule_supported(Op_CompareAndSwapB)) return false;
   292     break;
   292     break;
   293   case vmIntrinsics::_weakCompareAndSwapByte:
   293   case vmIntrinsics::_weakCompareAndSetBytePlain:
   294   case vmIntrinsics::_weakCompareAndSwapByteAcquire:
   294   case vmIntrinsics::_weakCompareAndSetByteAcquire:
   295   case vmIntrinsics::_weakCompareAndSwapByteRelease:
   295   case vmIntrinsics::_weakCompareAndSetByteRelease:
   296   case vmIntrinsics::_weakCompareAndSwapByteVolatile:
   296   case vmIntrinsics::_weakCompareAndSetByte:
   297     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapB)) return false;
   297     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapB)) return false;
   298     break;
   298     break;
   299 
   299 
   300   /* CompareAndSwap, Short: */
   300   /* CompareAndSet, Short: */
   301   case vmIntrinsics::_compareAndSwapShort:
   301   case vmIntrinsics::_compareAndSetShort:
   302     if (!Matcher::match_rule_supported(Op_CompareAndSwapS)) return false;
   302     if (!Matcher::match_rule_supported(Op_CompareAndSwapS)) return false;
   303     break;
   303     break;
   304   case vmIntrinsics::_weakCompareAndSwapShort:
   304   case vmIntrinsics::_weakCompareAndSetShortPlain:
   305   case vmIntrinsics::_weakCompareAndSwapShortAcquire:
   305   case vmIntrinsics::_weakCompareAndSetShortAcquire:
   306   case vmIntrinsics::_weakCompareAndSwapShortRelease:
   306   case vmIntrinsics::_weakCompareAndSetShortRelease:
   307   case vmIntrinsics::_weakCompareAndSwapShortVolatile:
   307   case vmIntrinsics::_weakCompareAndSetShort:
   308     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapS)) return false;
   308     if (!Matcher::match_rule_supported(Op_WeakCompareAndSwapS)) return false;
   309     break;
   309     break;
   310 
   310 
   311   /* CompareAndExchange, Object: */
   311   /* CompareAndExchange, Object: */
   312   case vmIntrinsics::_compareAndExchangeObjectVolatile:
   312   case vmIntrinsics::_compareAndExchangeObject:
   313   case vmIntrinsics::_compareAndExchangeObjectAcquire:
   313   case vmIntrinsics::_compareAndExchangeObjectAcquire:
   314   case vmIntrinsics::_compareAndExchangeObjectRelease:
   314   case vmIntrinsics::_compareAndExchangeObjectRelease:
   315 #ifdef _LP64
   315 #ifdef _LP64
   316     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;
   316     if ( UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeN)) return false;
   317     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
   317     if (!UseCompressedOops && !Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
   319     if (!Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
   319     if (!Matcher::match_rule_supported(Op_CompareAndExchangeP)) return false;
   320 #endif
   320 #endif
   321     break;
   321     break;
   322 
   322 
   323   /* CompareAndExchange, Long: */
   323   /* CompareAndExchange, Long: */
   324   case vmIntrinsics::_compareAndExchangeLongVolatile:
   324   case vmIntrinsics::_compareAndExchangeLong:
   325   case vmIntrinsics::_compareAndExchangeLongAcquire:
   325   case vmIntrinsics::_compareAndExchangeLongAcquire:
   326   case vmIntrinsics::_compareAndExchangeLongRelease:
   326   case vmIntrinsics::_compareAndExchangeLongRelease:
   327     if (!Matcher::match_rule_supported(Op_CompareAndExchangeL)) return false;
   327     if (!Matcher::match_rule_supported(Op_CompareAndExchangeL)) return false;
   328     break;
   328     break;
   329 
   329 
   330   /* CompareAndExchange, Int: */
   330   /* CompareAndExchange, Int: */
   331   case vmIntrinsics::_compareAndExchangeIntVolatile:
   331   case vmIntrinsics::_compareAndExchangeInt:
   332   case vmIntrinsics::_compareAndExchangeIntAcquire:
   332   case vmIntrinsics::_compareAndExchangeIntAcquire:
   333   case vmIntrinsics::_compareAndExchangeIntRelease:
   333   case vmIntrinsics::_compareAndExchangeIntRelease:
   334     if (!Matcher::match_rule_supported(Op_CompareAndExchangeI)) return false;
   334     if (!Matcher::match_rule_supported(Op_CompareAndExchangeI)) return false;
   335     break;
   335     break;
   336 
   336 
   337   /* CompareAndExchange, Byte: */
   337   /* CompareAndExchange, Byte: */
   338   case vmIntrinsics::_compareAndExchangeByteVolatile:
   338   case vmIntrinsics::_compareAndExchangeByte:
   339   case vmIntrinsics::_compareAndExchangeByteAcquire:
   339   case vmIntrinsics::_compareAndExchangeByteAcquire:
   340   case vmIntrinsics::_compareAndExchangeByteRelease:
   340   case vmIntrinsics::_compareAndExchangeByteRelease:
   341     if (!Matcher::match_rule_supported(Op_CompareAndExchangeB)) return false;
   341     if (!Matcher::match_rule_supported(Op_CompareAndExchangeB)) return false;
   342     break;
   342     break;
   343 
   343 
   344   /* CompareAndExchange, Short: */
   344   /* CompareAndExchange, Short: */
   345   case vmIntrinsics::_compareAndExchangeShortVolatile:
   345   case vmIntrinsics::_compareAndExchangeShort:
   346   case vmIntrinsics::_compareAndExchangeShortAcquire:
   346   case vmIntrinsics::_compareAndExchangeShortAcquire:
   347   case vmIntrinsics::_compareAndExchangeShortRelease:
   347   case vmIntrinsics::_compareAndExchangeShortRelease:
   348     if (!Matcher::match_rule_supported(Op_CompareAndExchangeS)) return false;
   348     if (!Matcher::match_rule_supported(Op_CompareAndExchangeS)) return false;
   349     break;
   349     break;
   350 
   350