brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · c2a43a8 Raw
199 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 SIMD bitmask instruction can be selected5 6target triple = "wasm32-unknown-unknown"7 8define i16 @bitmask_v16i8(<16 x i8> %v) {9; CHECK-LABEL: bitmask_v16i8:10; CHECK:         .functype bitmask_v16i8 (v128) -> (i32)11; CHECK-NEXT:  # %bb.0:12; CHECK-NEXT:    local.get 013; CHECK-NEXT:    v128.const 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 014; CHECK-NEXT:    i8x16.eq15; CHECK-NEXT:    i8x16.bitmask16; CHECK-NEXT:    # fallthrough-return17  %cmp = icmp eq <16 x i8> %v, zeroinitializer18  %bitmask = bitcast <16 x i1> %cmp to i1619  ret i16 %bitmask20}21 22define i8 @bitmask_v8i16(<8 x i16> %v) {23; CHECK-LABEL: bitmask_v8i16:24; CHECK:         .functype bitmask_v8i16 (v128) -> (i32)25; CHECK-NEXT:  # %bb.0:26; CHECK-NEXT:    local.get 027; CHECK-NEXT:    v128.const 0, 0, 0, 0, 0, 0, 0, 028; CHECK-NEXT:    i16x8.eq29; CHECK-NEXT:    i16x8.bitmask30; CHECK-NEXT:    # fallthrough-return31  %cmp = icmp eq <8 x i16> %v, zeroinitializer32  %bitmask = bitcast <8 x i1> %cmp to i833  ret i8 %bitmask34}35 36define i8 @bitmask_v4i32(<4 x i32> %v) {37; CHECK-LABEL: bitmask_v4i32:38; CHECK:         .functype bitmask_v4i32 (v128) -> (i32)39; CHECK-NEXT:  # %bb.0:40; CHECK-NEXT:    local.get 041; CHECK-NEXT:    v128.const 0, 0, 0, 042; CHECK-NEXT:    i32x4.eq43; CHECK-NEXT:    i32x4.bitmask44; CHECK-NEXT:    # fallthrough-return45  %cmp = icmp eq <4 x i32> %v, zeroinitializer46  %bitmask = bitcast <4 x i1> %cmp to i447  %ext = zext i4 %bitmask to i848  ret i8 %ext49}50 51define i8 @bitmask_v2i64(<2 x i64> %v) {52; CHECK-LABEL: bitmask_v2i64:53; CHECK:         .functype bitmask_v2i64 (v128) -> (i32)54; CHECK-NEXT:  # %bb.0:55; CHECK-NEXT:    local.get 056; CHECK-NEXT:    v128.const 0, 057; CHECK-NEXT:    i64x2.eq58; CHECK-NEXT:    i64x2.bitmask59; CHECK-NEXT:    # fallthrough-return60  %cmp = icmp eq <2 x i64> %v, zeroinitializer61  %bitmask = bitcast <2 x i1> %cmp to i262  %ext = zext i2 %bitmask to i863  ret i8 %ext64}65 66;; Test unusual vectors67 68define i1 @bitmask_v1i8(<1 x i8> %v) {69; CHECK-LABEL: bitmask_v1i8:70; CHECK:         .functype bitmask_v1i8 (v128) -> (i32)71; CHECK-NEXT:  # %bb.0:72; CHECK-NEXT:    local.get 073; CHECK-NEXT:    i8x16.extract_lane_u 074; CHECK-NEXT:    i32.eqz75; CHECK-NEXT:    # fallthrough-return76  %cmp = icmp eq <1 x i8> %v, zeroinitializer77  %bitmask = bitcast <1 x i1> %cmp to i178  ret i1 %bitmask79}80 81define i7 @bitmask_v7i8(<7 x i8> %v) {82; CHECK-LABEL: bitmask_v7i8:83; CHECK:         .functype bitmask_v7i8 (i32, i32, i32, i32, i32, i32, i32) -> (i32)84; CHECK-NEXT:    .local v12885; CHECK-NEXT:  # %bb.0:86; CHECK-NEXT:    global.get __stack_pointer87; CHECK-NEXT:    i32.const 1688; CHECK-NEXT:    i32.sub89; CHECK-NEXT:    drop90; CHECK-NEXT:    local.get 091; CHECK-NEXT:    i8x16.splat92; CHECK-NEXT:    local.get 193; CHECK-NEXT:    i8x16.replace_lane 194; CHECK-NEXT:    local.get 295; CHECK-NEXT:    i8x16.replace_lane 296; CHECK-NEXT:    local.get 397; CHECK-NEXT:    i8x16.replace_lane 398; CHECK-NEXT:    local.get 499; CHECK-NEXT:    i8x16.replace_lane 4100; CHECK-NEXT:    local.get 5101; CHECK-NEXT:    i8x16.replace_lane 5102; CHECK-NEXT:    local.get 6103; CHECK-NEXT:    i8x16.replace_lane 6104; CHECK-NEXT:    v128.const 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0105; CHECK-NEXT:    i8x16.eq106; CHECK-NEXT:    local.tee 7107; CHECK-NEXT:    i16x8.extract_lane_u 0108; CHECK-NEXT:    i32.const 1109; CHECK-NEXT:    i32.and110; CHECK-NEXT:    local.get 7111; CHECK-NEXT:    i16x8.extend_low_i8x16_s112; CHECK-NEXT:    local.tee 7113; CHECK-NEXT:    i16x8.extract_lane_u 1114; CHECK-NEXT:    i32.const 1115; CHECK-NEXT:    i32.and116; CHECK-NEXT:    i32.const 1117; CHECK-NEXT:    i32.shl118; CHECK-NEXT:    i32.or119; CHECK-NEXT:    local.get 7120; CHECK-NEXT:    i16x8.extract_lane_u 2121; CHECK-NEXT:    i32.const 1122; CHECK-NEXT:    i32.and123; CHECK-NEXT:    i32.const 2124; CHECK-NEXT:    i32.shl125; CHECK-NEXT:    i32.or126; CHECK-NEXT:    local.get 7127; CHECK-NEXT:    i16x8.extract_lane_u 3128; CHECK-NEXT:    i32.const 1129; CHECK-NEXT:    i32.and130; CHECK-NEXT:    i32.const 3131; CHECK-NEXT:    i32.shl132; CHECK-NEXT:    i32.or133; CHECK-NEXT:    local.get 7134; CHECK-NEXT:    i16x8.extract_lane_u 4135; CHECK-NEXT:    i32.const 1136; CHECK-NEXT:    i32.and137; CHECK-NEXT:    i32.const 4138; CHECK-NEXT:    i32.shl139; CHECK-NEXT:    i32.or140; CHECK-NEXT:    local.get 7141; CHECK-NEXT:    i16x8.extract_lane_u 5142; CHECK-NEXT:    i32.const 1143; CHECK-NEXT:    i32.and144; CHECK-NEXT:    i32.const 5145; CHECK-NEXT:    i32.shl146; CHECK-NEXT:    i32.or147; CHECK-NEXT:    local.get 7148; CHECK-NEXT:    i16x8.extract_lane_u 6149; CHECK-NEXT:    i32.const 6150; CHECK-NEXT:    i32.shl151; CHECK-NEXT:    i32.or152; CHECK-NEXT:    i32.const 127153; CHECK-NEXT:    i32.and154; CHECK-NEXT:    # fallthrough-return155  %cmp = icmp eq <7 x i8> %v, zeroinitializer156  %bitmask = bitcast <7 x i1> %cmp to i7157  ret i7 %bitmask158}159 160define i8 @bitmask_v8i8(<8 x i8> %v) {161; CHECK-LABEL: bitmask_v8i8:162; CHECK:         .functype bitmask_v8i8 (v128) -> (i32)163; CHECK-NEXT:  # %bb.0:164; CHECK-NEXT:    local.get 0165; CHECK-NEXT:    v128.const 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0166; CHECK-NEXT:    i8x16.eq167; CHECK-NEXT:    i16x8.extend_low_i8x16_s168; CHECK-NEXT:    i16x8.bitmask169; CHECK-NEXT:    # fallthrough-return170  %cmp = icmp eq <8 x i8> %v, zeroinitializer171  %bitmask = bitcast <8 x i1> %cmp to i8172  ret i8 %bitmask173}174 175define i32 @bitmask_v32i8(<32 x i8> %v) {176; CHECK-LABEL: bitmask_v32i8:177; CHECK:         .functype bitmask_v32i8 (v128, v128) -> (i32)178; CHECK-NEXT:    .local v128179; CHECK-NEXT:  # %bb.0:180; CHECK-NEXT:    i32.const 16181; CHECK-NEXT:    local.get 0182; CHECK-NEXT:    v128.const 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0183; CHECK-NEXT:    local.tee 2184; CHECK-NEXT:    i8x16.eq185; CHECK-NEXT:    i8x16.bitmask186; CHECK-NEXT:    i32.const 16187; CHECK-NEXT:    i32.add188; CHECK-NEXT:    i32.shl189; CHECK-NEXT:    local.get 1190; CHECK-NEXT:    local.get 2191; CHECK-NEXT:    i8x16.eq192; CHECK-NEXT:    i8x16.bitmask193; CHECK-NEXT:    i32.add194; CHECK-NEXT:    # fallthrough-return195  %cmp = icmp eq <32 x i8> %v, zeroinitializer196  %bitmask = bitcast <32 x i1> %cmp to i32197  ret i32 %bitmask198}199