Files
ytts/venv/lib/python3.11/site-packages/numba/tests/test_optimisation_pipelines.py
2025-04-02 21:44:17 -07:00

59 lines
1.7 KiB
Python

import unittest
from numba.tests.support import (TestCase, override_config)
from numba import njit
from numba.core import types
import llvmlite.binding as llvm
class TestPassManagerOptimization(TestCase):
""" Tests that pass manager is not overriding the intended
optimization level.
"""
def _get_llvmir(self, fn, sig):
with override_config('OPT', 0):
fn.compile(sig)
return fn.inspect_llvm(sig)
def test_override_config(self):
@njit(debug=True, error_model='numpy')
def foo(a):
b = a + 1.23
c = b * 2.34
d = b / c
print(d)
return d
sig = (types.float64,)
full_ir = self._get_llvmir(foo, sig=sig)
module = llvm.parse_assembly(full_ir)
name = foo.overloads[foo.signatures[0]].fndesc.mangled_name
funcs = [x for x in module.functions if x.name == name]
self.assertEqual(len(funcs), 1)
func = funcs[0]
blocks = [x for x in func.blocks]
self.assertGreater(len(blocks), 1)
block = blocks[0]
# Find sequence with non-debug instructions
instrs = [x for x in block.instructions if x.opcode != 'call']
op_expect = {'fadd', 'fmul', 'fdiv'}
started = False
for x in instrs:
if x.opcode in op_expect:
op_expect.remove(x.opcode)
if not started:
started = True
elif op_expect and started:
break
self.assertGreater(len(op_expect), 0,
"Function was optimized unexpectedly")
if __name__ == '__main__':
unittest.main()