Skip to content

Commit f206a3e

Browse files
authored
disable simplification splat + iconst -> vconst for 64 bit vectors (#11435)
1 parent 698028c commit f206a3e

File tree

2 files changed

+61
-6
lines changed

2 files changed

+61
-6
lines changed

cranelift/codegen/src/opts/cprop.isle

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,17 +201,17 @@
201201

202202
;; A splat of a constant can become a direct `vconst` with the appropriate bit
203203
;; pattern.
204-
(rule (simplify (splat dst (iconst $I8 n)))
204+
(rule (simplify (splat (ty_vec128 dst) (iconst $I8 n)))
205205
(vconst dst (splat8 (u64_uextend_imm64 $I8 n))))
206-
(rule (simplify (splat dst (iconst $I16 n)))
206+
(rule (simplify (splat (ty_vec128 dst) (iconst $I16 n)))
207207
(vconst dst (splat16 (u64_uextend_imm64 $I16 n))))
208-
(rule (simplify (splat dst (iconst $I32 n)))
208+
(rule (simplify (splat (ty_vec128 dst) (iconst $I32 n)))
209209
(vconst dst (splat32 (u64_uextend_imm64 $I32 n))))
210-
(rule (simplify (splat dst (iconst $I64 n)))
210+
(rule (simplify (splat (ty_vec128 dst) (iconst $I64 n)))
211211
(vconst dst (splat64 (u64_uextend_imm64 $I64 n))))
212-
(rule (simplify (splat dst (f32const _ (u32_from_ieee32 n))))
212+
(rule (simplify (splat (ty_vec128 dst) (f32const _ (u32_from_ieee32 n))))
213213
(vconst dst (splat32 n)))
214-
(rule (simplify (splat dst (f64const _ (u64_from_ieee64 n))))
214+
(rule (simplify (splat (ty_vec128 dst) (f64const _ (u64_from_ieee64 n))))
215215
(vconst dst (splat64 n)))
216216

217217
(decl splat8 (u64) Constant)

cranelift/filetests/filetests/egraph/cprop-splat.clif

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,58 @@ block0:
167167
; return v3 ; v3 = const0
168168
; }
169169

170+
function %i8x8() -> i8x8 {
171+
block0:
172+
v1 = iconst.i8 0
173+
v2 = splat.i8x8 v1
174+
return v2
175+
}
176+
177+
; function %i8x8() -> i8x8 fast {
178+
; block0:
179+
; v1 = iconst.i8 0
180+
; v2 = splat.i8x8 v1 ; v1 = 0
181+
; return v2
182+
; }
183+
184+
function %i16x4() -> i16x4 {
185+
block0:
186+
v1 = iconst.i16 0
187+
v2 = splat.i16x4 v1
188+
return v2
189+
}
190+
191+
; function %i16x4() -> i16x4 fast {
192+
; block0:
193+
; v1 = iconst.i16 0
194+
; v2 = splat.i16x4 v1 ; v1 = 0
195+
; return v2
196+
; }
197+
198+
function %i32x2() -> i32x2 {
199+
block0:
200+
v1 = iconst.i32 0
201+
v2 = splat.i32x2 v1
202+
return v2
203+
}
204+
205+
; function %i32x2() -> i32x2 fast {
206+
; block0:
207+
; v1 = iconst.i32 0
208+
; v2 = splat.i32x2 v1 ; v1 = 0
209+
; return v2
210+
; }
211+
212+
function %f32x2() -> f32x2 {
213+
block0:
214+
v1 = f32const 0.0
215+
v2 = splat.f32x2 v1
216+
return v2
217+
}
218+
219+
; function %f32x2() -> f32x2 fast {
220+
; block0:
221+
; v1 = f32const 0.0
222+
; v2 = splat.f32x2 v1 ; v1 = 0.0
223+
; return v2
224+
; }

0 commit comments

Comments
 (0)