Skip to content

Commit

Permalink
Fixed bug in ExprOp that caused bitwise operators to fail when a basi…
Browse files Browse the repository at this point in the history
…c python type was on the left hand side of the expression. Added regression test for crashing cases. (apache#4852)
  • Loading branch information
dpankratz authored and alexwong committed Feb 26, 2020
1 parent 3f1ed07 commit 549b784
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 0 deletions.
9 changes: 9 additions & 0 deletions python/tvm/expr.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,12 +113,21 @@ def __rshift__(self, other):
def __and__(self, other):
return _make.bitwise_and(self, other)

def __rand__(self, other):
return _make.bitwise_and(other, self)

def __or__(self, other):
return _make.bitwise_or(self, other)

def __ror__(self, other):
return _make.bitwise_or(other, self)

def __xor__(self, other):
return _make.bitwise_xor(self, other)

def __rxor__(self, other):
return _make.bitwise_xor(other, self)

def __invert__(self):
return _make.Call(self.dtype, "bitwise_not", [self], Call.PureIntrinsic, None, 0)

Expand Down
3 changes: 3 additions & 0 deletions tests/python/unittest/test_lang_basic.py
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,9 @@ def test_bitwise():
assert str(x & y) == 'bitwise_and(x, y)'
assert str(x | y) == 'bitwise_or(x, y)'
assert str(x ^ y) == 'bitwise_xor(x, y)'
assert str(10 & x) == 'bitwise_and(10, x)'
assert str(10 | x) == 'bitwise_or(10, x)'
assert str(10 ^ x) == 'bitwise_xor(10, x)'
assert str(~x) == 'bitwise_not(x)'
assert(tvm.const(1, "int8x2") >> 1).dtype == "int8x2"
assert(x >> tvm.const(1, "int32x2")).dtype == "int32x2"
Expand Down

0 comments on commit 549b784

Please sign in to comment.