/pypy/jit/codewriter/test/test_effectinfo.py

https://github.com/nicolaslara/pypy · Python · 107 lines · 92 code · 14 blank · 1 comment · 2 complexity · 2a98beeac5a9b57f5b8fbcc64570e716 MD5 · raw file

  1. from pypy.rpython.lltypesystem.rclass import OBJECT
  2. from pypy.rpython.lltypesystem import lltype
  3. from pypy.rpython.ootypesystem import ootype
  4. from pypy.jit.codewriter.effectinfo import effectinfo_from_writeanalyze,\
  5. EffectInfo
  6. class FakeCPU:
  7. def fielddescrof(self, T, fieldname):
  8. return ('fielddescr', T, fieldname)
  9. def arraydescrof(self, A):
  10. return ('arraydescr', A)
  11. def test_no_oopspec_duplicate():
  12. # check that all the various EffectInfo.OS_* have unique values
  13. oopspecs = set()
  14. for name, value in EffectInfo.__dict__.iteritems():
  15. if name.startswith('OS_'):
  16. assert value not in oopspecs
  17. oopspecs.add(value)
  18. def test_include_read_field():
  19. S = lltype.GcStruct("S", ("a", lltype.Signed))
  20. effects = frozenset([("readstruct", lltype.Ptr(S), "a")])
  21. effectinfo = effectinfo_from_writeanalyze(effects, FakeCPU())
  22. assert list(effectinfo.readonly_descrs_fields) == [('fielddescr', S, "a")]
  23. assert not effectinfo.write_descrs_fields
  24. assert not effectinfo.write_descrs_arrays
  25. def test_include_write_field():
  26. S = lltype.GcStruct("S", ("a", lltype.Signed))
  27. effects = frozenset([("struct", lltype.Ptr(S), "a")])
  28. effectinfo = effectinfo_from_writeanalyze(effects, FakeCPU())
  29. assert list(effectinfo.write_descrs_fields) == [('fielddescr', S, "a")]
  30. assert not effectinfo.readonly_descrs_fields
  31. assert not effectinfo.write_descrs_arrays
  32. def test_include_read_array():
  33. A = lltype.GcArray(lltype.Signed)
  34. effects = frozenset([("readarray", lltype.Ptr(A))])
  35. effectinfo = effectinfo_from_writeanalyze(effects, FakeCPU())
  36. assert not effectinfo.readonly_descrs_fields
  37. assert list(effectinfo.readonly_descrs_arrays) == [('arraydescr', A)]
  38. assert not effectinfo.write_descrs_fields
  39. assert not effectinfo.write_descrs_arrays
  40. def test_include_write_array():
  41. A = lltype.GcArray(lltype.Signed)
  42. effects = frozenset([("array", lltype.Ptr(A))])
  43. effectinfo = effectinfo_from_writeanalyze(effects, FakeCPU())
  44. assert not effectinfo.readonly_descrs_fields
  45. assert not effectinfo.write_descrs_fields
  46. assert list(effectinfo.write_descrs_arrays) == [('arraydescr', A)]
  47. def test_dont_include_read_and_write_field():
  48. S = lltype.GcStruct("S", ("a", lltype.Signed))
  49. effects = frozenset([("readstruct", lltype.Ptr(S), "a"),
  50. ("struct", lltype.Ptr(S), "a")])
  51. effectinfo = effectinfo_from_writeanalyze(effects, FakeCPU())
  52. assert not effectinfo.readonly_descrs_fields
  53. assert list(effectinfo.write_descrs_fields) == [('fielddescr', S, "a")]
  54. assert not effectinfo.write_descrs_arrays
  55. def test_dont_include_read_and_write_array():
  56. A = lltype.GcArray(lltype.Signed)
  57. effects = frozenset([("readarray", lltype.Ptr(A)),
  58. ("array", lltype.Ptr(A))])
  59. effectinfo = effectinfo_from_writeanalyze(effects, FakeCPU())
  60. assert not effectinfo.readonly_descrs_fields
  61. assert not effectinfo.readonly_descrs_arrays
  62. assert not effectinfo.write_descrs_fields
  63. assert list(effectinfo.write_descrs_arrays) == [('arraydescr', A)]
  64. def test_filter_out_typeptr():
  65. effects = frozenset([("struct", lltype.Ptr(OBJECT), "typeptr")])
  66. effectinfo = effectinfo_from_writeanalyze(effects, None)
  67. assert not effectinfo.readonly_descrs_fields
  68. assert not effectinfo.write_descrs_fields
  69. assert not effectinfo.write_descrs_arrays
  70. def test_filter_out_array_of_void():
  71. effects = frozenset([("array", lltype.Ptr(lltype.GcArray(lltype.Void)))])
  72. effectinfo = effectinfo_from_writeanalyze(effects, None)
  73. assert not effectinfo.readonly_descrs_fields
  74. assert not effectinfo.write_descrs_fields
  75. assert not effectinfo.write_descrs_arrays
  76. def test_filter_out_struct_with_void():
  77. effects = frozenset([("struct", lltype.Ptr(lltype.GcStruct("x", ("a", lltype.Void))), "a")])
  78. effectinfo = effectinfo_from_writeanalyze(effects, None)
  79. assert not effectinfo.readonly_descrs_fields
  80. assert not effectinfo.write_descrs_fields
  81. assert not effectinfo.write_descrs_arrays
  82. def test_filter_out_ooarray_of_void():
  83. effects = frozenset([("array", ootype.Array(ootype.Void))])
  84. effectinfo = effectinfo_from_writeanalyze(effects, None)
  85. assert not effectinfo.readonly_descrs_fields
  86. assert not effectinfo.write_descrs_fields
  87. assert not effectinfo.write_descrs_arrays
  88. def test_filter_out_instance_with_void():
  89. effects = frozenset([("struct", ootype.Instance("x", ootype.ROOT, {"a": ootype.Void}), "a")])
  90. effectinfo = effectinfo_from_writeanalyze(effects, None)
  91. assert not effectinfo.readonly_descrs_fields
  92. assert not effectinfo.write_descrs_fields
  93. assert not effectinfo.write_descrs_arrays