comparison src/cpu/sparc/vm/c1_Runtime1_sparc.cpp @ 8860:46f6f063b272

7153771: array bound check elimination for c1 Summary: when possible optimize out array bound checks, inserting predicates when needed. Reviewed-by: never, kvn, twisti Contributed-by: thomaswue <thomas.wuerthinger@oracle.com>
author roland
date Thu, 21 Mar 2013 09:27:54 +0100
parents db9981fd3124
children bb4a966cc68f
comparison
equal deleted inserted replaced
8780:98f3af397705 8860:46f6f063b272
985 __ delayed()->restore(); 985 __ delayed()->restore();
986 } 986 }
987 break; 987 break;
988 #endif // INCLUDE_ALL_GCS 988 #endif // INCLUDE_ALL_GCS
989 989
990 case predicate_failed_trap_id:
991 {
992 __ set_info("predicate_failed_trap", dont_gc_arguments);
993 OopMap* oop_map = save_live_registers(sasm);
994
995 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, predicate_failed_trap));
996
997 oop_maps = new OopMapSet();
998 oop_maps->add_gc_map(call_offset, oop_map);
999
1000 DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob();
1001 assert(deopt_blob != NULL, "deoptimization blob must have been created");
1002 restore_live_registers(sasm);
1003 __ restore();
1004 __ br(Assembler::always, false, Assembler::pt, deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type);
1005 __ delayed()->nop();
1006 }
1007 break;
1008
990 default: 1009 default:
991 { __ set_info("unimplemented entry", dont_gc_arguments); 1010 { __ set_info("unimplemented entry", dont_gc_arguments);
992 __ save_frame(0); 1011 __ save_frame(0);
993 __ set((int)id, O1); 1012 __ set((int)id, O1);
994 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), O1); 1013 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), O1);