brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.4 KiB · 94aa197 Raw
198 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -mtriple=wasm32 -verify-machineinstrs -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s3 4define <8 x i32> @sext_mul_v8i8(<8 x i8> %a, <8 x i8> %b) {5; CHECK-LABEL: sext_mul_v8i8:6; CHECK:         .functype sext_mul_v8i8 (i32, v128, v128) -> ()7; CHECK-NEXT:  # %bb.0:8; CHECK-NEXT:    i16x8.extmul_low_i8x16_s $push3=, $1, $19; CHECK-NEXT:    local.tee $push2=, $1=, $pop310; CHECK-NEXT:    i32x4.extend_high_i16x8_s $push0=, $pop211; CHECK-NEXT:    v128.store 16($0), $pop012; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push1=, $113; CHECK-NEXT:    v128.store 0($0), $pop114; CHECK-NEXT:    return15  %wide.a = sext <8 x i8> %a to <8 x i32>16  %wide.b = sext <8 x i8> %a to <8 x i32>17  %mul = mul <8 x i32> %wide.a, %wide.b18  ret <8 x i32> %mul19}20 21define <16 x i32> @sext_mul_v16i8(<16 x i8> %a, <16 x i8> %b) {22; CHECK-LABEL: sext_mul_v16i8:23; CHECK:         .functype sext_mul_v16i8 (i32, v128, v128) -> ()24; CHECK-NEXT:  # %bb.0:25; CHECK-NEXT:    i16x8.extmul_high_i8x16_s $push7=, $1, $126; CHECK-NEXT:    local.tee $push6=, $3=, $pop727; CHECK-NEXT:    i32x4.extend_high_i16x8_s $push0=, $pop628; CHECK-NEXT:    v128.store 48($0), $pop029; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push1=, $330; CHECK-NEXT:    v128.store 32($0), $pop131; CHECK-NEXT:    i16x8.extmul_low_i8x16_s $push5=, $1, $132; CHECK-NEXT:    local.tee $push4=, $1=, $pop533; CHECK-NEXT:    i32x4.extend_high_i16x8_s $push2=, $pop434; CHECK-NEXT:    v128.store 16($0), $pop235; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push3=, $136; CHECK-NEXT:    v128.store 0($0), $pop337; CHECK-NEXT:    return38  %wide.a = sext <16 x i8> %a to <16 x i32>39  %wide.b = sext <16 x i8> %a to <16 x i32>40  %mul = mul <16 x i32> %wide.a, %wide.b41  ret <16 x i32> %mul42}43 44define <8 x i32> @sext_mul_v8i16(<8 x i16> %a, <8 x i16> %b) {45; CHECK-LABEL: sext_mul_v8i16:46; CHECK:         .functype sext_mul_v8i16 (i32, v128, v128) -> ()47; CHECK-NEXT:  # %bb.0:48; CHECK-NEXT:    i32x4.extmul_high_i16x8_s $push0=, $1, $149; CHECK-NEXT:    v128.store 16($0), $pop050; CHECK-NEXT:    i32x4.extmul_low_i16x8_s $push1=, $1, $151; CHECK-NEXT:    v128.store 0($0), $pop152; CHECK-NEXT:    return53  %wide.a = sext <8 x i16> %a to <8 x i32>54  %wide.b = sext <8 x i16> %a to <8 x i32>55  %mul = mul <8 x i32> %wide.a, %wide.b56  ret <8 x i32> %mul57}58 59define <8 x i32> @zext_mul_v8i8(<8 x i8> %a, <8 x i8> %b) {60; CHECK-LABEL: zext_mul_v8i8:61; CHECK:         .functype zext_mul_v8i8 (i32, v128, v128) -> ()62; CHECK-NEXT:  # %bb.0:63; CHECK-NEXT:    i16x8.extmul_low_i8x16_u $push3=, $1, $164; CHECK-NEXT:    local.tee $push2=, $1=, $pop365; CHECK-NEXT:    i32x4.extend_high_i16x8_u $push0=, $pop266; CHECK-NEXT:    v128.store 16($0), $pop067; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push1=, $168; CHECK-NEXT:    v128.store 0($0), $pop169; CHECK-NEXT:    return70  %wide.a = zext <8 x i8> %a to <8 x i32>71  %wide.b = zext <8 x i8> %a to <8 x i32>72  %mul = mul <8 x i32> %wide.a, %wide.b73  ret <8 x i32> %mul74}75 76define <16 x i32> @zext_mul_v16i8(<16 x i8> %a, <16 x i8> %b) {77; CHECK-LABEL: zext_mul_v16i8:78; CHECK:         .functype zext_mul_v16i8 (i32, v128, v128) -> ()79; CHECK-NEXT:  # %bb.0:80; CHECK-NEXT:    i16x8.extmul_high_i8x16_u $push7=, $1, $181; CHECK-NEXT:    local.tee $push6=, $3=, $pop782; CHECK-NEXT:    i32x4.extend_high_i16x8_u $push0=, $pop683; CHECK-NEXT:    v128.store 48($0), $pop084; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push1=, $385; CHECK-NEXT:    v128.store 32($0), $pop186; CHECK-NEXT:    i16x8.extmul_low_i8x16_u $push5=, $1, $187; CHECK-NEXT:    local.tee $push4=, $1=, $pop588; CHECK-NEXT:    i32x4.extend_high_i16x8_u $push2=, $pop489; CHECK-NEXT:    v128.store 16($0), $pop290; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push3=, $191; CHECK-NEXT:    v128.store 0($0), $pop392; CHECK-NEXT:    return93  %wide.a = zext <16 x i8> %a to <16 x i32>94  %wide.b = zext <16 x i8> %a to <16 x i32>95  %mul = mul <16 x i32> %wide.a, %wide.b96  ret <16 x i32> %mul97}98 99define <8 x i32> @zext_mul_v8i16(<8 x i16> %a, <8 x i16> %b) {100; CHECK-LABEL: zext_mul_v8i16:101; CHECK:         .functype zext_mul_v8i16 (i32, v128, v128) -> ()102; CHECK-NEXT:  # %bb.0:103; CHECK-NEXT:    i32x4.extmul_high_i16x8_u $push0=, $1, $1104; CHECK-NEXT:    v128.store 16($0), $pop0105; CHECK-NEXT:    i32x4.extmul_low_i16x8_u $push1=, $1, $1106; CHECK-NEXT:    v128.store 0($0), $pop1107; CHECK-NEXT:    return108  %wide.a = zext <8 x i16> %a to <8 x i32>109  %wide.b = zext <8 x i16> %a to <8 x i32>110  %mul = mul <8 x i32> %wide.a, %wide.b111  ret <8 x i32> %mul112}113 114define <8 x i32> @sext_zext_mul_v8i8(<8 x i8> %a, <8 x i8> %b) {115; CHECK-LABEL: sext_zext_mul_v8i8:116; CHECK:         .functype sext_zext_mul_v8i8 (i32, v128, v128) -> ()117; CHECK-NEXT:  # %bb.0:118; CHECK-NEXT:    i16x8.extend_low_i8x16_s $push2=, $1119; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push3=, $pop2120; CHECK-NEXT:    i16x8.extend_low_i8x16_u $push0=, $1121; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push1=, $pop0122; CHECK-NEXT:    i32x4.mul $push4=, $pop3, $pop1123; CHECK-NEXT:    v128.store 0($0), $pop4124; CHECK-NEXT:    i8x16.shuffle $push11=, $1, $1, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0125; CHECK-NEXT:    local.tee $push10=, $1=, $pop11126; CHECK-NEXT:    i16x8.extend_low_i8x16_s $push7=, $pop10127; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push8=, $pop7128; CHECK-NEXT:    i16x8.extend_low_i8x16_u $push5=, $1129; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push6=, $pop5130; CHECK-NEXT:    i32x4.mul $push9=, $pop8, $pop6131; CHECK-NEXT:    v128.store 16($0), $pop9132; CHECK-NEXT:    return133  %wide.a = sext <8 x i8> %a to <8 x i32>134  %wide.b = zext <8 x i8> %a to <8 x i32>135  %mul = mul <8 x i32> %wide.a, %wide.b136  ret <8 x i32> %mul137}138 139define <16 x i32> @sext_zext_mul_v16i8(<16 x i8> %a, <16 x i8> %b) {140; CHECK-LABEL: sext_zext_mul_v16i8:141; CHECK:         .functype sext_zext_mul_v16i8 (i32, v128, v128) -> ()142; CHECK-NEXT:  # %bb.0:143; CHECK-NEXT:    i16x8.extend_low_i8x16_s $push2=, $1144; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push3=, $pop2145; CHECK-NEXT:    i16x8.extend_low_i8x16_u $push0=, $1146; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push1=, $pop0147; CHECK-NEXT:    i32x4.mul $push4=, $pop3, $pop1148; CHECK-NEXT:    v128.store 0($0), $pop4149; CHECK-NEXT:    i8x16.shuffle $push25=, $1, $1, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0150; CHECK-NEXT:    local.tee $push24=, $3=, $pop25151; CHECK-NEXT:    i16x8.extend_low_i8x16_s $push7=, $pop24152; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push8=, $pop7153; CHECK-NEXT:    i16x8.extend_low_i8x16_u $push5=, $3154; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push6=, $pop5155; CHECK-NEXT:    i32x4.mul $push9=, $pop8, $pop6156; CHECK-NEXT:    v128.store 48($0), $pop9157; CHECK-NEXT:    i8x16.shuffle $push23=, $1, $1, 8, 9, 10, 11, 12, 13, 14, 15, 0, 0, 0, 0, 0, 0, 0, 0158; CHECK-NEXT:    local.tee $push22=, $3=, $pop23159; CHECK-NEXT:    i16x8.extend_low_i8x16_s $push12=, $pop22160; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push13=, $pop12161; CHECK-NEXT:    i16x8.extend_low_i8x16_u $push10=, $3162; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push11=, $pop10163; CHECK-NEXT:    i32x4.mul $push14=, $pop13, $pop11164; CHECK-NEXT:    v128.store 32($0), $pop14165; CHECK-NEXT:    i8x16.shuffle $push21=, $1, $1, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0166; CHECK-NEXT:    local.tee $push20=, $1=, $pop21167; CHECK-NEXT:    i16x8.extend_low_i8x16_s $push17=, $pop20168; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push18=, $pop17169; CHECK-NEXT:    i16x8.extend_low_i8x16_u $push15=, $1170; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push16=, $pop15171; CHECK-NEXT:    i32x4.mul $push19=, $pop18, $pop16172; CHECK-NEXT:    v128.store 16($0), $pop19173; CHECK-NEXT:    return174  %wide.a = sext <16 x i8> %a to <16 x i32>175  %wide.b = zext <16 x i8> %a to <16 x i32>176  %mul = mul <16 x i32> %wide.a, %wide.b177  ret <16 x i32> %mul178}179 180define <8 x i32> @zext_sext_mul_v8i16(<8 x i16> %a, <8 x i16> %b) {181; CHECK-LABEL: zext_sext_mul_v8i16:182; CHECK:         .functype zext_sext_mul_v8i16 (i32, v128, v128) -> ()183; CHECK-NEXT:  # %bb.0:184; CHECK-NEXT:    i32x4.extend_high_i16x8_u $push1=, $1185; CHECK-NEXT:    i32x4.extend_high_i16x8_s $push0=, $1186; CHECK-NEXT:    i32x4.mul $push2=, $pop1, $pop0187; CHECK-NEXT:    v128.store 16($0), $pop2188; CHECK-NEXT:    i32x4.extend_low_i16x8_u $push4=, $1189; CHECK-NEXT:    i32x4.extend_low_i16x8_s $push3=, $1190; CHECK-NEXT:    i32x4.mul $push5=, $pop4, $pop3191; CHECK-NEXT:    v128.store 0($0), $pop5192; CHECK-NEXT:    return193  %wide.a = zext <8 x i16> %a to <8 x i32>194  %wide.b = sext <8 x i16> %a to <8 x i32>195  %mul = mul <8 x i32> %wide.a, %wide.b196  ret <8 x i32> %mul197}198