From 80725808a3eba456dd1baf282c446f3d250ec100 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Thu, 30 Aug 2018 21:43:51 +0000 Subject: [WebAssembly] Vector conversions Summary: Lowers away bitconverts between vector types. This CL depends on D51383. Reviewers: aheejin, dschuff Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D51498 llvm-svn: 341128 --- llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'llvm/lib/Target/WebAssembly') diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td index 459e00a25d6..e4dbda31f34 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td +++ b/llvm/lib/Target/WebAssembly/WebAssemblyInstrSIMD.td @@ -271,6 +271,17 @@ def : Pat<(i32 (vector_extract (v16i8 V128:$vec), (i32 LaneIdx16:$idx))), def : Pat<(i32 (vector_extract (v8i16 V128:$vec), (i32 LaneIdx8:$idx))), (EXTRACT_LANE_v8i16_u V128:$vec, (i32 LaneIdx8:$idx))>; +// Bitcasts are nops +// Matching bitcast t1 to t1 causes strange errors, so avoid repeating types +foreach t1 = [v16i8, v8i16, v4i32, v2i64, v4f32, v2f64] in +foreach t2 = !foldl( + [], [v16i8, v8i16, v4i32, v2i64, v4f32, v2f64], + acc, cur, !if(!eq(!cast(t1), !cast(cur)), + acc, !listconcat(acc, [cur]) + ) +) in +def : Pat<(t1 (bitconvert (t2 V128:$v))), (t1 V128:$v)>; + // arbitrary other BUILD_VECTOR patterns def : Pat<(v16i8 (build_vector (i32 I32:$x0), (i32 I32:$x1), (i32 I32:$x2), (i32 I32:$x3), -- cgit v1.2.3