Mercurial > hg > graal-jvmci-8
comparison src/share/vm/c1/c1_LIR.cpp @ 12875:d13d7aba8c12
8023657: New type profiling points: arguments to call
Summary: x86 interpreter and c1 type profiling for arguments at calls
Reviewed-by: kvn, twisti
author | roland |
---|---|
date | Wed, 09 Oct 2013 16:32:21 +0200 |
parents | b800986664f4 |
children | 9acbfe04b5c3 |
comparison
equal
deleted
inserted
replaced
12874:46ef27bcacb3 | 12875:d13d7aba8c12 |
---|---|
999 if (opProfileCall->_recv->is_valid()) do_temp(opProfileCall->_recv); | 999 if (opProfileCall->_recv->is_valid()) do_temp(opProfileCall->_recv); |
1000 assert(opProfileCall->_mdo->is_valid(), "used"); do_temp(opProfileCall->_mdo); | 1000 assert(opProfileCall->_mdo->is_valid(), "used"); do_temp(opProfileCall->_mdo); |
1001 assert(opProfileCall->_tmp1->is_valid(), "used"); do_temp(opProfileCall->_tmp1); | 1001 assert(opProfileCall->_tmp1->is_valid(), "used"); do_temp(opProfileCall->_tmp1); |
1002 break; | 1002 break; |
1003 } | 1003 } |
1004 | |
1005 // LIR_OpProfileType: | |
1006 case lir_profile_type: { | |
1007 assert(op->as_OpProfileType() != NULL, "must be"); | |
1008 LIR_OpProfileType* opProfileType = (LIR_OpProfileType*)op; | |
1009 | |
1010 do_input(opProfileType->_mdp); do_temp(opProfileType->_mdp); | |
1011 do_input(opProfileType->_obj); | |
1012 do_temp(opProfileType->_tmp); | |
1013 break; | |
1014 } | |
1004 default: | 1015 default: |
1005 ShouldNotReachHere(); | 1016 ShouldNotReachHere(); |
1006 } | 1017 } |
1007 } | 1018 } |
1008 | 1019 |
1147 masm->emit_delay(this); | 1158 masm->emit_delay(this); |
1148 } | 1159 } |
1149 | 1160 |
1150 void LIR_OpProfileCall::emit_code(LIR_Assembler* masm) { | 1161 void LIR_OpProfileCall::emit_code(LIR_Assembler* masm) { |
1151 masm->emit_profile_call(this); | 1162 masm->emit_profile_call(this); |
1163 } | |
1164 | |
1165 void LIR_OpProfileType::emit_code(LIR_Assembler* masm) { | |
1166 masm->emit_profile_type(this); | |
1152 } | 1167 } |
1153 | 1168 |
1154 // LIR_List | 1169 // LIR_List |
1155 LIR_List::LIR_List(Compilation* compilation, BlockBegin* block) | 1170 LIR_List::LIR_List(Compilation* compilation, BlockBegin* block) |
1156 : _operations(8) | 1171 : _operations(8) |
1801 case lir_cas_long: s = "cas_long"; break; | 1816 case lir_cas_long: s = "cas_long"; break; |
1802 case lir_cas_obj: s = "cas_obj"; break; | 1817 case lir_cas_obj: s = "cas_obj"; break; |
1803 case lir_cas_int: s = "cas_int"; break; | 1818 case lir_cas_int: s = "cas_int"; break; |
1804 // LIR_OpProfileCall | 1819 // LIR_OpProfileCall |
1805 case lir_profile_call: s = "profile_call"; break; | 1820 case lir_profile_call: s = "profile_call"; break; |
1821 // LIR_OpProfileType | |
1822 case lir_profile_type: s = "profile_type"; break; | |
1806 // LIR_OpAssert | 1823 // LIR_OpAssert |
1807 #ifdef ASSERT | 1824 #ifdef ASSERT |
1808 case lir_assert: s = "assert"; break; | 1825 case lir_assert: s = "assert"; break; |
1809 #endif | 1826 #endif |
1810 case lir_none: ShouldNotReachHere();break; | 1827 case lir_none: ShouldNotReachHere();break; |
2084 mdo()->print(out); out->print(" "); | 2101 mdo()->print(out); out->print(" "); |
2085 recv()->print(out); out->print(" "); | 2102 recv()->print(out); out->print(" "); |
2086 tmp1()->print(out); out->print(" "); | 2103 tmp1()->print(out); out->print(" "); |
2087 } | 2104 } |
2088 | 2105 |
2106 // LIR_OpProfileType | |
2107 void LIR_OpProfileType::print_instr(outputStream* out) const { | |
2108 out->print("exact = "); exact_klass()->print_name_on(out); | |
2109 out->print("current = "); ciTypeEntries::print_ciklass(out, current_klass()); | |
2110 mdp()->print(out); out->print(" "); | |
2111 obj()->print(out); out->print(" "); | |
2112 tmp()->print(out); out->print(" "); | |
2113 } | |
2114 | |
2089 #endif // PRODUCT | 2115 #endif // PRODUCT |
2090 | 2116 |
2091 // Implementation of LIR_InsertionBuffer | 2117 // Implementation of LIR_InsertionBuffer |
2092 | 2118 |
2093 void LIR_InsertionBuffer::append(int index, LIR_Op* op) { | 2119 void LIR_InsertionBuffer::append(int index, LIR_Op* op) { |