diff options
author | goetz <none@none> | 2013-11-20 11:08:09 -0800 |
---|---|---|
committer | goetz <none@none> | 2013-11-20 11:08:09 -0800 |
commit | 5413ca1d1c0a64c5c01dea68ce7a04c2a0e5a1a4 (patch) | |
tree | 206102dcea4a5a002ff432294e6f5b567ed45c8f /src/share/vm/opto/machnode.cpp | |
parent | b3950dff20d8606b81cc4e24fa9845ab48580c09 (diff) |
8028580: PPC64 (part 114/120): Support for Call nodes with constants.
Summary: extends MachCall nodes so that they can issue constants to the constant table
Reviewed-by: kvn
Diffstat (limited to 'src/share/vm/opto/machnode.cpp')
-rw-r--r-- | src/share/vm/opto/machnode.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/share/vm/opto/machnode.cpp b/src/share/vm/opto/machnode.cpp index 2777058c2..7411e183c 100644 --- a/src/share/vm/opto/machnode.cpp +++ b/src/share/vm/opto/machnode.cpp @@ -648,10 +648,15 @@ bool MachCallNode::return_value_is_used() const { //------------------------------Registers-------------------------------------- -const RegMask &MachCallNode::in_RegMask( uint idx ) const { +const RegMask &MachCallNode::in_RegMask(uint idx) const { // Values in the domain use the users calling convention, embodied in the // _in_rms array of RegMasks. - if (idx < tf()->domain()->cnt()) return _in_rms[idx]; + if (idx < tf()->domain()->cnt()) { + return _in_rms[idx]; + } + if (idx == mach_constant_base_node_input()) { + return MachConstantBaseNode::static_out_RegMask(); + } // Values outside the domain represent debug info return *Compile::current()->matcher()->idealreg2debugmask[in(idx)->ideal_reg()]; } @@ -678,7 +683,12 @@ void MachCallJavaNode::dump_spec(outputStream *st) const { const RegMask &MachCallJavaNode::in_RegMask(uint idx) const { // Values in the domain use the users calling convention, embodied in the // _in_rms array of RegMasks. - if (idx < tf()->domain()->cnt()) return _in_rms[idx]; + if (idx < tf()->domain()->cnt()) { + return _in_rms[idx]; + } + if (idx == mach_constant_base_node_input()) { + return MachConstantBaseNode::static_out_RegMask(); + } // Values outside the domain represent debug info Matcher* m = Compile::current()->matcher(); // If this call is a MethodHandle invoke we have to use a different |