llvmlite 0.44.0rc1__cp310-cp310-win_amd64.whl → 0.45.0__cp310-cp310-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of llvmlite might be problematic. Click here for more details.
- llvmlite/__init__.py +6 -5
- llvmlite/_version.py +2 -2
- llvmlite/binding/__init__.py +1 -2
- llvmlite/binding/config.py +143 -0
- llvmlite/binding/context.py +2 -10
- llvmlite/binding/ffi.py +1 -1
- llvmlite/binding/initfini.py +14 -2
- llvmlite/binding/llvmlite.dll +0 -0
- llvmlite/binding/newpassmanagers.py +759 -67
- llvmlite/binding/targets.py +14 -72
- llvmlite/binding/typeref.py +1 -19
- llvmlite/ir/builder.py +1 -1
- llvmlite/ir/module.py +11 -1
- llvmlite/ir/types.py +15 -19
- llvmlite/tests/refprune_proto.py +1 -0
- llvmlite/tests/test_binding.py +394 -452
- llvmlite/tests/test_ir.py +176 -67
- llvmlite/tests/test_refprune.py +10 -166
- {llvmlite-0.44.0rc1.dist-info → llvmlite-0.45.0.dist-info}/METADATA +13 -8
- llvmlite-0.45.0.dist-info/RECORD +44 -0
- {llvmlite-0.44.0rc1.dist-info → llvmlite-0.45.0.dist-info}/WHEEL +1 -1
- llvmlite/binding/passmanagers.py +0 -946
- llvmlite/binding/transforms.py +0 -151
- llvmlite-0.44.0rc1.dist-info/LICENSE.thirdparty +0 -225
- llvmlite-0.44.0rc1.dist-info/RECORD +0 -46
- {llvmlite-0.44.0rc1.dist-info → llvmlite-0.45.0.dist-info/licenses}/LICENSE +0 -0
- {llvmlite-0.44.0rc1.dist-info → llvmlite-0.45.0.dist-info}/top_level.txt +0 -0
llvmlite/tests/test_ir.py
CHANGED
|
@@ -12,9 +12,7 @@ import unittest
|
|
|
12
12
|
from . import TestCase
|
|
13
13
|
from llvmlite import ir
|
|
14
14
|
from llvmlite import binding as llvm
|
|
15
|
-
|
|
16
|
-
# FIXME: Remove me once typed pointers are no longer supported.
|
|
17
|
-
from llvmlite import opaque_pointers_enabled
|
|
15
|
+
from llvmlite import ir_layer_typed_pointers_enabled
|
|
18
16
|
|
|
19
17
|
|
|
20
18
|
int1 = ir.IntType(1)
|
|
@@ -123,10 +121,9 @@ class TestBase(TestCase):
|
|
|
123
121
|
|
|
124
122
|
class TestFunction(TestBase):
|
|
125
123
|
|
|
126
|
-
# FIXME: Remove `else' once TP are no longer supported.
|
|
127
124
|
proto = \
|
|
128
125
|
"""i32 @"my_func"(i32 %".1", i32 %".2", double %".3", ptr %".4")""" \
|
|
129
|
-
if
|
|
126
|
+
if not ir_layer_typed_pointers_enabled else \
|
|
130
127
|
"""i32 @"my_func"(i32 %".1", i32 %".2", double %".3", i32* %".4")"""
|
|
131
128
|
|
|
132
129
|
def test_declare(self):
|
|
@@ -146,8 +143,7 @@ class TestFunction(TestBase):
|
|
|
146
143
|
pers = ir.Function(self.module(), tp_pers, '__gxx_personality_v0')
|
|
147
144
|
func.attributes.personality = pers
|
|
148
145
|
asm = self.descr(func).strip()
|
|
149
|
-
|
|
150
|
-
if opaque_pointers_enabled:
|
|
146
|
+
if not ir_layer_typed_pointers_enabled:
|
|
151
147
|
self.assertEqual(asm,
|
|
152
148
|
("declare %s alwaysinline convergent optsize "
|
|
153
149
|
"alignstack(16) "
|
|
@@ -172,8 +168,7 @@ class TestFunction(TestBase):
|
|
|
172
168
|
func.args[3].add_attribute("nonnull")
|
|
173
169
|
func.return_value.add_attribute("noalias")
|
|
174
170
|
asm = self.descr(func).strip()
|
|
175
|
-
|
|
176
|
-
if opaque_pointers_enabled:
|
|
171
|
+
if not ir_layer_typed_pointers_enabled:
|
|
177
172
|
self.assertEqual(asm,
|
|
178
173
|
"""declare noalias i32 @"my_func"(i32 zeroext %".1", i32 dereferenceable(5) dereferenceable_or_null(10) %".2", double %".3", ptr nonnull align 4 %".4")""" # noqa E501
|
|
179
174
|
)
|
|
@@ -284,12 +279,11 @@ class TestFunction(TestBase):
|
|
|
284
279
|
assume = module.declare_intrinsic('llvm.assume')
|
|
285
280
|
self.check_descr(self.descr(powi).strip(), """\
|
|
286
281
|
declare double @"llvm.powi.f64"(double %".1", i32 %".2")""")
|
|
287
|
-
|
|
288
|
-
if opaque_pointers_enabled:
|
|
282
|
+
if not ir_layer_typed_pointers_enabled:
|
|
289
283
|
self.check_descr(self.descr(memset).strip(), """\
|
|
290
|
-
declare void @"llvm.memset.
|
|
284
|
+
declare void @"llvm.memset.p0.i32"(ptr %".1", i8 %".2", i32 %".3", i1 %".4")""") # noqa E501
|
|
291
285
|
self.check_descr(self.descr(memcpy).strip(), """\
|
|
292
|
-
declare void @"llvm.memcpy.
|
|
286
|
+
declare void @"llvm.memcpy.p0.p0.i32"(ptr %".1", ptr %".2", i32 %".3", i1 %".4")""") # noqa E501
|
|
293
287
|
else:
|
|
294
288
|
self.check_descr(self.descr(memset).strip(), """\
|
|
295
289
|
declare void @"llvm.memset.p0i8.i32"(i8* %".1", i8 %".2", i32 %".3", i1 %".4")""") # noqa E501
|
|
@@ -402,8 +396,7 @@ class TestIR(TestBase):
|
|
|
402
396
|
# A null metadata (typed) value
|
|
403
397
|
mod = self.module()
|
|
404
398
|
mod.add_metadata([int32.as_pointer()(None)])
|
|
405
|
-
|
|
406
|
-
if opaque_pointers_enabled:
|
|
399
|
+
if not ir_layer_typed_pointers_enabled:
|
|
407
400
|
self.assert_ir_line("!0 = !{ ptr null }", mod)
|
|
408
401
|
else:
|
|
409
402
|
self.assert_ir_line("!0 = !{ i32* null }", mod)
|
|
@@ -490,6 +483,71 @@ class TestIR(TestBase):
|
|
|
490
483
|
'"foo")', strmod)
|
|
491
484
|
self.assert_valid_ir(mod)
|
|
492
485
|
|
|
486
|
+
def test_debug_info_3(self):
|
|
487
|
+
# Identical DIBasicType metadata nodes should be merged
|
|
488
|
+
mod = self.module()
|
|
489
|
+
di1 = mod.add_debug_info("DIBasicType", {
|
|
490
|
+
"name": "i8",
|
|
491
|
+
"size": 8,
|
|
492
|
+
"encoding": ir.DIToken("DW_ATE_unsigned")
|
|
493
|
+
})
|
|
494
|
+
di2 = mod.add_debug_info("DIBasicType", {
|
|
495
|
+
"name": "i8",
|
|
496
|
+
"size": 8,
|
|
497
|
+
"encoding": ir.DIToken("DW_ATE_unsigned")
|
|
498
|
+
})
|
|
499
|
+
di3 = mod.add_debug_info("DIBasicType", {
|
|
500
|
+
"name": "i32",
|
|
501
|
+
"size": 32,
|
|
502
|
+
"encoding": ir.DIToken("DW_ATE_unsigned")
|
|
503
|
+
})
|
|
504
|
+
di4 = mod.add_debug_info("DIBasicType", {
|
|
505
|
+
"name": "i8",
|
|
506
|
+
"size": 8,
|
|
507
|
+
"encoding": ir.DIToken("DW_ATE_unsigned")
|
|
508
|
+
})
|
|
509
|
+
di5 = mod.add_debug_info("DIBasicType", {
|
|
510
|
+
"name": "i8",
|
|
511
|
+
"size": 8,
|
|
512
|
+
"encoding": ir.DIToken("DW_ATE_unsigned")
|
|
513
|
+
})
|
|
514
|
+
di6 = mod.add_debug_info("DIBasicType", {
|
|
515
|
+
"name": "i32",
|
|
516
|
+
"size": 32,
|
|
517
|
+
"encoding": ir.DIToken("DW_ATE_unsigned")
|
|
518
|
+
})
|
|
519
|
+
di7 = mod.add_debug_info("DIBasicType", {
|
|
520
|
+
"name": "i64",
|
|
521
|
+
"size": 64,
|
|
522
|
+
"encoding": ir.DIToken("DW_ATE_signed")
|
|
523
|
+
})
|
|
524
|
+
di8 = mod.add_debug_info("DIBasicType", {
|
|
525
|
+
"name": "i64",
|
|
526
|
+
"size": 64,
|
|
527
|
+
"encoding": ir.DIToken("DW_ATE_signed")
|
|
528
|
+
})
|
|
529
|
+
di9 = mod.add_debug_info("DIBasicType", {
|
|
530
|
+
"name": "i64",
|
|
531
|
+
"size": 64,
|
|
532
|
+
"encoding": ir.DIToken("DW_ATE_signed")
|
|
533
|
+
})
|
|
534
|
+
self.assertIs(di1, di2)
|
|
535
|
+
self.assertIs(di1, di4)
|
|
536
|
+
self.assertIs(di1, di5)
|
|
537
|
+
self.assertIs(di3, di6)
|
|
538
|
+
self.assertIs(di7, di8)
|
|
539
|
+
self.assertIs(di7, di9)
|
|
540
|
+
self.assertEqual(len({di1, di2, di3, di4, di5, di6, di7, di8, di9}), 3)
|
|
541
|
+
# Check output
|
|
542
|
+
strmod = str(mod)
|
|
543
|
+
self.assert_ir_line('!0 = !DIBasicType(encoding: DW_ATE_unsigned, '
|
|
544
|
+
'name: "i8", size: 8)', strmod)
|
|
545
|
+
self.assert_ir_line('!1 = !DIBasicType(encoding: DW_ATE_unsigned, '
|
|
546
|
+
'name: "i32", size: 32)', strmod)
|
|
547
|
+
self.assert_ir_line('!2 = !DIBasicType(encoding: DW_ATE_signed, '
|
|
548
|
+
'name: "i64", size: 64)', strmod)
|
|
549
|
+
self.assert_valid_ir(mod)
|
|
550
|
+
|
|
493
551
|
def test_debug_info_gvar(self):
|
|
494
552
|
# This test defines a module with a global variable named 'gvar'.
|
|
495
553
|
# When the module is compiled and linked with a main function, gdb can
|
|
@@ -623,8 +681,7 @@ class TestGlobalValues(TestBase):
|
|
|
623
681
|
with self.assertRaises(KeyError):
|
|
624
682
|
mod.get_global('kkk')
|
|
625
683
|
# Globals should have a useful repr()
|
|
626
|
-
|
|
627
|
-
if opaque_pointers_enabled:
|
|
684
|
+
if not ir_layer_typed_pointers_enabled:
|
|
628
685
|
self.assertEqual(repr(globdouble),
|
|
629
686
|
"<ir.GlobalVariable 'globdouble' of type 'ptr'>")
|
|
630
687
|
else:
|
|
@@ -1027,6 +1084,11 @@ my_block:
|
|
|
1027
1084
|
self.assertEqual(j.type, ir.VoidType())
|
|
1028
1085
|
k = builder.load_atomic(c, ordering="seq_cst", align=4, name='k')
|
|
1029
1086
|
self.assertEqual(k.type, int32)
|
|
1087
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1088
|
+
ptr = ir.Constant(ir.PointerType(), None)
|
|
1089
|
+
else:
|
|
1090
|
+
ptr = ir.Constant(ir.PointerType(int32), None)
|
|
1091
|
+
builder.store(ir.Constant(int32, 5), ptr)
|
|
1030
1092
|
# Not pointer types
|
|
1031
1093
|
with self.assertRaises(TypeError):
|
|
1032
1094
|
builder.store(b, a)
|
|
@@ -1035,8 +1097,8 @@ my_block:
|
|
|
1035
1097
|
# Mismatching pointer type
|
|
1036
1098
|
with self.assertRaises(TypeError) as cm:
|
|
1037
1099
|
builder.store(b, e)
|
|
1038
|
-
|
|
1039
|
-
if
|
|
1100
|
+
|
|
1101
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1040
1102
|
self.assertEqual(str(cm.exception),
|
|
1041
1103
|
"cannot store i32 to ptr: mismatching types")
|
|
1042
1104
|
self.check_block(block, """\
|
|
@@ -1051,6 +1113,7 @@ my_block:
|
|
|
1051
1113
|
%"i" = load i32, ptr %"c", align 1
|
|
1052
1114
|
store atomic i32 %".2", ptr %"c" seq_cst, align 4
|
|
1053
1115
|
%"k" = load atomic i32, ptr %"c" seq_cst, align 4
|
|
1116
|
+
store i32 5, ptr null
|
|
1054
1117
|
""")
|
|
1055
1118
|
else:
|
|
1056
1119
|
self.assertEqual(str(cm.exception),
|
|
@@ -1067,6 +1130,7 @@ my_block:
|
|
|
1067
1130
|
%"i" = load i32, i32* %"c", align 1
|
|
1068
1131
|
store atomic i32 %".2", i32* %"c" seq_cst, align 4
|
|
1069
1132
|
%"k" = load atomic i32, i32* %"c" seq_cst, align 4
|
|
1133
|
+
store i32 5, i32* null
|
|
1070
1134
|
""")
|
|
1071
1135
|
|
|
1072
1136
|
def test_gep(self):
|
|
@@ -1076,8 +1140,7 @@ my_block:
|
|
|
1076
1140
|
c = builder.alloca(ir.PointerType(int32), name='c')
|
|
1077
1141
|
d = builder.gep(c, [ir.Constant(int32, 5), a], name='d')
|
|
1078
1142
|
self.assertEqual(d.type, ir.PointerType(int32))
|
|
1079
|
-
|
|
1080
|
-
if opaque_pointers_enabled:
|
|
1143
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1081
1144
|
self.check_block(block, """\
|
|
1082
1145
|
my_block:
|
|
1083
1146
|
%"c" = alloca ptr
|
|
@@ -1102,8 +1165,7 @@ my_block:
|
|
|
1102
1165
|
d = builder.bitcast(a, ls.as_pointer(), name='d')
|
|
1103
1166
|
e = builder.gep(d, [ir.Constant(int32, x) for x in [0, 3]], name='e')
|
|
1104
1167
|
self.assertEqual(e.type, ir.PointerType(int8ptr))
|
|
1105
|
-
|
|
1106
|
-
if opaque_pointers_enabled:
|
|
1168
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1107
1169
|
self.check_block(block, """\
|
|
1108
1170
|
my_block:
|
|
1109
1171
|
%"d" = bitcast i32 %".1" to ptr
|
|
@@ -1129,8 +1191,7 @@ my_block:
|
|
|
1129
1191
|
e = builder.gep(d, [ir.Constant(int32, x) for x in [0, 3]], name='e')
|
|
1130
1192
|
self.assertEqual(e.type.addrspace, addrspace)
|
|
1131
1193
|
self.assertEqual(e.type, ir.PointerType(int8ptr, addrspace=addrspace))
|
|
1132
|
-
|
|
1133
|
-
if opaque_pointers_enabled:
|
|
1194
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1134
1195
|
self.check_block(block, """\
|
|
1135
1196
|
my_block:
|
|
1136
1197
|
%"d" = bitcast i32 %".1" to ptr addrspace(4)
|
|
@@ -1149,8 +1210,7 @@ my_block:
|
|
|
1149
1210
|
a, b = builder.function.args[:2]
|
|
1150
1211
|
addrspace = 4
|
|
1151
1212
|
c = builder.alloca(ir.PointerType(int32, addrspace=addrspace), name='c')
|
|
1152
|
-
|
|
1153
|
-
if opaque_pointers_enabled:
|
|
1213
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1154
1214
|
self.assertEqual(str(c.type), 'ptr')
|
|
1155
1215
|
else:
|
|
1156
1216
|
self.assertEqual(str(c.type), 'i32 addrspace(4)**')
|
|
@@ -1159,8 +1219,7 @@ my_block:
|
|
|
1159
1219
|
self.assertEqual(d.type.addrspace, addrspace)
|
|
1160
1220
|
e = builder.gep(d, [ir.Constant(int32, 10)], name='e')
|
|
1161
1221
|
self.assertEqual(e.type.addrspace, addrspace)
|
|
1162
|
-
|
|
1163
|
-
if opaque_pointers_enabled:
|
|
1222
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1164
1223
|
self.check_block(block, """\
|
|
1165
1224
|
my_block:
|
|
1166
1225
|
%"c" = alloca ptr addrspace(4)
|
|
@@ -1221,8 +1280,7 @@ my_block:
|
|
|
1221
1280
|
# Replacement value has the wrong type
|
|
1222
1281
|
builder.insert_value(c_inner, a, 1)
|
|
1223
1282
|
|
|
1224
|
-
|
|
1225
|
-
if opaque_pointers_enabled:
|
|
1283
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1226
1284
|
self.check_block(block, """\
|
|
1227
1285
|
my_block:
|
|
1228
1286
|
%"c" = extractvalue {i32, i1} {i32 4, i1 true}, 0
|
|
@@ -1270,8 +1328,7 @@ my_block:
|
|
|
1270
1328
|
j = builder.inttoptr(i, ir.PointerType(int8), 'j') # noqa F841
|
|
1271
1329
|
k = builder.bitcast(a, flt, "k") # noqa F841
|
|
1272
1330
|
self.assertFalse(block.is_terminated)
|
|
1273
|
-
|
|
1274
|
-
if opaque_pointers_enabled:
|
|
1331
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1275
1332
|
self.check_block(block, """\
|
|
1276
1333
|
my_block:
|
|
1277
1334
|
%"c" = trunc i32 %".1" to i8
|
|
@@ -1311,8 +1368,7 @@ my_block:
|
|
|
1311
1368
|
c = builder.alloca(int32, name='c')
|
|
1312
1369
|
d = builder.atomic_rmw('add', c, a, 'monotonic', 'd')
|
|
1313
1370
|
self.assertEqual(d.type, int32)
|
|
1314
|
-
|
|
1315
|
-
if opaque_pointers_enabled:
|
|
1371
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1316
1372
|
self.check_block(block, """\
|
|
1317
1373
|
my_block:
|
|
1318
1374
|
%"c" = alloca i32
|
|
@@ -1374,8 +1430,7 @@ my_block:
|
|
|
1374
1430
|
indirectbr.add_destination(bb_1)
|
|
1375
1431
|
indirectbr.add_destination(bb_2)
|
|
1376
1432
|
self.assertTrue(block.is_terminated)
|
|
1377
|
-
|
|
1378
|
-
if opaque_pointers_enabled:
|
|
1433
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1379
1434
|
self.check_block(block, """\
|
|
1380
1435
|
my_block:
|
|
1381
1436
|
indirectbr ptr blockaddress(@"my_func", %"b_1"), [label %"b_1", label %"b_2"]
|
|
@@ -1497,8 +1552,7 @@ my_block:
|
|
|
1497
1552
|
a = builder.alloca(int32, name="a")
|
|
1498
1553
|
b = builder.module.add_metadata(())
|
|
1499
1554
|
builder.call(dbg_declare, (a, b, b))
|
|
1500
|
-
|
|
1501
|
-
if opaque_pointers_enabled:
|
|
1555
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1502
1556
|
self.check_block(block, """\
|
|
1503
1557
|
my_block:
|
|
1504
1558
|
%"a" = alloca i32
|
|
@@ -1528,8 +1582,7 @@ my_block:
|
|
|
1528
1582
|
2: 'noalias'
|
|
1529
1583
|
}
|
|
1530
1584
|
)
|
|
1531
|
-
|
|
1532
|
-
if opaque_pointers_enabled:
|
|
1585
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1533
1586
|
self.check_block_regex(block, """\
|
|
1534
1587
|
my_block:
|
|
1535
1588
|
%"retval" = alloca i32
|
|
@@ -1620,8 +1673,7 @@ my_block:
|
|
|
1620
1673
|
2: 'noalias'
|
|
1621
1674
|
}
|
|
1622
1675
|
)
|
|
1623
|
-
|
|
1624
|
-
if opaque_pointers_enabled:
|
|
1676
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1625
1677
|
self.check_block_regex(block, """\
|
|
1626
1678
|
my_block:
|
|
1627
1679
|
%"retval" = alloca i32
|
|
@@ -1650,8 +1702,7 @@ my_block:
|
|
|
1650
1702
|
lp.add_clause(ir.FilterClause(ir.Constant(ir.ArrayType(
|
|
1651
1703
|
int_typeinfo.type, 1), [int_typeinfo])))
|
|
1652
1704
|
builder.resume(lp)
|
|
1653
|
-
|
|
1654
|
-
if opaque_pointers_enabled:
|
|
1705
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1655
1706
|
self.check_block(block, """\
|
|
1656
1707
|
my_block:
|
|
1657
1708
|
%"lp" = landingpad {i32, ptr}
|
|
@@ -2338,8 +2389,7 @@ class TestBuilderMisc(TestBase):
|
|
|
2338
2389
|
builder = ir.IRBuilder(block)
|
|
2339
2390
|
builder.debug_metadata = builder.module.add_metadata([])
|
|
2340
2391
|
builder.alloca(ir.PointerType(int32), name='c')
|
|
2341
|
-
|
|
2342
|
-
if opaque_pointers_enabled:
|
|
2392
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2343
2393
|
self.check_block(block, """\
|
|
2344
2394
|
my_block:
|
|
2345
2395
|
%"c" = alloca ptr, !dbg !0
|
|
@@ -2404,6 +2454,75 @@ class TestTypes(TestBase):
|
|
|
2404
2454
|
self.assertFalse(tp == other, (tp, other))
|
|
2405
2455
|
self.assertTrue(tp != other, (tp, other))
|
|
2406
2456
|
|
|
2457
|
+
def test_ptr_comparisons(self):
|
|
2458
|
+
# Create instances of:
|
|
2459
|
+
# * Opaque pointers.
|
|
2460
|
+
# * Typed pointers of i1's.
|
|
2461
|
+
# * Typed pointers of i8's.
|
|
2462
|
+
# The choice of types for the typed pointers are not consequential -
|
|
2463
|
+
# they just need to differ. Each pointer class has two instances, one
|
|
2464
|
+
# in address space 0, another in address space 1.
|
|
2465
|
+
ptrs = {
|
|
2466
|
+
'op_a0': ir.PointerType(),
|
|
2467
|
+
'op_a1': ir.PointerType(addrspace=1),
|
|
2468
|
+
'tp_i1_a0': ir.PointerType(int1),
|
|
2469
|
+
'tp_i1_a1': ir.PointerType(int1, addrspace=1),
|
|
2470
|
+
'tp_i8_a0': ir.PointerType(int8),
|
|
2471
|
+
'tp_i8_a1': ir.PointerType(int8, addrspace=1),
|
|
2472
|
+
}
|
|
2473
|
+
|
|
2474
|
+
def assert_eq(ptr1, ptr2):
|
|
2475
|
+
self.assertTrue(ptr1 == ptr2, (ptr1, ptr2))
|
|
2476
|
+
self.assertTrue(ptr2 == ptr1, (ptr2, ptr1))
|
|
2477
|
+
|
|
2478
|
+
self.assertFalse(ptr1 != ptr2, (ptr1, ptr2))
|
|
2479
|
+
self.assertFalse(ptr2 != ptr1, (ptr2, ptr1))
|
|
2480
|
+
|
|
2481
|
+
def assert_ne(ptr1, ptr2):
|
|
2482
|
+
self.assertFalse(ptr1 == ptr2, (ptr1, ptr2))
|
|
2483
|
+
self.assertFalse(ptr2 == ptr1, (ptr2, ptr1))
|
|
2484
|
+
|
|
2485
|
+
self.assertTrue(ptr1 != ptr2, (ptr1, ptr2))
|
|
2486
|
+
self.assertTrue(ptr2 != ptr1, (ptr2, ptr1))
|
|
2487
|
+
|
|
2488
|
+
for ptr in ptrs.values():
|
|
2489
|
+
# Compare the pointers against any non-pointer type.
|
|
2490
|
+
for other in self.assorted_types():
|
|
2491
|
+
if not isinstance(other, ir.PointerType):
|
|
2492
|
+
assert_ne(ptr, other)
|
|
2493
|
+
# Compare the pointers against themselves.
|
|
2494
|
+
assert_eq(ptr, ptr)
|
|
2495
|
+
|
|
2496
|
+
# Compare the pointers against each other.
|
|
2497
|
+
# Opaque pointers are always equal, unless their address space differs.
|
|
2498
|
+
# Typed pointers always differ, unless their pointee type and address
|
|
2499
|
+
# space match.
|
|
2500
|
+
assert_ne(ptrs['op_a0'], ptrs['op_a1'])
|
|
2501
|
+
assert_eq(ptrs['op_a0'], ptrs['tp_i1_a0'])
|
|
2502
|
+
assert_ne(ptrs['op_a0'], ptrs['tp_i1_a1'])
|
|
2503
|
+
assert_eq(ptrs['op_a0'], ptrs['tp_i8_a0'])
|
|
2504
|
+
assert_ne(ptrs['op_a0'], ptrs['tp_i8_a1'])
|
|
2505
|
+
assert_ne(ptrs['op_a1'], ptrs['tp_i1_a0'])
|
|
2506
|
+
assert_eq(ptrs['op_a1'], ptrs['tp_i1_a1'])
|
|
2507
|
+
assert_ne(ptrs['op_a1'], ptrs['tp_i8_a0'])
|
|
2508
|
+
assert_eq(ptrs['op_a1'], ptrs['tp_i8_a1'])
|
|
2509
|
+
assert_ne(ptrs['tp_i1_a0'], ptrs['tp_i1_a1'])
|
|
2510
|
+
assert_ne(ptrs['tp_i1_a0'], ptrs['tp_i8_a0'])
|
|
2511
|
+
assert_ne(ptrs['tp_i1_a0'], ptrs['tp_i8_a1'])
|
|
2512
|
+
assert_ne(ptrs['tp_i1_a1'], ptrs['tp_i8_a0'])
|
|
2513
|
+
assert_ne(ptrs['tp_i1_a1'], ptrs['tp_i8_a1'])
|
|
2514
|
+
assert_ne(ptrs['tp_i8_a0'], ptrs['tp_i8_a1'])
|
|
2515
|
+
|
|
2516
|
+
def test_ptr_intrinsic_name(self):
|
|
2517
|
+
self.assertEqual(ir.PointerType().intrinsic_name, 'p0')
|
|
2518
|
+
self.assertEqual(ir.PointerType(addrspace=1).intrinsic_name, 'p1')
|
|
2519
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2520
|
+
self.assertEqual(ir.PointerType(int1).intrinsic_name, 'p0')
|
|
2521
|
+
self.assertEqual(ir.PointerType(int1, 1).intrinsic_name, 'p1')
|
|
2522
|
+
else:
|
|
2523
|
+
self.assertEqual(ir.PointerType(int1).intrinsic_name, 'p0i1')
|
|
2524
|
+
self.assertEqual(ir.PointerType(int1, 1).intrinsic_name, 'p1i1')
|
|
2525
|
+
|
|
2407
2526
|
def test_str(self):
|
|
2408
2527
|
"""
|
|
2409
2528
|
Test the string representation of types.
|
|
@@ -2423,8 +2542,7 @@ class TestTypes(TestBase):
|
|
|
2423
2542
|
'i1 (float, ...)')
|
|
2424
2543
|
self.assertEqual(str(ir.FunctionType(int1, (flt, dbl), var_arg=True)),
|
|
2425
2544
|
'i1 (float, double, ...)')
|
|
2426
|
-
|
|
2427
|
-
if opaque_pointers_enabled:
|
|
2545
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2428
2546
|
self.assertEqual(str(ir.PointerType(int32)), 'ptr')
|
|
2429
2547
|
self.assertEqual(str(ir.PointerType(ir.PointerType(int32))), 'ptr')
|
|
2430
2548
|
else:
|
|
@@ -2432,8 +2550,7 @@ class TestTypes(TestBase):
|
|
|
2432
2550
|
self.assertEqual(str(ir.PointerType(ir.PointerType(int32))),
|
|
2433
2551
|
'i32**')
|
|
2434
2552
|
self.assertEqual(str(ir.ArrayType(int1, 5)), '[5 x i1]')
|
|
2435
|
-
|
|
2436
|
-
if opaque_pointers_enabled:
|
|
2553
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2437
2554
|
self.assertEqual(str(ir.ArrayType(ir.PointerType(int1), 5)),
|
|
2438
2555
|
'[5 x ptr]')
|
|
2439
2556
|
self.assertEqual(str(ir.PointerType(ir.ArrayType(int1, 5))), 'ptr')
|
|
@@ -2444,8 +2561,7 @@ class TestTypes(TestBase):
|
|
|
2444
2561
|
'[5 x i1]*')
|
|
2445
2562
|
self.assertEqual(str(ir.LiteralStructType((int1,))), '{i1}')
|
|
2446
2563
|
self.assertEqual(str(ir.LiteralStructType((int1, flt))), '{i1, float}')
|
|
2447
|
-
|
|
2448
|
-
if opaque_pointers_enabled:
|
|
2564
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2449
2565
|
self.assertEqual(str(ir.LiteralStructType((
|
|
2450
2566
|
ir.PointerType(int1), ir.LiteralStructType((int32, int8))))),
|
|
2451
2567
|
'{ptr, {i32, i8}}')
|
|
@@ -2743,8 +2859,7 @@ class TestConstant(TestBase):
|
|
|
2743
2859
|
tp = ir.LiteralStructType((flt, int1))
|
|
2744
2860
|
gv = ir.GlobalVariable(m, tp, "myconstant")
|
|
2745
2861
|
c = gv.gep([ir.Constant(int32, x) for x in (0, 1)])
|
|
2746
|
-
|
|
2747
|
-
if opaque_pointers_enabled:
|
|
2862
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2748
2863
|
self.assertEqual(str(c),
|
|
2749
2864
|
'getelementptr ({float, i1}, ptr @"myconstant", i32 0, i32 1)') # noqa E501
|
|
2750
2865
|
else:
|
|
@@ -2758,8 +2873,7 @@ class TestConstant(TestBase):
|
|
|
2758
2873
|
|
|
2759
2874
|
const_ptr = ir.Constant(tp.as_pointer(), None)
|
|
2760
2875
|
c2 = const_ptr.gep([ir.Constant(int32, 0)])
|
|
2761
|
-
|
|
2762
|
-
if opaque_pointers_enabled:
|
|
2876
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2763
2877
|
self.assertEqual(str(c2),
|
|
2764
2878
|
'getelementptr ({float, i1}, ptr null, i32 0)') # noqa E501
|
|
2765
2879
|
else:
|
|
@@ -2776,8 +2890,7 @@ class TestConstant(TestBase):
|
|
|
2776
2890
|
self.assertEqual(gv.addrspace, addrspace)
|
|
2777
2891
|
c = gv.gep([ir.Constant(int32, x) for x in (0, 1)])
|
|
2778
2892
|
self.assertEqual(c.type.addrspace, addrspace)
|
|
2779
|
-
|
|
2780
|
-
if opaque_pointers_enabled:
|
|
2893
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2781
2894
|
self.assertEqual(str(c),
|
|
2782
2895
|
('getelementptr ({float, i1}, ptr '
|
|
2783
2896
|
'addrspace(4) @"myconstant", i32 0, i32 1)'))
|
|
@@ -2811,8 +2924,7 @@ class TestConstant(TestBase):
|
|
|
2811
2924
|
m = self.module()
|
|
2812
2925
|
gv = ir.GlobalVariable(m, int32, "myconstant")
|
|
2813
2926
|
c = gv.bitcast(int64.as_pointer())
|
|
2814
|
-
|
|
2815
|
-
if opaque_pointers_enabled:
|
|
2927
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2816
2928
|
self.assertEqual(str(c), 'bitcast (ptr @"myconstant" to ptr)')
|
|
2817
2929
|
else:
|
|
2818
2930
|
self.assertEqual(str(c), 'bitcast (i32* @"myconstant" to i64*)')
|
|
@@ -2840,8 +2952,7 @@ class TestConstant(TestBase):
|
|
|
2840
2952
|
|
|
2841
2953
|
self.assertRaises(TypeError, one.ptrtoint, int64)
|
|
2842
2954
|
self.assertRaises(TypeError, ptr.ptrtoint, flt)
|
|
2843
|
-
|
|
2844
|
-
if opaque_pointers_enabled:
|
|
2955
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2845
2956
|
self.assertEqual(str(c), 'ptrtoint (ptr null to i32)')
|
|
2846
2957
|
else:
|
|
2847
2958
|
self.assertEqual(str(c), 'ptrtoint (i64* null to i32)')
|
|
@@ -2850,8 +2961,7 @@ class TestConstant(TestBase):
|
|
|
2850
2961
|
m = self.module()
|
|
2851
2962
|
gv = ir.GlobalVariable(m, int32, "myconstant")
|
|
2852
2963
|
c = gv.ptrtoint(int64)
|
|
2853
|
-
|
|
2854
|
-
if opaque_pointers_enabled:
|
|
2964
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2855
2965
|
self.assertEqual(str(c), 'ptrtoint (ptr @"myconstant" to i64)')
|
|
2856
2966
|
|
|
2857
2967
|
self.assertRaisesRegex(
|
|
@@ -2882,8 +2992,7 @@ class TestConstant(TestBase):
|
|
|
2882
2992
|
|
|
2883
2993
|
self.assertRaises(TypeError, one.inttoptr, int64)
|
|
2884
2994
|
self.assertRaises(TypeError, pi.inttoptr, int64.as_pointer())
|
|
2885
|
-
|
|
2886
|
-
if opaque_pointers_enabled:
|
|
2995
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2887
2996
|
self.assertEqual(str(c), 'inttoptr (i32 1 to ptr)')
|
|
2888
2997
|
else:
|
|
2889
2998
|
self.assertEqual(str(c), 'inttoptr (i32 1 to i64*)')
|