Mercurial > hg > graal-jvmci-8
changeset 16159:d3f949fbdf30
infer stamps for BitCountNode
author | Lukas Stadler <lukas.stadler@oracle.com> |
---|---|
date | Mon, 23 Jun 2014 14:11:54 +0200 |
parents | d8aa3ea65d39 |
children | 866438171d1d |
files | graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java |
diffstat | 1 files changed, 13 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Mon Jun 23 14:11:54 2014 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/nodes/BitCountNode.java Mon Jun 23 14:11:54 2014 +0200 @@ -34,6 +34,19 @@ public BitCountNode(ValueNode value) { super(StampFactory.forInteger(Kind.Int, 0, ((PrimitiveStamp) value.stamp()).getBits()), value); + assert value.getKind() == Kind.Int || value.getKind() == Kind.Long; + } + + @Override + public boolean inferStamp() { + int min = 0; + int max = 0; + IntegerStamp valueStamp = (IntegerStamp) getValue().stamp(); + for (int i = 0; i < valueStamp.getBits(); i++) { + min += (valueStamp.downMask() & (1L << i)) == 0 ? 0 : 1; + max += (valueStamp.upMask() & (1L << i)) == 0 ? 0 : 1; + } + return updateStamp(StampFactory.forInteger(Kind.Int, min, max)); } @Override