llvmlite 0.44.0rc2__cp313-cp313-win_amd64.whl → 0.45.0__cp313-cp313-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/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 +169 -68
- llvmlite/tests/test_refprune.py +10 -166
- {llvmlite-0.44.0rc2.dist-info → llvmlite-0.45.0.dist-info}/METADATA +13 -8
- llvmlite-0.45.0.dist-info/RECORD +44 -0
- {llvmlite-0.44.0rc2.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.0rc2.dist-info/LICENSE.thirdparty +0 -225
- llvmlite-0.44.0rc2.dist-info/RECORD +0 -46
- {llvmlite-0.44.0rc2.dist-info → llvmlite-0.45.0.dist-info/licenses}/LICENSE +0 -0
- {llvmlite-0.44.0rc2.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,7 +1084,7 @@ 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)
|
|
1030
|
-
if
|
|
1087
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1031
1088
|
ptr = ir.Constant(ir.PointerType(), None)
|
|
1032
1089
|
else:
|
|
1033
1090
|
ptr = ir.Constant(ir.PointerType(int32), None)
|
|
@@ -1041,8 +1098,7 @@ my_block:
|
|
|
1041
1098
|
with self.assertRaises(TypeError) as cm:
|
|
1042
1099
|
builder.store(b, e)
|
|
1043
1100
|
|
|
1044
|
-
|
|
1045
|
-
if opaque_pointers_enabled:
|
|
1101
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1046
1102
|
self.assertEqual(str(cm.exception),
|
|
1047
1103
|
"cannot store i32 to ptr: mismatching types")
|
|
1048
1104
|
self.check_block(block, """\
|
|
@@ -1084,8 +1140,7 @@ my_block:
|
|
|
1084
1140
|
c = builder.alloca(ir.PointerType(int32), name='c')
|
|
1085
1141
|
d = builder.gep(c, [ir.Constant(int32, 5), a], name='d')
|
|
1086
1142
|
self.assertEqual(d.type, ir.PointerType(int32))
|
|
1087
|
-
|
|
1088
|
-
if opaque_pointers_enabled:
|
|
1143
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1089
1144
|
self.check_block(block, """\
|
|
1090
1145
|
my_block:
|
|
1091
1146
|
%"c" = alloca ptr
|
|
@@ -1110,8 +1165,7 @@ my_block:
|
|
|
1110
1165
|
d = builder.bitcast(a, ls.as_pointer(), name='d')
|
|
1111
1166
|
e = builder.gep(d, [ir.Constant(int32, x) for x in [0, 3]], name='e')
|
|
1112
1167
|
self.assertEqual(e.type, ir.PointerType(int8ptr))
|
|
1113
|
-
|
|
1114
|
-
if opaque_pointers_enabled:
|
|
1168
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1115
1169
|
self.check_block(block, """\
|
|
1116
1170
|
my_block:
|
|
1117
1171
|
%"d" = bitcast i32 %".1" to ptr
|
|
@@ -1137,8 +1191,7 @@ my_block:
|
|
|
1137
1191
|
e = builder.gep(d, [ir.Constant(int32, x) for x in [0, 3]], name='e')
|
|
1138
1192
|
self.assertEqual(e.type.addrspace, addrspace)
|
|
1139
1193
|
self.assertEqual(e.type, ir.PointerType(int8ptr, addrspace=addrspace))
|
|
1140
|
-
|
|
1141
|
-
if opaque_pointers_enabled:
|
|
1194
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1142
1195
|
self.check_block(block, """\
|
|
1143
1196
|
my_block:
|
|
1144
1197
|
%"d" = bitcast i32 %".1" to ptr addrspace(4)
|
|
@@ -1157,8 +1210,7 @@ my_block:
|
|
|
1157
1210
|
a, b = builder.function.args[:2]
|
|
1158
1211
|
addrspace = 4
|
|
1159
1212
|
c = builder.alloca(ir.PointerType(int32, addrspace=addrspace), name='c')
|
|
1160
|
-
|
|
1161
|
-
if opaque_pointers_enabled:
|
|
1213
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1162
1214
|
self.assertEqual(str(c.type), 'ptr')
|
|
1163
1215
|
else:
|
|
1164
1216
|
self.assertEqual(str(c.type), 'i32 addrspace(4)**')
|
|
@@ -1167,8 +1219,7 @@ my_block:
|
|
|
1167
1219
|
self.assertEqual(d.type.addrspace, addrspace)
|
|
1168
1220
|
e = builder.gep(d, [ir.Constant(int32, 10)], name='e')
|
|
1169
1221
|
self.assertEqual(e.type.addrspace, addrspace)
|
|
1170
|
-
|
|
1171
|
-
if opaque_pointers_enabled:
|
|
1222
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1172
1223
|
self.check_block(block, """\
|
|
1173
1224
|
my_block:
|
|
1174
1225
|
%"c" = alloca ptr addrspace(4)
|
|
@@ -1229,8 +1280,7 @@ my_block:
|
|
|
1229
1280
|
# Replacement value has the wrong type
|
|
1230
1281
|
builder.insert_value(c_inner, a, 1)
|
|
1231
1282
|
|
|
1232
|
-
|
|
1233
|
-
if opaque_pointers_enabled:
|
|
1283
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1234
1284
|
self.check_block(block, """\
|
|
1235
1285
|
my_block:
|
|
1236
1286
|
%"c" = extractvalue {i32, i1} {i32 4, i1 true}, 0
|
|
@@ -1278,8 +1328,7 @@ my_block:
|
|
|
1278
1328
|
j = builder.inttoptr(i, ir.PointerType(int8), 'j') # noqa F841
|
|
1279
1329
|
k = builder.bitcast(a, flt, "k") # noqa F841
|
|
1280
1330
|
self.assertFalse(block.is_terminated)
|
|
1281
|
-
|
|
1282
|
-
if opaque_pointers_enabled:
|
|
1331
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1283
1332
|
self.check_block(block, """\
|
|
1284
1333
|
my_block:
|
|
1285
1334
|
%"c" = trunc i32 %".1" to i8
|
|
@@ -1319,8 +1368,7 @@ my_block:
|
|
|
1319
1368
|
c = builder.alloca(int32, name='c')
|
|
1320
1369
|
d = builder.atomic_rmw('add', c, a, 'monotonic', 'd')
|
|
1321
1370
|
self.assertEqual(d.type, int32)
|
|
1322
|
-
|
|
1323
|
-
if opaque_pointers_enabled:
|
|
1371
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1324
1372
|
self.check_block(block, """\
|
|
1325
1373
|
my_block:
|
|
1326
1374
|
%"c" = alloca i32
|
|
@@ -1382,8 +1430,7 @@ my_block:
|
|
|
1382
1430
|
indirectbr.add_destination(bb_1)
|
|
1383
1431
|
indirectbr.add_destination(bb_2)
|
|
1384
1432
|
self.assertTrue(block.is_terminated)
|
|
1385
|
-
|
|
1386
|
-
if opaque_pointers_enabled:
|
|
1433
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1387
1434
|
self.check_block(block, """\
|
|
1388
1435
|
my_block:
|
|
1389
1436
|
indirectbr ptr blockaddress(@"my_func", %"b_1"), [label %"b_1", label %"b_2"]
|
|
@@ -1505,8 +1552,7 @@ my_block:
|
|
|
1505
1552
|
a = builder.alloca(int32, name="a")
|
|
1506
1553
|
b = builder.module.add_metadata(())
|
|
1507
1554
|
builder.call(dbg_declare, (a, b, b))
|
|
1508
|
-
|
|
1509
|
-
if opaque_pointers_enabled:
|
|
1555
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1510
1556
|
self.check_block(block, """\
|
|
1511
1557
|
my_block:
|
|
1512
1558
|
%"a" = alloca i32
|
|
@@ -1536,8 +1582,7 @@ my_block:
|
|
|
1536
1582
|
2: 'noalias'
|
|
1537
1583
|
}
|
|
1538
1584
|
)
|
|
1539
|
-
|
|
1540
|
-
if opaque_pointers_enabled:
|
|
1585
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1541
1586
|
self.check_block_regex(block, """\
|
|
1542
1587
|
my_block:
|
|
1543
1588
|
%"retval" = alloca i32
|
|
@@ -1628,8 +1673,7 @@ my_block:
|
|
|
1628
1673
|
2: 'noalias'
|
|
1629
1674
|
}
|
|
1630
1675
|
)
|
|
1631
|
-
|
|
1632
|
-
if opaque_pointers_enabled:
|
|
1676
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1633
1677
|
self.check_block_regex(block, """\
|
|
1634
1678
|
my_block:
|
|
1635
1679
|
%"retval" = alloca i32
|
|
@@ -1658,8 +1702,7 @@ my_block:
|
|
|
1658
1702
|
lp.add_clause(ir.FilterClause(ir.Constant(ir.ArrayType(
|
|
1659
1703
|
int_typeinfo.type, 1), [int_typeinfo])))
|
|
1660
1704
|
builder.resume(lp)
|
|
1661
|
-
|
|
1662
|
-
if opaque_pointers_enabled:
|
|
1705
|
+
if not ir_layer_typed_pointers_enabled:
|
|
1663
1706
|
self.check_block(block, """\
|
|
1664
1707
|
my_block:
|
|
1665
1708
|
%"lp" = landingpad {i32, ptr}
|
|
@@ -2346,8 +2389,7 @@ class TestBuilderMisc(TestBase):
|
|
|
2346
2389
|
builder = ir.IRBuilder(block)
|
|
2347
2390
|
builder.debug_metadata = builder.module.add_metadata([])
|
|
2348
2391
|
builder.alloca(ir.PointerType(int32), name='c')
|
|
2349
|
-
|
|
2350
|
-
if opaque_pointers_enabled:
|
|
2392
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2351
2393
|
self.check_block(block, """\
|
|
2352
2394
|
my_block:
|
|
2353
2395
|
%"c" = alloca ptr, !dbg !0
|
|
@@ -2412,6 +2454,75 @@ class TestTypes(TestBase):
|
|
|
2412
2454
|
self.assertFalse(tp == other, (tp, other))
|
|
2413
2455
|
self.assertTrue(tp != other, (tp, other))
|
|
2414
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
|
+
|
|
2415
2526
|
def test_str(self):
|
|
2416
2527
|
"""
|
|
2417
2528
|
Test the string representation of types.
|
|
@@ -2431,8 +2542,7 @@ class TestTypes(TestBase):
|
|
|
2431
2542
|
'i1 (float, ...)')
|
|
2432
2543
|
self.assertEqual(str(ir.FunctionType(int1, (flt, dbl), var_arg=True)),
|
|
2433
2544
|
'i1 (float, double, ...)')
|
|
2434
|
-
|
|
2435
|
-
if opaque_pointers_enabled:
|
|
2545
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2436
2546
|
self.assertEqual(str(ir.PointerType(int32)), 'ptr')
|
|
2437
2547
|
self.assertEqual(str(ir.PointerType(ir.PointerType(int32))), 'ptr')
|
|
2438
2548
|
else:
|
|
@@ -2440,8 +2550,7 @@ class TestTypes(TestBase):
|
|
|
2440
2550
|
self.assertEqual(str(ir.PointerType(ir.PointerType(int32))),
|
|
2441
2551
|
'i32**')
|
|
2442
2552
|
self.assertEqual(str(ir.ArrayType(int1, 5)), '[5 x i1]')
|
|
2443
|
-
|
|
2444
|
-
if opaque_pointers_enabled:
|
|
2553
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2445
2554
|
self.assertEqual(str(ir.ArrayType(ir.PointerType(int1), 5)),
|
|
2446
2555
|
'[5 x ptr]')
|
|
2447
2556
|
self.assertEqual(str(ir.PointerType(ir.ArrayType(int1, 5))), 'ptr')
|
|
@@ -2452,8 +2561,7 @@ class TestTypes(TestBase):
|
|
|
2452
2561
|
'[5 x i1]*')
|
|
2453
2562
|
self.assertEqual(str(ir.LiteralStructType((int1,))), '{i1}')
|
|
2454
2563
|
self.assertEqual(str(ir.LiteralStructType((int1, flt))), '{i1, float}')
|
|
2455
|
-
|
|
2456
|
-
if opaque_pointers_enabled:
|
|
2564
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2457
2565
|
self.assertEqual(str(ir.LiteralStructType((
|
|
2458
2566
|
ir.PointerType(int1), ir.LiteralStructType((int32, int8))))),
|
|
2459
2567
|
'{ptr, {i32, i8}}')
|
|
@@ -2751,8 +2859,7 @@ class TestConstant(TestBase):
|
|
|
2751
2859
|
tp = ir.LiteralStructType((flt, int1))
|
|
2752
2860
|
gv = ir.GlobalVariable(m, tp, "myconstant")
|
|
2753
2861
|
c = gv.gep([ir.Constant(int32, x) for x in (0, 1)])
|
|
2754
|
-
|
|
2755
|
-
if opaque_pointers_enabled:
|
|
2862
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2756
2863
|
self.assertEqual(str(c),
|
|
2757
2864
|
'getelementptr ({float, i1}, ptr @"myconstant", i32 0, i32 1)') # noqa E501
|
|
2758
2865
|
else:
|
|
@@ -2766,8 +2873,7 @@ class TestConstant(TestBase):
|
|
|
2766
2873
|
|
|
2767
2874
|
const_ptr = ir.Constant(tp.as_pointer(), None)
|
|
2768
2875
|
c2 = const_ptr.gep([ir.Constant(int32, 0)])
|
|
2769
|
-
|
|
2770
|
-
if opaque_pointers_enabled:
|
|
2876
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2771
2877
|
self.assertEqual(str(c2),
|
|
2772
2878
|
'getelementptr ({float, i1}, ptr null, i32 0)') # noqa E501
|
|
2773
2879
|
else:
|
|
@@ -2784,8 +2890,7 @@ class TestConstant(TestBase):
|
|
|
2784
2890
|
self.assertEqual(gv.addrspace, addrspace)
|
|
2785
2891
|
c = gv.gep([ir.Constant(int32, x) for x in (0, 1)])
|
|
2786
2892
|
self.assertEqual(c.type.addrspace, addrspace)
|
|
2787
|
-
|
|
2788
|
-
if opaque_pointers_enabled:
|
|
2893
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2789
2894
|
self.assertEqual(str(c),
|
|
2790
2895
|
('getelementptr ({float, i1}, ptr '
|
|
2791
2896
|
'addrspace(4) @"myconstant", i32 0, i32 1)'))
|
|
@@ -2819,8 +2924,7 @@ class TestConstant(TestBase):
|
|
|
2819
2924
|
m = self.module()
|
|
2820
2925
|
gv = ir.GlobalVariable(m, int32, "myconstant")
|
|
2821
2926
|
c = gv.bitcast(int64.as_pointer())
|
|
2822
|
-
|
|
2823
|
-
if opaque_pointers_enabled:
|
|
2927
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2824
2928
|
self.assertEqual(str(c), 'bitcast (ptr @"myconstant" to ptr)')
|
|
2825
2929
|
else:
|
|
2826
2930
|
self.assertEqual(str(c), 'bitcast (i32* @"myconstant" to i64*)')
|
|
@@ -2848,8 +2952,7 @@ class TestConstant(TestBase):
|
|
|
2848
2952
|
|
|
2849
2953
|
self.assertRaises(TypeError, one.ptrtoint, int64)
|
|
2850
2954
|
self.assertRaises(TypeError, ptr.ptrtoint, flt)
|
|
2851
|
-
|
|
2852
|
-
if opaque_pointers_enabled:
|
|
2955
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2853
2956
|
self.assertEqual(str(c), 'ptrtoint (ptr null to i32)')
|
|
2854
2957
|
else:
|
|
2855
2958
|
self.assertEqual(str(c), 'ptrtoint (i64* null to i32)')
|
|
@@ -2858,8 +2961,7 @@ class TestConstant(TestBase):
|
|
|
2858
2961
|
m = self.module()
|
|
2859
2962
|
gv = ir.GlobalVariable(m, int32, "myconstant")
|
|
2860
2963
|
c = gv.ptrtoint(int64)
|
|
2861
|
-
|
|
2862
|
-
if opaque_pointers_enabled:
|
|
2964
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2863
2965
|
self.assertEqual(str(c), 'ptrtoint (ptr @"myconstant" to i64)')
|
|
2864
2966
|
|
|
2865
2967
|
self.assertRaisesRegex(
|
|
@@ -2890,8 +2992,7 @@ class TestConstant(TestBase):
|
|
|
2890
2992
|
|
|
2891
2993
|
self.assertRaises(TypeError, one.inttoptr, int64)
|
|
2892
2994
|
self.assertRaises(TypeError, pi.inttoptr, int64.as_pointer())
|
|
2893
|
-
|
|
2894
|
-
if opaque_pointers_enabled:
|
|
2995
|
+
if not ir_layer_typed_pointers_enabled:
|
|
2895
2996
|
self.assertEqual(str(c), 'inttoptr (i32 1 to ptr)')
|
|
2896
2997
|
else:
|
|
2897
2998
|
self.assertEqual(str(c), 'inttoptr (i32 1 to i64*)')
|