< prev index next >

test/hotspot/jtreg/compiler/gcbarriers/TestG1BarrierGeneration.java

Print this page

532         phase = CompilePhase.FINAL_CODE)
533     @IR(applyIf = {"UseCompressedOops", "true"},
534         counts = {IRNode.G1_ENCODE_P_AND_STORE_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
535         phase = CompilePhase.FINAL_CODE)
536     public static Object[] testStoreAllOnNewLargeArray(Object o1) {
537         Object[] a = new Object[1024];
538         for (int i = 0; i < a.length; i++) {
539             a[i] = o1;
540         }
541         return a;
542     }
543 
544     @Run(test = {"testArrayStore",
545                  "testArrayStoreNull",
546                  "testArrayStoreNotNull",
547                  "testArrayStoreTwice",
548                  "testStoreOnNewArrayAtKnownIndex",
549                  "testStoreOnNewArrayAtUnknownIndex",
550                  "testStoreAllOnNewSmallArray",
551                  "testStoreAllOnNewLargeArray"})

552     public void runArrayStoreTests() {
553         {
554             Object[] a = new Object[10];
555             Object o1 = new Object();
556             testArrayStore(a, 4, o1);
557             Asserts.assertEquals(o1, a[4]);
558         }
559         {
560             Object[] a = new Object[10];
561             testArrayStoreNull(a, 4);
562             Asserts.assertNull(a[4]);
563         }
564         {
565             Object[] a = new Object[10];
566             Object o1 = new Object();
567             testArrayStoreNotNull(a, 4, o1);
568             Asserts.assertEquals(o1, a[4]);
569         }
570         {
571             Object[] a = new Object[10];

711     @IR(applyIf = {"UseCompressedOops", "true"},
712         counts = {IRNode.G1_COMPARE_AND_EXCHANGE_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
713         phase = CompilePhase.FINAL_CODE)
714     static Object testCompareAndExchange(Outer o, Object oldVal, Object newVal) {
715         return fVarHandle.compareAndExchange(o, oldVal, newVal);
716     }
717 
718     @Test
719     @IR(applyIf = {"UseCompressedOops", "false"},
720         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
721         phase = CompilePhase.FINAL_CODE)
722     @IR(applyIf = {"UseCompressedOops", "true"},
723         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
724         phase = CompilePhase.FINAL_CODE)
725     static boolean testCompareAndSwap(Outer o, Object oldVal, Object newVal) {
726         return fVarHandle.compareAndSet(o, oldVal, newVal);
727     }
728 
729     @Test
730     @IR(applyIf = {"UseCompressedOops", "false"},
731         counts = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
732         phase = CompilePhase.FINAL_CODE)
733     @IR(applyIf = {"UseCompressedOops", "true"},
734         counts = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
735         phase = CompilePhase.FINAL_CODE)
736     static Object testGetAndSet(Outer o, Object newVal) {
737         return fVarHandle.getAndSet(o, newVal);
738     }
739 
740     // IR checks are disabled for s390 because barriers are not elided (to be investigated).
741     @Test
742     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
743         applyIfPlatform = {"s390", "false"},
744         counts = {IRNode.G1_COMPARE_AND_EXCHANGE_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
745         phase = CompilePhase.FINAL_CODE)
746     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
747         applyIfPlatform = {"s390", "false"},
748         counts = {IRNode.G1_COMPARE_AND_EXCHANGE_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
749         phase = CompilePhase.FINAL_CODE)
750     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
751         applyIfPlatform = {"s390", "false"},
752         failOn = {IRNode.G1_COMPARE_AND_EXCHANGE_P_WITH_BARRIER_FLAG, ANY},
753         phase = CompilePhase.FINAL_CODE)
754     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},

769         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
770         phase = CompilePhase.FINAL_CODE)
771     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
772         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
773         phase = CompilePhase.FINAL_CODE)
774     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
775         applyIfPlatform = {"s390", "false"},
776         failOn = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, ANY},
777         phase = CompilePhase.FINAL_CODE)
778     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
779         failOn = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, ANY},
780         phase = CompilePhase.FINAL_CODE)
781     static boolean testCompareAndSwapOnNewObject(Object oldVal, Object newVal) {
782         Outer o = new Outer();
783         o.f = oldVal;
784         return fVarHandle.compareAndSet(o, oldVal, newVal);
785     }
786 
787     @Test
788     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
789         counts = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
790         phase = CompilePhase.FINAL_CODE)
791     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
792         counts = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
793         phase = CompilePhase.FINAL_CODE)
794     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
795         failOn = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, ANY},
796         phase = CompilePhase.FINAL_CODE)
797     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
798         failOn = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, ANY},
799         phase = CompilePhase.FINAL_CODE)
800     static Object testGetAndSetOnNewObject(Object oldVal, Object newVal) {
801         Outer o = new Outer();
802         o.f = oldVal;
803         return fVarHandle.getAndSet(o, newVal);
804     }
805 
806     @Test
807     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
808         counts = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
809         phase = CompilePhase.FINAL_CODE)
810     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
811         counts = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
812         phase = CompilePhase.FINAL_CODE)
813     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
814         failOn = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, ANY},
815         phase = CompilePhase.FINAL_CODE)
816     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
817         failOn = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, ANY},
818         phase = CompilePhase.FINAL_CODE)
819     static Object testGetAndSetConditionallyOnNewObject(Object oldVal, Object newVal, boolean c) {
820         Outer o = new Outer();
821         o.f = oldVal;
822         if (c) {
823             return fVarHandle.getAndSet(o, newVal);
824         }
825         return oldVal;
826     }
827 
828     @Test
829     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
830         counts = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
831         phase = CompilePhase.FINAL_CODE)
832     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
833         counts = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
834         phase = CompilePhase.FINAL_CODE)
835     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
836         failOn = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, ANY},
837         phase = CompilePhase.FINAL_CODE)
838     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
839         failOn = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, ANY},
840         phase = CompilePhase.FINAL_CODE)
841     static Object testGetAndSetOnNewObjectAfterException(Object oldVal, Object newVal, boolean c) throws Exception {
842         Outer o = new Outer();
843         if (c) {
844             throw new Exception("");
845         }
846         o.f = oldVal;
847         return fVarHandle.getAndSet(o, newVal);
848     }
849 
850     @Test
851     @IR(applyIf = {"UseCompressedOops", "false"},
852         counts = {IRNode.G1_GET_AND_SET_P_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
853         phase = CompilePhase.FINAL_CODE)
854     @IR(applyIf = {"UseCompressedOops", "true"},
855         counts = {IRNode.G1_GET_AND_SET_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
856         phase = CompilePhase.FINAL_CODE)
857     static Object testGetAndSetOnNewObjectAfterCall(Object oldVal, Object newVal) {
858         Outer o = new Outer();
859         nonInlinedMethod();
860         o.f = oldVal;
861         return fVarHandle.getAndSet(o, newVal);
862     }
863 
864     @Run(test = {"testCompareAndExchange",
865                  "testCompareAndSwap",
866                  "testGetAndSet",
867                  "testCompareAndExchangeOnNewObject",
868                  "testCompareAndSwapOnNewObject",
869                  "testGetAndSetOnNewObject",
870                  "testGetAndSetConditionallyOnNewObject",
871                  "testGetAndSetOnNewObjectAfterException",
872                  "testGetAndSetOnNewObjectAfterCall"})
873     public void runAtomicTests() {
874         {
875             Outer o = new Outer();

532         phase = CompilePhase.FINAL_CODE)
533     @IR(applyIf = {"UseCompressedOops", "true"},
534         counts = {IRNode.G1_ENCODE_P_AND_STORE_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
535         phase = CompilePhase.FINAL_CODE)
536     public static Object[] testStoreAllOnNewLargeArray(Object o1) {
537         Object[] a = new Object[1024];
538         for (int i = 0; i < a.length; i++) {
539             a[i] = o1;
540         }
541         return a;
542     }
543 
544     @Run(test = {"testArrayStore",
545                  "testArrayStoreNull",
546                  "testArrayStoreNotNull",
547                  "testArrayStoreTwice",
548                  "testStoreOnNewArrayAtKnownIndex",
549                  "testStoreOnNewArrayAtUnknownIndex",
550                  "testStoreAllOnNewSmallArray",
551                  "testStoreAllOnNewLargeArray"})
552     @Warmup(5000)
553     public void runArrayStoreTests() {
554         {
555             Object[] a = new Object[10];
556             Object o1 = new Object();
557             testArrayStore(a, 4, o1);
558             Asserts.assertEquals(o1, a[4]);
559         }
560         {
561             Object[] a = new Object[10];
562             testArrayStoreNull(a, 4);
563             Asserts.assertNull(a[4]);
564         }
565         {
566             Object[] a = new Object[10];
567             Object o1 = new Object();
568             testArrayStoreNotNull(a, 4, o1);
569             Asserts.assertEquals(o1, a[4]);
570         }
571         {
572             Object[] a = new Object[10];

712     @IR(applyIf = {"UseCompressedOops", "true"},
713         counts = {IRNode.G1_COMPARE_AND_EXCHANGE_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
714         phase = CompilePhase.FINAL_CODE)
715     static Object testCompareAndExchange(Outer o, Object oldVal, Object newVal) {
716         return fVarHandle.compareAndExchange(o, oldVal, newVal);
717     }
718 
719     @Test
720     @IR(applyIf = {"UseCompressedOops", "false"},
721         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
722         phase = CompilePhase.FINAL_CODE)
723     @IR(applyIf = {"UseCompressedOops", "true"},
724         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
725         phase = CompilePhase.FINAL_CODE)
726     static boolean testCompareAndSwap(Outer o, Object oldVal, Object newVal) {
727         return fVarHandle.compareAndSet(o, oldVal, newVal);
728     }
729 
730     @Test
731     @IR(applyIf = {"UseCompressedOops", "false"},
732         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
733         phase = CompilePhase.FINAL_CODE)
734     @IR(applyIf = {"UseCompressedOops", "true"},
735         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
736         phase = CompilePhase.FINAL_CODE)
737     static Object testGetAndSet(Outer o, Object newVal) {
738         return fVarHandle.getAndSet(o, newVal);
739     }
740 
741     // IR checks are disabled for s390 because barriers are not elided (to be investigated).
742     @Test
743     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
744         applyIfPlatform = {"s390", "false"},
745         counts = {IRNode.G1_COMPARE_AND_EXCHANGE_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
746         phase = CompilePhase.FINAL_CODE)
747     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
748         applyIfPlatform = {"s390", "false"},
749         counts = {IRNode.G1_COMPARE_AND_EXCHANGE_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
750         phase = CompilePhase.FINAL_CODE)
751     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
752         applyIfPlatform = {"s390", "false"},
753         failOn = {IRNode.G1_COMPARE_AND_EXCHANGE_P_WITH_BARRIER_FLAG, ANY},
754         phase = CompilePhase.FINAL_CODE)
755     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},

770         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
771         phase = CompilePhase.FINAL_CODE)
772     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
773         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
774         phase = CompilePhase.FINAL_CODE)
775     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
776         applyIfPlatform = {"s390", "false"},
777         failOn = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, ANY},
778         phase = CompilePhase.FINAL_CODE)
779     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
780         failOn = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, ANY},
781         phase = CompilePhase.FINAL_CODE)
782     static boolean testCompareAndSwapOnNewObject(Object oldVal, Object newVal) {
783         Outer o = new Outer();
784         o.f = oldVal;
785         return fVarHandle.compareAndSet(o, oldVal, newVal);
786     }
787 
788     @Test
789     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
790         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
791         phase = CompilePhase.FINAL_CODE)
792     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
793         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
794         phase = CompilePhase.FINAL_CODE)
795     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
796         failOn = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, ANY},
797         phase = CompilePhase.FINAL_CODE)
798     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
799         failOn = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, ANY},
800         phase = CompilePhase.FINAL_CODE)
801     static Object testGetAndSetOnNewObject(Object oldVal, Object newVal) {
802         Outer o = new Outer();
803         o.f = oldVal;
804         return fVarHandle.getAndSet(o, newVal);
805     }
806 
807     @Test
808     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
809         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
810         phase = CompilePhase.FINAL_CODE)
811     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
812         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
813         phase = CompilePhase.FINAL_CODE)
814     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
815         failOn = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, ANY},
816         phase = CompilePhase.FINAL_CODE)
817     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
818         failOn = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, ANY},
819         phase = CompilePhase.FINAL_CODE)
820     static Object testGetAndSetConditionallyOnNewObject(Object oldVal, Object newVal, boolean c) {
821         Outer o = new Outer();
822         o.f = oldVal;
823         if (c) {
824             return fVarHandle.getAndSet(o, newVal);
825         }
826         return oldVal;
827     }
828 
829     @Test
830     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "false"},
831         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, POST_ONLY, "1"},
832         phase = CompilePhase.FINAL_CODE)
833     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "false"},
834         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, POST_ONLY, "1"},
835         phase = CompilePhase.FINAL_CODE)
836     @IR(applyIfAnd = {"UseCompressedOops", "false", "ReduceInitialCardMarks", "true"},
837         failOn = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, ANY},
838         phase = CompilePhase.FINAL_CODE)
839     @IR(applyIfAnd = {"UseCompressedOops", "true", "ReduceInitialCardMarks", "true"},
840         failOn = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, ANY},
841         phase = CompilePhase.FINAL_CODE)
842     static Object testGetAndSetOnNewObjectAfterException(Object oldVal, Object newVal, boolean c) throws Exception {
843         Outer o = new Outer();
844         if (c) {
845             throw new Exception("");
846         }
847         o.f = oldVal;
848         return fVarHandle.getAndSet(o, newVal);
849     }
850 
851     @Test
852     @IR(applyIf = {"UseCompressedOops", "false"},
853         counts = {IRNode.G1_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
854         phase = CompilePhase.FINAL_CODE)
855     @IR(applyIf = {"UseCompressedOops", "true"},
856         counts = {IRNode.G1_COMPARE_AND_SWAP_N_WITH_BARRIER_FLAG, PRE_AND_POST, "1"},
857         phase = CompilePhase.FINAL_CODE)
858     static Object testGetAndSetOnNewObjectAfterCall(Object oldVal, Object newVal) {
859         Outer o = new Outer();
860         nonInlinedMethod();
861         o.f = oldVal;
862         return fVarHandle.getAndSet(o, newVal);
863     }
864 
865     @Run(test = {"testCompareAndExchange",
866                  "testCompareAndSwap",
867                  "testGetAndSet",
868                  "testCompareAndExchangeOnNewObject",
869                  "testCompareAndSwapOnNewObject",
870                  "testGetAndSetOnNewObject",
871                  "testGetAndSetConditionallyOnNewObject",
872                  "testGetAndSetOnNewObjectAfterException",
873                  "testGetAndSetOnNewObjectAfterCall"})
874     public void runAtomicTests() {
875         {
876             Outer o = new Outer();
< prev index next >