public bool Equals(CopyAnalysisState other)
            {
                if (this.IsDefault != other.IsDefault)
                {
                    return(false);
                }

                if ((this.IsDefault && other.IsDefault) || _varState == other._varState)
                {
                    return(true);
                }

                // We are supposed to compare only states from the same routine
                Debug.Assert(_varState.Length == other._varState.Length);

                for (int i = 0; i < other._varState.Length; i++)
                {
                    if (_varState[i] != other._varState[i])
                    {
                        return(false);
                    }
                }

                return(true);
            }
            public CopyAnalysisState WithMerge(CopyAnalysisState other)
            {
                if (this.IsDefault)
                {
                    return(other);
                }
                else if (other.IsDefault)
                {
                    return(this);
                }

                if (this.Equals(other))
                {
                    return(this);
                }

                var merged = new CopyAnalysisState(_varState.Length);

                for (int i = 0; i < merged._varState.Length; i++)
                {
                    merged._varState[i] = _varState[i] | other._varState[i];
                }

                return(merged);
            }
            public CopyAnalysisState Clone()
            {
                var clone = new CopyAnalysisState(_varState.Length);

                _varState.CopyTo(clone._varState, 0);

                return(clone);
            }