diff options
Diffstat (limited to 'src/jit/nodeinfo.h')
-rw-r--r-- | src/jit/nodeinfo.h | 47 |
1 files changed, 30 insertions, 17 deletions
diff --git a/src/jit/nodeinfo.h b/src/jit/nodeinfo.h index a73033a91f..1937cc4377 100644 --- a/src/jit/nodeinfo.h +++ b/src/jit/nodeinfo.h @@ -21,17 +21,18 @@ public: _internalIntCount = 0; _internalFloatCount = 0; - srcCandsIndex = 0; - dstCandsIndex = 0; - internalCandsIndex = 0; - isLocalDefUse = false; - isHelperCallWithKills = false; - isLsraAdded = false; - isDelayFree = false; - hasDelayFreeSrc = false; - isTgtPref = false; - regOptional = false; - definesAnyRegisters = false; + srcCandsIndex = 0; + dstCandsIndex = 0; + internalCandsIndex = 0; + isLocalDefUse = false; + isHelperCallWithKills = false; + isLsraAdded = false; + isDelayFree = false; + hasDelayFreeSrc = false; + isTgtPref = false; + regOptional = false; + definesAnyRegisters = false; + isInternalRegDelayFree = false; #ifdef DEBUG isInitialized = false; #endif @@ -99,42 +100,54 @@ public: LsraLocation loc; -private: - unsigned char _dstCount; - unsigned char _srcCount; - unsigned char _internalIntCount; - unsigned char _internalFloatCount; - public: unsigned char srcCandsIndex; unsigned char dstCandsIndex; unsigned char internalCandsIndex; +private: + unsigned char _srcCount : 5; + unsigned char _dstCount : 3; + unsigned char _internalIntCount : 3; + unsigned char _internalFloatCount : 3; + +public: // isLocalDefUse identifies trees that produce a value that is not consumed elsewhere. // Examples include stack arguments to a call (they are immediately stored), lhs of comma // nodes, or top-level nodes that are non-void. unsigned char isLocalDefUse : 1; + // isHelperCallWithKills is set when this is a helper call that kills more than just its in/out regs. unsigned char isHelperCallWithKills : 1; + // Is this node added by LSRA, e.g. as a resolution or copy/reload move. unsigned char isLsraAdded : 1; + // isDelayFree is set when the register defined by this node will interfere with the destination // of the consuming node, and therefore it must not be freed immediately after use. unsigned char isDelayFree : 1; + // hasDelayFreeSrc is set when this node has sources that are marked "isDelayFree". This is because, // we may eventually "contain" this node, in which case we don't want it's children (which have // already been marked "isDelayFree" to be handled that way when allocating. unsigned char hasDelayFreeSrc : 1; + // isTgtPref is set to true when we have a rmw op, where we would like the result to be allocated // in the same register as op1. unsigned char isTgtPref : 1; + // Whether a spilled second src can be treated as a contained operand unsigned char regOptional : 1; + // Whether or not a node defines any registers, whether directly (for nodes where dstCout is non-zero) // or indirectly (for contained nodes, which propagate the transitive closure of the registers // defined by their inputs). Used during buildRefPositionsForNode in order to avoid unnecessary work. unsigned char definesAnyRegisters : 1; + // Whether internal register needs to be different from targetReg + // in which result is produced. + unsigned char isInternalRegDelayFree : 1; + #ifdef DEBUG // isInitialized is set when the tree node is handled. unsigned char isInitialized : 1; |