Skip to content

Commit b95646f

Browse files
committed
Fixing more bugs
1 parent c36c8b1 commit b95646f

File tree

2 files changed

+42
-12
lines changed

2 files changed

+42
-12
lines changed

src/bloqade/analysis/address/impls.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ def len_(
166166
self, interp_: AddressAnalysis, frame: ForwardFrame[Address], stmt: py.Len
167167
):
168168
obj = frame.get(stmt.value)
169-
values = self.get_values(obj)
169+
_, values = self.get_values(obj)
170170

171171
if values is None:
172172
return (Address.top(),)
@@ -188,8 +188,8 @@ def getitem(
188188
obj = frame.get(stmt.obj)
189189
index = frame.get(stmt.index)
190190

191-
values = self.get_values(obj)
192-
if values is None:
191+
typ, values = self.get_values(obj)
192+
if typ is None:
193193
return (Address.top(),)
194194

195195
match obj, index:
@@ -385,17 +385,17 @@ def ifelse(
385385
then_results = interp_.run_ssacfg_region(
386386
then_frame, stmt.then_body, (address_cond,)
387387
)
388-
# interp_.set_values(
389-
# frame, then_frame.entries.keys(), then_frame.entries.values()
390-
# )
388+
interp_.set_values(
389+
frame, then_frame.entries.keys(), then_frame.entries.values()
390+
)
391391

392392
with interp_.new_frame(stmt, has_parent_access=True) as else_frame:
393393
else_results = interp_.run_ssacfg_region(
394394
else_frame, stmt.else_body, (address_cond,)
395395
)
396-
# interp_.set_values(
397-
# frame, else_frame.entries.keys(), else_frame.entries.values()
398-
# )
396+
interp_.set_values(
397+
frame, else_frame.entries.keys(), else_frame.entries.values()
398+
)
399399
# TODO: pick the non-return value
400400
if isinstance(then_results, interp.ReturnValue) and isinstance(
401401
else_results, interp.ReturnValue

test/analysis/address/test_qubit_analysis.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from kirin.analysis import const
44
from kirin.dialects import ilist
55

6-
from bloqade import squin
6+
from bloqade import qubit, squin
77
from bloqade.analysis import address
88

99
# test tuple and indexing
@@ -177,8 +177,38 @@ def main(n: int):
177177
)
178178

179179

180-
if __name__ == "__main__":
181-
test_partial_tuple_add()
180+
def test_partial_tuple_add_failed():
181+
@squin.kernel
182+
def main(n: int):
183+
return (0, 1) + [2, n] # type: ignore
184+
185+
address_analysis = address.AddressAnalysis(main.dialects)
186+
frame, result = address_analysis.run_analysis(main, no_raise=False)
187+
188+
assert result == address.Bottom()
189+
190+
191+
def test_partial_tuple_add_failed_2():
192+
@squin.kernel
193+
def main(n: tuple[int, ...]):
194+
return (0, 1) + n
195+
196+
address_analysis = address.AddressAnalysis(main.dialects)
197+
frame, result = address_analysis.run_analysis(main, no_raise=False)
198+
199+
assert result == address.Unknown()
200+
201+
202+
# need to pass in values from argument types
203+
@pytest.mark.xfail
204+
def test_partial_tuple_slice():
205+
@squin.kernel
206+
def main(q: qubit.Qubit):
207+
return (0, q, 2, q)[1::2]
208+
209+
address_analysis = address.AddressAnalysis(main.dialects)
210+
frame, result = address_analysis.run_analysis(main, no_raise=False)
211+
assert result == address.UnknownReg()
182212

183213

184214
@pytest.mark.xfail

0 commit comments

Comments
 (0)