summaryrefslogtreecommitdiff
path: root/src/jit/nodeinfo.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/nodeinfo.h')
-rw-r--r--src/jit/nodeinfo.h47
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;