summary refs log tree commit diff
path: root/test/load3.ssa
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin@c9x.me>2022-12-13 10:50:27 +0100
committerQuentin Carbonneaux <quentin@c9x.me>2022-12-15 09:30:47 +0100
commit99fea1e21174b18ccbd947787bea91140fd802e8 (patch)
tree109fe6ff6dd10595ea1102fef23c55f58f3ba214 /test/load3.ssa
parent26c1c30b7d96d2170195970a8cdb3b024ba7421a (diff)
downloadroux-99fea1e21174b18ccbd947787bea91140fd802e8.tar.gz
bugfix in load elimination
When checking if two slices represent
the same range of memory we must check
that offsets match.

The bug was revealed by a harec test.
Diffstat (limited to 'test/load3.ssa')
-rw-r--r--test/load3.ssa50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/load3.ssa b/test/load3.ssa
new file mode 100644
index 0000000..73d60aa
--- /dev/null
+++ b/test/load3.ssa
@@ -0,0 +1,50 @@
+# regression test for load()
+# see comment below
+
+function w $rand() {
+@start
+	ret 0
+}
+
+function w $chk(w %a, w %b) {
+@start
+	%ok =w ceqw %a, 1
+	%ok1 =w ceqw %b, 0
+	%ok2 =w and %ok, %ok1
+	%ret =w xor %ok2, 1
+	ret %ret
+}
+
+export
+function w $main() {
+@start
+	%s0 =l alloc4 8
+	%s1 =l alloc4 8
+
+	storew 1, %s0
+	%s04 =l add 4, %s0
+	storew 0, %s04
+
+	%rnd =w call $rand()
+	jnz %rnd, @tt, @ff
+@tt
+	jmp @blit
+@ff
+	jmp @blit
+
+@blit
+	# we make sure def() checks
+	# offsets correctly when
+	# processing inserted phis;
+	# if not, %w1 will bogusly
+	# have the same value as %w0
+
+	blit %s0, %s1, 8
+
+	%w0 =w load %s1
+	%s14 =l add 4, %s1
+	%w1 =w load %s14
+
+	%ret =w call $chk(w %w0, w %w1)
+	ret %ret
+}