diff options
Diffstat (limited to 'Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h')
-rw-r--r-- | Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h b/Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h index b22198a00..d34392121 100644 --- a/Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h +++ b/Source/JavaScriptCore/bytecode/FullBytecodeLiveness.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013, 2015 Apple Inc. All rights reserved. + * Copyright (C) 2013 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,22 +35,33 @@ class BytecodeLivenessAnalysis; typedef HashMap<unsigned, FastBitVector, WTF::IntHash<unsigned>, WTF::UnsignedWithZeroKeyHashTraits<unsigned>> BytecodeToBitmapMap; class FullBytecodeLiveness { - WTF_MAKE_FAST_ALLOCATED; public: - const FastBitVector& getLiveness(unsigned bytecodeIndex) const + FullBytecodeLiveness() : m_codeBlock(0) { } + + // We say "out" to refer to the bitvector that contains raw results for a bytecode + // instruction. + const FastBitVector& getOut(unsigned bytecodeIndex) const { - return m_map[bytecodeIndex]; + BytecodeToBitmapMap::const_iterator iter = m_map.find(bytecodeIndex); + ASSERT(iter != m_map.end()); + return iter->value; } bool operandIsLive(int operand, unsigned bytecodeIndex) const { - return operandIsAlwaysLive(operand) || operandThatIsNotAlwaysLiveIsLive(getLiveness(bytecodeIndex), operand); + return operandIsAlwaysLive(m_codeBlock, operand) || operandThatIsNotAlwaysLiveIsLive(m_codeBlock, getOut(bytecodeIndex), operand); + } + + FastBitVector getLiveness(unsigned bytecodeIndex) const + { + return getLivenessInfo(m_codeBlock, getOut(bytecodeIndex)); } private: friend class BytecodeLivenessAnalysis; - Vector<FastBitVector, 0, UnsafeVectorOverflow> m_map; + CodeBlock* m_codeBlock; + BytecodeToBitmapMap m_map; }; } // namespace JSC |