add invariant load
add related test
This commit is contained in:
parent
82117d899e
commit
fbb7208b85
2 changed files with 19 additions and 1 deletions
|
|
@ -1866,13 +1866,17 @@ class Builder(object):
|
||||||
check_is_value(ptr)
|
check_is_value(ptr)
|
||||||
return _make_value(_core.LLVMBuildFree(self.ptr, ptr.ptr))
|
return _make_value(_core.LLVMBuildFree(self.ptr, ptr.ptr))
|
||||||
|
|
||||||
def load(self, ptr, name="", align=0, volatile=False):
|
def load(self, ptr, name="", align=0, volatile=False, invariant=False):
|
||||||
check_is_value(ptr)
|
check_is_value(ptr)
|
||||||
inst = _make_value(_core.LLVMBuildLoad(self.ptr, ptr.ptr, name))
|
inst = _make_value(_core.LLVMBuildLoad(self.ptr, ptr.ptr, name))
|
||||||
if align:
|
if align:
|
||||||
_core.LLVMLdSetAlignment(inst.ptr, align)
|
_core.LLVMLdSetAlignment(inst.ptr, align)
|
||||||
if volatile:
|
if volatile:
|
||||||
inst.set_volatile(volatile)
|
inst.set_volatile(volatile)
|
||||||
|
if invariant:
|
||||||
|
mod = self.basic_block.function.module
|
||||||
|
md = MetaData.get(mod, []) # empty metadata node
|
||||||
|
inst.set_metadata('invariant.load', md)
|
||||||
return inst
|
return inst
|
||||||
|
|
||||||
def store(self, value, ptr, align=0, volatile=False):
|
def store(self, value, ptr, align=0, volatile=False):
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,20 @@ class TestMetaData(unittest.TestCase):
|
||||||
|
|
||||||
self.assertIn('!nontemporal', str(loadinst))
|
self.assertIn('!nontemporal', str(loadinst))
|
||||||
|
|
||||||
|
def test_meta_load_invariant(self):
|
||||||
|
module = Module.new('test_meta_load_invariant')
|
||||||
|
func = module.add_function(Type.function(Type.void(), []),
|
||||||
|
name='test_load_invariant')
|
||||||
|
bldr = Builder.new(func.append_basic_block('entry'))
|
||||||
|
addr = Constant.int(Type.int(), 0xdeadbeef)
|
||||||
|
loadinst = bldr.load(bldr.inttoptr(addr, Type.pointer(Type.int(8))),
|
||||||
|
invariant=True)
|
||||||
|
|
||||||
|
bldr.ret_void()
|
||||||
|
module.verify()
|
||||||
|
|
||||||
|
self.assertIn('!invariant.load', str(loadinst))
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue