brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 580e324 Raw
116 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mattr=+simd128 | FileCheck %s3 4; Test that masks on the output of bitselect are optimized out.5 6target triple = "wasm32-unknown-unknown"7 8declare i32 @llvm.wasm.bitmask.v16i8(<16 x i8>)9declare i32 @llvm.wasm.bitmask.v8i16(<8 x i16>)10declare i32 @llvm.wasm.bitmask.v4i32(<4 x i32>)11declare i32 @llvm.wasm.bitmask.v2i64(<2 x i64>)12 13define i32 @bitmask_v16i8_mask(<16 x i8> %x) {14; CHECK-LABEL: bitmask_v16i8_mask:15; CHECK:         .functype bitmask_v16i8_mask (v128) -> (i32)16; CHECK-NEXT:  # %bb.0:17; CHECK-NEXT:    local.get 018; CHECK-NEXT:    i8x16.bitmask19; CHECK-NEXT:    i32.const 3276720; CHECK-NEXT:    i32.and21; CHECK-NEXT:    # fallthrough-return22  %m = tail call i32 @llvm.wasm.bitmask.v16i8(<16 x i8> %x)23  %v = and i32 %m, 32767 ;; 2^15 - 124  ret i32 %v25}26 27define i32 @bitmask_v16i8_no_mask(<16 x i8> %x) {28; CHECK-LABEL: bitmask_v16i8_no_mask:29; CHECK:         .functype bitmask_v16i8_no_mask (v128) -> (i32)30; CHECK-NEXT:  # %bb.0:31; CHECK-NEXT:    local.get 032; CHECK-NEXT:    i8x16.bitmask33; CHECK-NEXT:    # fallthrough-return34  %m = tail call i32 @llvm.wasm.bitmask.v16i8(<16 x i8> %x)35  %v = and i32 %m, 65535 ;; 2^16 - 136  ret i32 %v37}38 39define i32 @bitmask_v8i16_mask(<8 x i16> %x) {40; CHECK-LABEL: bitmask_v8i16_mask:41; CHECK:         .functype bitmask_v8i16_mask (v128) -> (i32)42; CHECK-NEXT:  # %bb.0:43; CHECK-NEXT:    local.get 044; CHECK-NEXT:    i16x8.bitmask45; CHECK-NEXT:    i32.const 12746; CHECK-NEXT:    i32.and47; CHECK-NEXT:    # fallthrough-return48  %m = tail call i32 @llvm.wasm.bitmask.v8i16(<8 x i16> %x)49  %v = and i32 %m, 127 ;; 2^7 - 150  ret i32 %v51}52 53define i32 @bitmask_v8i16_no_mask(<8 x i16> %x) {54; CHECK-LABEL: bitmask_v8i16_no_mask:55; CHECK:         .functype bitmask_v8i16_no_mask (v128) -> (i32)56; CHECK-NEXT:  # %bb.0:57; CHECK-NEXT:    local.get 058; CHECK-NEXT:    i16x8.bitmask59; CHECK-NEXT:    # fallthrough-return60  %m = tail call i32 @llvm.wasm.bitmask.v8i16(<8 x i16> %x)61  %v = and i32 %m, 255 ;; 2^8 - 162  ret i32 %v63}64 65define i32 @bitmask_v4i32_mask(<4 x i32> %x) {66; CHECK-LABEL: bitmask_v4i32_mask:67; CHECK:         .functype bitmask_v4i32_mask (v128) -> (i32)68; CHECK-NEXT:  # %bb.0:69; CHECK-NEXT:    local.get 070; CHECK-NEXT:    i32x4.bitmask71; CHECK-NEXT:    i32.const 772; CHECK-NEXT:    i32.and73; CHECK-NEXT:    # fallthrough-return74  %m = tail call i32 @llvm.wasm.bitmask.v4i32(<4 x i32> %x)75  %v = and i32 %m, 7 ;; 2^3 - 176  ret i32 %v77}78 79define i32 @bitmask_v4i32_no_mask(<4 x i32> %x) {80; CHECK-LABEL: bitmask_v4i32_no_mask:81; CHECK:         .functype bitmask_v4i32_no_mask (v128) -> (i32)82; CHECK-NEXT:  # %bb.0:83; CHECK-NEXT:    local.get 084; CHECK-NEXT:    i32x4.bitmask85; CHECK-NEXT:    # fallthrough-return86  %m = tail call i32 @llvm.wasm.bitmask.v4i32(<4 x i32> %x)87  %v = and i32 %m, 15 ;; 2^4 - 188  ret i32 %v89}90 91define i32 @bitmask_v2i64_mask(<2 x i64> %x) {92; CHECK-LABEL: bitmask_v2i64_mask:93; CHECK:         .functype bitmask_v2i64_mask (v128) -> (i32)94; CHECK-NEXT:  # %bb.0:95; CHECK-NEXT:    local.get 096; CHECK-NEXT:    i64x2.bitmask97; CHECK-NEXT:    i32.const 198; CHECK-NEXT:    i32.and99; CHECK-NEXT:    # fallthrough-return100  %m = tail call i32 @llvm.wasm.bitmask.v2i64(<2 x i64> %x)101  %v = and i32 %m, 1 ;; 2^1 - 1102  ret i32 %v103}104 105define i32 @bitmask_v2i64_no_mask(<2 x i64> %x) {106; CHECK-LABEL: bitmask_v2i64_no_mask:107; CHECK:         .functype bitmask_v2i64_no_mask (v128) -> (i32)108; CHECK-NEXT:  # %bb.0:109; CHECK-NEXT:    local.get 0110; CHECK-NEXT:    i64x2.bitmask111; CHECK-NEXT:    # fallthrough-return112  %m = tail call i32 @llvm.wasm.bitmask.v2i64(<2 x i64> %x)113  %v = and i32 %m, 3 ;; 2^2 - 1114  ret i32 %v115}116