Skip to content

Commit 1e73c1f

Browse files
authored
Fix panic optimizing vector expressions (#12957)
This commit fixes an accidental regression from #12926 where `iconst_u` was called with vector types which caused a panic. The fix is is to disallow vector types in these ISLE rules and defer vector optimizations to a future commit.
1 parent 0126a94 commit 1e73c1f

File tree

2 files changed

+21
-6
lines changed

2 files changed

+21
-6
lines changed

cranelift/codegen/src/opts/arithmetic.isle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -380,11 +380,11 @@
380380
(rule (simplify (iadd ty (iadd ty (isub ty z x) y) x)) (iadd ty y z))
381381

382382
;; (x + y) == (y + x) --> true
383-
(rule (simplify (eq ty (iadd cty x y) (iadd cty y x))) (iconst_u ty 1))
384-
(rule (simplify (eq ty (iadd cty y x) (iadd cty x y))) (iconst_u ty 1))
385-
(rule (simplify (eq ty (iadd cty x y) (iadd cty x y))) (iconst_u ty 1))
386-
(rule (simplify (eq ty (iadd cty y x) (iadd cty y x))) (iconst_u ty 1))
383+
(rule (simplify (eq (ty_int ty) (iadd cty x y) (iadd cty y x))) (iconst_u ty 1))
384+
(rule (simplify (eq (ty_int ty) (iadd cty y x) (iadd cty x y))) (iconst_u ty 1))
385+
(rule (simplify (eq (ty_int ty) (iadd cty x y) (iadd cty x y))) (iconst_u ty 1))
386+
(rule (simplify (eq (ty_int ty) (iadd cty y x) (iadd cty y x))) (iconst_u ty 1))
387387

388388
;; (x - y) != x --> y != 0
389389
(rule (simplify (ne cty (isub ty x y) x)) (ne cty y (iconst_u ty 0)))
390-
(rule (simplify (ne cty x (isub ty x y))) (ne cty y (iconst_u ty 0)))
390+
(rule (simplify (ne cty x (isub ty x y))) (ne cty y (iconst_u ty 0)))

cranelift/filetests/filetests/egraph/arithmetic-precise.clif

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,21 @@ block0(v0: i32, v1: i32):
234234
; return v5 ; v5 = 1
235235
; }
236236

237+
;; (eq ty (iadd cty x y) (iadd cty y x)) -> 1
238+
function %simplify_vector_icmp_eq_iadd_commute(i32x4, i32x4) -> i32x4 fast {
239+
block0(v0: i32x4, v1: i32x4):
240+
v2 = iadd v0, v1
241+
v3 = iadd v1, v0
242+
v4 = icmp eq v2, v3
243+
return v4
244+
}
245+
246+
; function %simplify_vector_icmp_eq_iadd_commute(i32x4, i32x4) -> i32x4 fast {
247+
; block0(v0: i32x4, v1: i32x4):
248+
; v5 = icmp eq v0, v0
249+
; return v5
250+
; }
251+
237252
;; (x - y) != x --> y != 0
238253
function %simplify_icmp_ne_isub_x(i32, i32) -> i8 fast {
239254
block0(v0: i32, v1: i32):
@@ -247,4 +262,4 @@ block0(v0: i32, v1: i32):
247262
; v4 = iconst.i32 0
248263
; v5 = icmp ne v1, v4 ; v4 = 0
249264
; return v5
250-
; }
265+
; }

0 commit comments

Comments
 (0)