Mercurial > hg > truffle
comparison src/cpu/x86/vm/c1_Runtime1_x86.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 | b9a918201d47 f98f5d48f511 |
comparison
equal
deleted
inserted
replaced
8780:98f3af397705 | 8860:46f6f063b272 |
---|---|
1805 | 1805 |
1806 } | 1806 } |
1807 break; | 1807 break; |
1808 #endif // INCLUDE_ALL_GCS | 1808 #endif // INCLUDE_ALL_GCS |
1809 | 1809 |
1810 case predicate_failed_trap_id: | |
1811 { | |
1812 StubFrame f(sasm, "predicate_failed_trap", dont_gc_arguments); | |
1813 | |
1814 OopMap* map = save_live_registers(sasm, 1); | |
1815 | |
1816 int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, predicate_failed_trap)); | |
1817 oop_maps = new OopMapSet(); | |
1818 oop_maps->add_gc_map(call_offset, map); | |
1819 restore_live_registers(sasm); | |
1820 __ leave(); | |
1821 DeoptimizationBlob* deopt_blob = SharedRuntime::deopt_blob(); | |
1822 assert(deopt_blob != NULL, "deoptimization blob must have been created"); | |
1823 | |
1824 __ jump(RuntimeAddress(deopt_blob->unpack_with_reexecution())); | |
1825 } | |
1826 break; | |
1827 | |
1810 default: | 1828 default: |
1811 { StubFrame f(sasm, "unimplemented entry", dont_gc_arguments); | 1829 { StubFrame f(sasm, "unimplemented entry", dont_gc_arguments); |
1812 __ movptr(rax, (int)id); | 1830 __ movptr(rax, (int)id); |
1813 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax); | 1831 __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, unimplemented_entry), rax); |
1814 __ should_not_reach_here(); | 1832 __ should_not_reach_here(); |