add no-signed-wrap and no-unsigned-wrap flags to IRBuilder
This commit is contained in:
parent
eb4fc653f2
commit
1e9d37a64e
2 changed files with 46 additions and 8 deletions
20
llvm/core.py
20
llvm/core.py
|
|
@ -2124,20 +2124,23 @@ class Builder(llvm.Wrapper):
|
||||||
|
|
||||||
# arithmethic, bitwise and logical
|
# arithmethic, bitwise and logical
|
||||||
|
|
||||||
def add(self, lhs, rhs, name=""):
|
def add(self, lhs, rhs, name="", nuw=False, nsw=False):
|
||||||
return _make_value(self._ptr.CreateAdd(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateAdd(lhs._ptr, rhs._ptr, name,
|
||||||
|
nuw, nsw))
|
||||||
|
|
||||||
def fadd(self, lhs, rhs, name=""):
|
def fadd(self, lhs, rhs, name=""):
|
||||||
return _make_value(self._ptr.CreateFAdd(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateFAdd(lhs._ptr, rhs._ptr, name))
|
||||||
|
|
||||||
def sub(self, lhs, rhs, name=""):
|
def sub(self, lhs, rhs, name="", nuw=False, nsw=False):
|
||||||
return _make_value(self._ptr.CreateSub(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateSub(lhs._ptr, rhs._ptr, name,
|
||||||
|
nuw, nsw))
|
||||||
|
|
||||||
def fsub(self, lhs, rhs, name=""):
|
def fsub(self, lhs, rhs, name=""):
|
||||||
return _make_value(self._ptr.CreateFSub(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateFSub(lhs._ptr, rhs._ptr, name))
|
||||||
|
|
||||||
def mul(self, lhs, rhs, name=""):
|
def mul(self, lhs, rhs, name="", nuw=False, nsw=False):
|
||||||
return _make_value(self._ptr.CreateMul(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateMul(lhs._ptr, rhs._ptr, name,
|
||||||
|
nuw, nsw))
|
||||||
|
|
||||||
def fmul(self, lhs, rhs, name=""):
|
def fmul(self, lhs, rhs, name=""):
|
||||||
return _make_value(self._ptr.CreateFMul(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateFMul(lhs._ptr, rhs._ptr, name))
|
||||||
|
|
@ -2160,8 +2163,9 @@ class Builder(llvm.Wrapper):
|
||||||
def frem(self, lhs, rhs, name=""):
|
def frem(self, lhs, rhs, name=""):
|
||||||
return _make_value(self._ptr.CreateFRem(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateFRem(lhs._ptr, rhs._ptr, name))
|
||||||
|
|
||||||
def shl(self, lhs, rhs, name=""):
|
def shl(self, lhs, rhs, name="", nuw=False, nsw=False):
|
||||||
return _make_value(self._ptr.CreateShl(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateShl(lhs._ptr, rhs._ptr, name,
|
||||||
|
nuw, nsw))
|
||||||
|
|
||||||
def lshr(self, lhs, rhs, name=""):
|
def lshr(self, lhs, rhs, name=""):
|
||||||
return _make_value(self._ptr.CreateLShr(lhs._ptr, rhs._ptr, name))
|
return _make_value(self._ptr.CreateLShr(lhs._ptr, rhs._ptr, name))
|
||||||
|
|
|
||||||
|
|
@ -1477,6 +1477,40 @@ class TestArith(TestCase):
|
||||||
|
|
||||||
tests.append(TestArith)
|
tests.append(TestArith)
|
||||||
|
|
||||||
|
class TestNUWNSW(TestCase):
|
||||||
|
def make_module(self):
|
||||||
|
mod = Module.new('asdfa')
|
||||||
|
fnty = Type.function(Type.void(), [Type.int()] * 2)
|
||||||
|
func = mod.add_function(fnty, 'foo')
|
||||||
|
bldr = Builder.new(func.append_basic_block(''))
|
||||||
|
return mod, func, bldr
|
||||||
|
|
||||||
|
def has_nsw(self, inst, op):
|
||||||
|
self.assertTrue(('%s nsw' % op) in str(inst), "NSW flag does not work")
|
||||||
|
|
||||||
|
def has_nuw(self, inst, op):
|
||||||
|
self.assertTrue(('%s nuw' % op) in str(inst), "NUW flag does not work")
|
||||||
|
|
||||||
|
def _test_template(self, opf, opname):
|
||||||
|
mod, func, bldr = self.make_module()
|
||||||
|
a, b = func.args
|
||||||
|
self.has_nsw(opf(bldr, a, b, nsw=True), opname)
|
||||||
|
self.has_nuw(opf(bldr, a, b, nuw=True), opname)
|
||||||
|
|
||||||
|
def test_add_nuw_nsw(self):
|
||||||
|
self._test_template(Builder.add, 'add')
|
||||||
|
|
||||||
|
def test_sub_nuw_nsw(self):
|
||||||
|
self._test_template(Builder.sub, 'sub')
|
||||||
|
|
||||||
|
def test_mul_nuw_nsw(self):
|
||||||
|
self._test_template(Builder.mul, 'mul')
|
||||||
|
|
||||||
|
def test_shl_nuw_nsw(self):
|
||||||
|
self._test_template(Builder.shl, 'shl')
|
||||||
|
|
||||||
|
tests.append(TestNUWNSW)
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
|
|
||||||
def run(verbosity=1):
|
def run(verbosity=1):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue