1+ test optimize
2+ set opt_level=speed
3+ target x86_64
4+
5+ ;; iadd has cost 3, imul has cost 10
6+ ;; (rule (simplify (ireduce ty (iadd _ x y))) (iadd ty (ireduce ty x) (ireduce ty y)))
7+
8+ function %f0(i32, i32) -> i16 {
9+ block0(v0: i32, v1: i32):
10+ v2 = imul.i32 v0, v1
11+ v3 = imul.i32 v1, v0
12+ v4 = imul.i32 v2, v3
13+ v5 = imul.i32 v3, v2
14+ v6 = imul.i32 v4, v5
15+ v7 = imul.i32 v6, v6
16+ v8 = imul.i32 v7, v7
17+ v9 = imul.i32 v8, v8
18+ v10 = imul.i32 v9, v9
19+ v11 = imul.i32 v10, v10
20+ v12 = imul.i32 v11, v11
21+ v13 = imul.i32 v12, v12
22+ v14 = imul.i32 v13, v13
23+ v15 = imul.i32 v14, v14
24+ v16 = imul.i32 v15, v15
25+ v17 = imul.i32 v16, v16
26+ v18 = imul.i32 v17, v17
27+ v19 = imul.i32 v18, v18
28+ v20 = imul.i32 v19, v19
29+ v21 = imul.i32 v20, v20
30+ v22 = imul.i32 v21, v21
31+ v23 = imul.i32 v22, v22
32+ v24 = imul.i32 v23, v23
33+ v25 = isub.i32 v24, v1
34+ ;; Chain of imuls saturate to infinity w/o DAG cost model
35+ ;; then do a rewrite to a more expensive thing
36+ v26 = iadd.i32 v24, v25
37+ v27 = ireduce.i16 v26
38+ v28 = ireduce.i16 v0
39+ v29 = iadd.i16 v27, v28
40+ return v29
41+ }
0 commit comments