llvmpy/test/metadata.py
2013-01-24 11:58:28 -06:00

67 lines
2.2 KiB
Python

from __future__ import print_function
import unittest
from llvm.test_llvmpy import TestCase
from llvm.core import *
class TestMetaData(TestCase):
def test_metadata_get(self):
module = Module.new('test_metadata')
md = MetaData.get(module, [Constant.int(Type.int(), 1234)])
def test_meta_load_nt(self):
module = Module.new('test_meta_load_nt')
func = module.add_function(Type.function(Type.void(), []),
name='test_load_nt')
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))))
md = MetaData.get(module, [Constant.int(Type.int(), 1)])
loadinst.set_metadata('nontemporal', md)
bldr.ret_void()
module.verify()
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))
def test_tbaa_metadata(self):
'''just a simple excerise of the code
'''
mod = Module.new('test_tbaa_metadata')
root = MetaData.get(mod, [MetaDataString.get(mod, "root")])
MetaData.add_named_operand(mod, 'tbaa', root)
ops = [MetaDataString.get(mod, "int"), root]
md1 = MetaData.get(mod, ops)
MetaData.add_named_operand(mod, 'tbaa', md1)
print(md1)
ops = [MetaDataString.get(mod, "const float"),
root,
Constant.int(Type.int(64), 1)]
md2 = MetaData.get(mod, ops)
MetaData.add_named_operand(mod, 'tbaa', md2)
print(md2)
print(mod)
if __name__ == '__main__':
unittest.main()