add invariant load

add related test
This commit is contained in:
Siu Kwan Lam 2012-09-06 20:00:01 -07:00
commit fbb7208b85
2 changed files with 19 additions and 1 deletions

View file

@ -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):

View file

@ -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()