968 JVMState** result_jvms = NEW_RESOURCE_ARRAY(JVMState*, (n_predicates+1));
969
970 // Region for normal compilation code if intrinsic failed.
971 Node* slow_region = new RegionNode(1);
972
973 int results = 0;
974 for (int predicate = 0; (predicate < n_predicates) && !kit.stopped(); predicate++) {
975 #ifdef ASSERT
976 JVMState* old_jvms = kit.jvms();
977 SafePointNode* old_map = kit.map();
978 Node* old_io = old_map->i_o();
979 Node* old_mem = old_map->memory();
980 Node* old_exc = old_map->next_exception();
981 #endif
982 Node* else_ctrl = _intrinsic->generate_predicate(kit.sync_jvms(), predicate);
983 #ifdef ASSERT
984 // Assert(no_new_memory && no_new_io && no_new_exceptions) after generate_predicate.
985 assert(old_jvms == kit.jvms(), "generate_predicate should not change jvm state");
986 SafePointNode* new_map = kit.map();
987 assert(old_io == new_map->i_o(), "generate_predicate should not change i_o");
988 assert(old_mem == new_map->memory(), "generate_predicate should not change memory");
989 assert(old_exc == new_map->next_exception(), "generate_predicate should not add exceptions");
990 #endif
991 if (!kit.stopped()) {
992 PreserveJVMState pjvms(&kit);
993 // Generate intrinsic code:
994 JVMState* new_jvms = _intrinsic->generate(kit.sync_jvms());
995 if (new_jvms == NULL) {
996 // Intrinsic failed, use normal compilation path for this predicate.
997 slow_region->add_req(kit.control());
998 } else {
999 kit.add_exception_states_from(new_jvms);
1000 kit.set_jvms(new_jvms);
1001 if (!kit.stopped()) {
1002 result_jvms[results++] = kit.jvms();
1003 }
1004 }
1005 }
1006 if (else_ctrl == NULL) {
1007 else_ctrl = kit.C->top();
1008 }
|
968 JVMState** result_jvms = NEW_RESOURCE_ARRAY(JVMState*, (n_predicates+1));
969
970 // Region for normal compilation code if intrinsic failed.
971 Node* slow_region = new RegionNode(1);
972
973 int results = 0;
974 for (int predicate = 0; (predicate < n_predicates) && !kit.stopped(); predicate++) {
975 #ifdef ASSERT
976 JVMState* old_jvms = kit.jvms();
977 SafePointNode* old_map = kit.map();
978 Node* old_io = old_map->i_o();
979 Node* old_mem = old_map->memory();
980 Node* old_exc = old_map->next_exception();
981 #endif
982 Node* else_ctrl = _intrinsic->generate_predicate(kit.sync_jvms(), predicate);
983 #ifdef ASSERT
984 // Assert(no_new_memory && no_new_io && no_new_exceptions) after generate_predicate.
985 assert(old_jvms == kit.jvms(), "generate_predicate should not change jvm state");
986 SafePointNode* new_map = kit.map();
987 assert(old_io == new_map->i_o(), "generate_predicate should not change i_o");
988 assert(old_mem == new_map->memory() || UseShenandoahGC, "generate_predicate should not change memory");
989 assert(old_exc == new_map->next_exception(), "generate_predicate should not add exceptions");
990 #endif
991 if (!kit.stopped()) {
992 PreserveJVMState pjvms(&kit);
993 // Generate intrinsic code:
994 JVMState* new_jvms = _intrinsic->generate(kit.sync_jvms());
995 if (new_jvms == NULL) {
996 // Intrinsic failed, use normal compilation path for this predicate.
997 slow_region->add_req(kit.control());
998 } else {
999 kit.add_exception_states_from(new_jvms);
1000 kit.set_jvms(new_jvms);
1001 if (!kit.stopped()) {
1002 result_jvms[results++] = kit.jvms();
1003 }
1004 }
1005 }
1006 if (else_ctrl == NULL) {
1007 else_ctrl = kit.C->top();
1008 }
|