4747 (subsume inner))
4848
4949;; x-x == 0.
50- (rule (simplify (isub (ty_int ty) x x)) (subsume (iconst_u ty 0)))
50+ (rule (simplify (isub ty x x)) (subsume (iconst_u ty 0)))
5151
5252;; x*1 == x.
5353(rule (simplify (imul ty
318318(rule (simplify (isub ty (bor ty y x) (bxor ty y x))) (band ty x y))
319319
320320;; (~x) + x == -1
321- ;; Keep the generic fold for <=64-bit types, and handle i128 explicitly.
322- (rule (simplify (iadd (fits_in_64 ty) (bnot ty x) x)) (iconst_s ty -1))
323- (rule (simplify (iadd (fits_in_64 ty) x (bnot ty x))) (iconst_s ty -1))
324-
325- (rule (simplify (iadd $I128 (bnot $I128 x) x)) (sextend $I128 (iconst_s $I64 -1)))
326- (rule (simplify (iadd $I128 x (bnot $I128 x))) (sextend $I128 (iconst_s $I64 -1)))
321+ (rule (simplify (iadd ty (bnot ty x) x)) (iconst_s ty -1))
322+ (rule (simplify (iadd ty x (bnot ty x))) (iconst_s ty -1))
327323
328324;; ((x + y) - (x + z)) --> (y - z)
329325(rule (simplify (isub ty (iadd ty x y) (iadd ty x z))) (isub ty y z))
379375(rule (simplify (iadd ty x (iadd ty (isub ty z x) y))) (iadd ty y z))
380376(rule (simplify (iadd ty (iadd ty (isub ty z x) y) x)) (iadd ty y z))
381377
378+ ;; Helper to create a "true" value for a comparison. For scalar integers this is
379+ ;; a value of 1 but for vectors this is -1 since each lane is filled with all
380+ ;; 1s.
381+ (decl cmp_true (Type) Value)
382+ (rule 0 (cmp_true (ty_int ty)) (iconst_u ty 1))
383+ (rule 1 (cmp_true (ty_vec128 ty)) (iconst_s ty -1))
384+
382385;; (x + y) == (y + x) --> true
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 ))
386+ (rule (simplify (eq ty (iadd cty x y) (iadd cty y x))) (cmp_true ty))
387+ (rule (simplify (eq ty (iadd cty y x) (iadd cty x y))) (cmp_true ty))
388+ (rule (simplify (eq ty (iadd cty x y) (iadd cty x y))) (cmp_true ty))
389+ (rule (simplify (eq ty (iadd cty y x) (iadd cty y x))) (cmp_true ty))
387390
388391;; (x - y) != x --> y != 0
389392(rule (simplify (ne cty (isub ty x y) x)) (ne cty y (iconst_u ty 0)))
407410(rule (simplify (ineg ty (imul ty x (ineg ty y)))) (imul ty x y))
408411
409412;; max(x, y) >= x
410- (rule (simplify (sge ty (smax ty x y) x)) (iconst_u ty 1 ))
411- (rule (simplify (sge ty (smax ty y x) x)) (iconst_u ty 1 ))
412- (rule (simplify (sle ty x (smax ty x y))) (iconst_u ty 1 ))
413- (rule (simplify (sle ty x (smax ty y x))) (iconst_u ty 1 ))
414- (rule (simplify (uge ty (umax ty x y) x)) (iconst_u ty 1 ))
415- (rule (simplify (uge ty (umax ty y x) x)) (iconst_u ty 1 ))
416- (rule (simplify (ule ty x (umax ty x y))) (iconst_u ty 1 ))
417- (rule (simplify (ule ty x (umax ty y x))) (iconst_u ty 1 ))
413+ (rule (simplify (sge ty (smax ty x y) x)) (cmp_true ty))
414+ (rule (simplify (sge ty (smax ty y x) x)) (cmp_true ty))
415+ (rule (simplify (sle ty x (smax ty x y))) (cmp_true ty))
416+ (rule (simplify (sle ty x (smax ty y x))) (cmp_true ty))
417+ (rule (simplify (uge ty (umax ty x y) x)) (cmp_true ty))
418+ (rule (simplify (uge ty (umax ty y x) x)) (cmp_true ty))
419+ (rule (simplify (ule ty x (umax ty x y))) (cmp_true ty))
420+ (rule (simplify (ule ty x (umax ty y x))) (cmp_true ty))
418421
419422;; x >= min(x, y)
420- (rule (simplify (sge ty x (smin ty x y))) (iconst_u ty 1 ))
421- (rule (simplify (sge ty x (smin ty y x))) (iconst_u ty 1 ))
422- (rule (simplify (sle ty (smin ty x y) x)) (iconst_u ty 1 ))
423- (rule (simplify (sle ty (smin ty y x) x)) (iconst_u ty 1 ))
424- (rule (simplify (uge ty x (umin ty x y))) (iconst_u ty 1 ))
425- (rule (simplify (uge ty x (umin ty y x))) (iconst_u ty 1 ))
426- (rule (simplify (ule ty (umin ty x y) x)) (iconst_u ty 1 ))
427- (rule (simplify (ule ty (umin ty y x) x)) (iconst_u ty 1 ))
423+ (rule (simplify (sge ty x (smin ty x y))) (cmp_true ty))
424+ (rule (simplify (sge ty x (smin ty y x))) (cmp_true ty))
425+ (rule (simplify (sle ty (smin ty x y) x)) (cmp_true ty))
426+ (rule (simplify (sle ty (smin ty y x) x)) (cmp_true ty))
427+ (rule (simplify (uge ty x (umin ty x y))) (cmp_true ty))
428+ (rule (simplify (uge ty x (umin ty y x))) (cmp_true ty))
429+ (rule (simplify (ule ty (umin ty x y) x)) (cmp_true ty))
430+ (rule (simplify (ule ty (umin ty y x) x)) (cmp_true ty))
428431
429432;; min/max(x,x) --> x
430433(rule (simplify (umin ty x x)) x)
560563(rule (simplify (ugt ty x (umax ty x y))) (iconst_u ty 0))
561564(rule (simplify (ugt ty x (umax ty y x))) (iconst_u ty 0))
562565(rule (simplify (ult ty (umax ty x y) x)) (iconst_u ty 0))
563- (rule (simplify (ult ty (umax ty y x) x)) (iconst_u ty 0))
566+ (rule (simplify (ult ty (umax ty y x) x)) (iconst_u ty 0))
0 commit comments