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)
|
||||
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)
|
||||
inst = _make_value(_core.LLVMBuildLoad(self.ptr, ptr.ptr, name))
|
||||
if align:
|
||||
_core.LLVMLdSetAlignment(inst.ptr, align)
|
||||
if 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
|
||||
|
||||
def store(self, value, ptr, align=0, volatile=False):
|
||||
|
|
|
|||
|
|
@ -23,6 +23,20 @@ class TestMetaData(unittest.TestCase):
|
|||
|
||||
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__':
|
||||
unittest.main()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue