Mercurial > hg > graal-compiler
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); |