67 lines
2.2 KiB
Python
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()
|
|
|