brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · 4357dc5 Raw
143 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s  -disable-wasm-fallthrough-return-opt -wasm-disable-explicit-locals -wasm-keep-registers -mattr=+simd128 | FileCheck %s3 4target triple = "wasm32-unknown-unknown"5 6declare i32 @memcmp(ptr, ptr, i32)7 8define i1 @memcmp_expand_3(ptr %a, ptr %b) {9; CHECK-LABEL: memcmp_expand_3:10; CHECK:         .functype memcmp_expand_3 (i32, i32) -> (i32)11; CHECK-NEXT:  # %bb.0:12; CHECK-NEXT:    i32.load16_u $push7=, 0($0):p2align=013; CHECK-NEXT:    i32.load16_u $push6=, 0($1):p2align=014; CHECK-NEXT:    i32.xor $push8=, $pop7, $pop615; CHECK-NEXT:    i32.const $push0=, 216; CHECK-NEXT:    i32.add $push3=, $0, $pop017; CHECK-NEXT:    i32.load8_u $push4=, 0($pop3)18; CHECK-NEXT:    i32.const $push13=, 219; CHECK-NEXT:    i32.add $push1=, $1, $pop1320; CHECK-NEXT:    i32.load8_u $push2=, 0($pop1)21; CHECK-NEXT:    i32.xor $push5=, $pop4, $pop222; CHECK-NEXT:    i32.or $push9=, $pop8, $pop523; CHECK-NEXT:    i32.const $push10=, 6553524; CHECK-NEXT:    i32.and $push11=, $pop9, $pop1025; CHECK-NEXT:    i32.eqz $push12=, $pop1126; CHECK-NEXT:    return $pop1227  %cmp_3 = call i32 @memcmp(ptr %a, ptr %b, i32 3)28  %res = icmp eq i32 %cmp_3, 029  ret i1 %res30}31 32define i1 @memcmp_expand_5(ptr %a, ptr %b) {33; CHECK-LABEL: memcmp_expand_5:34; CHECK:         .functype memcmp_expand_5 (i32, i32) -> (i32)35; CHECK-NEXT:  # %bb.0:36; CHECK-NEXT:    i32.load $push7=, 0($0):p2align=037; CHECK-NEXT:    i32.load $push6=, 0($1):p2align=038; CHECK-NEXT:    i32.xor $push8=, $pop7, $pop639; CHECK-NEXT:    i32.const $push0=, 440; CHECK-NEXT:    i32.add $push3=, $0, $pop041; CHECK-NEXT:    i32.load8_u $push4=, 0($pop3)42; CHECK-NEXT:    i32.const $push11=, 443; CHECK-NEXT:    i32.add $push1=, $1, $pop1144; CHECK-NEXT:    i32.load8_u $push2=, 0($pop1)45; CHECK-NEXT:    i32.xor $push5=, $pop4, $pop246; CHECK-NEXT:    i32.or $push9=, $pop8, $pop547; CHECK-NEXT:    i32.eqz $push10=, $pop948; CHECK-NEXT:    return $pop1049  %cmp_5 = call i32 @memcmp(ptr %a, ptr %b, i32 5)50  %res = icmp eq i32 %cmp_5, 051  ret i1 %res52}53 54define i1 @memcmp_expand_7(ptr %a, ptr %b) {55; CHECK-LABEL: memcmp_expand_7:56; CHECK:         .functype memcmp_expand_7 (i32, i32) -> (i32)57; CHECK-NEXT:  # %bb.0:58; CHECK-NEXT:    i32.load $push7=, 0($0):p2align=059; CHECK-NEXT:    i32.load $push6=, 0($1):p2align=060; CHECK-NEXT:    i32.xor $push8=, $pop7, $pop661; CHECK-NEXT:    i32.const $push0=, 362; CHECK-NEXT:    i32.add $push3=, $0, $pop063; CHECK-NEXT:    i32.load $push4=, 0($pop3):p2align=064; CHECK-NEXT:    i32.const $push11=, 365; CHECK-NEXT:    i32.add $push1=, $1, $pop1166; CHECK-NEXT:    i32.load $push2=, 0($pop1):p2align=067; CHECK-NEXT:    i32.xor $push5=, $pop4, $pop268; CHECK-NEXT:    i32.or $push9=, $pop8, $pop569; CHECK-NEXT:    i32.eqz $push10=, $pop970; CHECK-NEXT:    return $pop1071  %cmp_7 = call i32 @memcmp(ptr %a, ptr %b, i32 7)72  %res = icmp eq i32 %cmp_7, 073  ret i1 %res74}75 76; INFO: Negative test77; Should not expand even with simd12878define i1 @memcmp_expand_129(ptr %a, ptr %b) {79; CHECK-LABEL: memcmp_expand_129:80; CHECK:         .functype memcmp_expand_129 (i32, i32) -> (i32)81; CHECK-NEXT:  # %bb.0:82; CHECK-NEXT:    i32.const $push0=, 12983; CHECK-NEXT:    call $push1=, memcmp, $0, $1, $pop084; CHECK-NEXT:    i32.eqz $push2=, $pop185; CHECK-NEXT:    return $pop286  %cmp_129 = call i32 @memcmp(ptr %a, ptr %b, i32 129)87  %res = icmp eq i32 %cmp_129, 088  ret i1 %res89}90 91define i1 @memcmp_expand_2(ptr %a, ptr %b) {92; CHECK-LABEL: memcmp_expand_2:93; CHECK:         .functype memcmp_expand_2 (i32, i32) -> (i32)94; CHECK-NEXT:  # %bb.0:95; CHECK-NEXT:    i32.load16_u $push1=, 0($0):p2align=096; CHECK-NEXT:    i32.load16_u $push0=, 0($1):p2align=097; CHECK-NEXT:    i32.eq $push2=, $pop1, $pop098; CHECK-NEXT:    return $pop299  %cmp_2 = call i32 @memcmp(ptr %a, ptr %b, i32 2)100  %res = icmp eq i32 %cmp_2, 0101  ret i1 %res102}103 104define i1 @memcmp_expand_2_align(ptr align(2) %a, ptr align(2) %b) {105; CHECK-LABEL: memcmp_expand_2_align:106; CHECK:         .functype memcmp_expand_2_align (i32, i32) -> (i32)107; CHECK-NEXT:  # %bb.0:108; CHECK-NEXT:    i32.load16_u $push1=, 0($0)109; CHECK-NEXT:    i32.load16_u $push0=, 0($1)110; CHECK-NEXT:    i32.eq $push2=, $pop1, $pop0111; CHECK-NEXT:    return $pop2112  %cmp_2 = call i32 @memcmp(ptr %a, ptr %b, i32 2)113  %res = icmp eq i32 %cmp_2, 0114  ret i1 %res115}116 117define i1 @memcmp_expand_8(ptr %a, ptr %b) {118; CHECK-LABEL: memcmp_expand_8:119; CHECK:         .functype memcmp_expand_8 (i32, i32) -> (i32)120; CHECK-NEXT:  # %bb.0:121; CHECK-NEXT:    i64.load $push1=, 0($0):p2align=0122; CHECK-NEXT:    i64.load $push0=, 0($1):p2align=0123; CHECK-NEXT:    i64.eq $push2=, $pop1, $pop0124; CHECK-NEXT:    return $pop2125  %cmp_8 = call i32 @memcmp(ptr %a, ptr %b, i32 8)126  %res = icmp eq i32 %cmp_8, 0127  ret i1 %res128}129 130define i1 @memcmp_expand_16(ptr %a, ptr %b) {131; CHECK-LABEL: memcmp_expand_16:132; CHECK:         .functype memcmp_expand_16 (i32, i32) -> (i32)133; CHECK-NEXT:  # %bb.0:134; CHECK-NEXT:    v128.load $push1=, 0($0):p2align=0135; CHECK-NEXT:    v128.load $push0=, 0($1):p2align=0136; CHECK-NEXT:    i8x16.eq $push2=, $pop1, $pop0137; CHECK-NEXT:    i8x16.all_true $push3=, $pop2138; CHECK-NEXT:    return $pop3139  %cmp_16 = call i32 @memcmp(ptr %a, ptr %b, i32 16)140  %res = icmp eq i32 %cmp_16, 0141  ret i1 %res142}143