brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.0 KiB · 0a72bbc Raw
85 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-- -O2 -mattr=+neon < %s | FileCheck %s --check-prefixes=CHECK-SD3; RUN: llc -mtriple=aarch64-- -O2 -mattr=+neon -global-isel < %s | FileCheck %s --check-prefixes=CHECK-GI4 5define <8 x i8> @avgceil_u_i8_to_i16(<8 x i8> %a, <8 x i8> %b) {6; CHECK-SD-LABEL: avgceil_u_i8_to_i16:7; CHECK-SD:       // %bb.0:8; CHECK-SD-NEXT:    urhadd v0.8b, v0.8b, v1.8b9; CHECK-SD-NEXT:    ret10;11; CHECK-GI-LABEL: avgceil_u_i8_to_i16:12; CHECK-GI:       // %bb.0:13; CHECK-GI-NEXT:    ushll v0.8h, v0.8b, #014; CHECK-GI-NEXT:    ushll v1.8h, v1.8b, #015; CHECK-GI-NEXT:    urhadd v0.8h, v0.8h, v1.8h16; CHECK-GI-NEXT:    xtn v0.8b, v0.8h17; CHECK-GI-NEXT:    ret18  %a16 = zext <8 x i8> %a to <8 x i16>19  %b16 = zext <8 x i8> %b to <8 x i16>20  %avg16 = call <8 x i16> @llvm.aarch64.neon.urhadd.v8i16(<8 x i16> %a16, <8 x i16> %b16)21  %r = trunc <8 x i16> %avg16 to <8 x i8>22  ret <8 x i8> %r23}24 25 26define <8 x i8> @test_avgceil_s(<8 x i8> %a, <8 x i8> %b) {27; CHECK-SD-LABEL: test_avgceil_s:28; CHECK-SD:       // %bb.0:29; CHECK-SD-NEXT:    srhadd v0.8b, v0.8b, v1.8b30; CHECK-SD-NEXT:    ret31;32; CHECK-GI-LABEL: test_avgceil_s:33; CHECK-GI:       // %bb.0:34; CHECK-GI-NEXT:    sshll v0.8h, v0.8b, #035; CHECK-GI-NEXT:    sshll v1.8h, v1.8b, #036; CHECK-GI-NEXT:    srhadd v0.8h, v0.8h, v1.8h37; CHECK-GI-NEXT:    xtn v0.8b, v0.8h38; CHECK-GI-NEXT:    ret39  %a16 = sext <8 x i8> %a to <8 x i16>40  %b16 = sext <8 x i8> %b to <8 x i16>41  %avg16 = call <8 x i16> @llvm.aarch64.neon.srhadd.v8i16(<8 x i16> %a16, <8 x i16> %b16)42  %res  = trunc <8 x i16> %avg16 to <8 x i8>43  ret <8 x i8> %res44}45 46define <8 x i8> @avgfloor_u_i8_to_i16(<8 x i8> %a, <8 x i8> %b) {47; CHECK-SD-LABEL: avgfloor_u_i8_to_i16:48; CHECK-SD:       // %bb.0:49; CHECK-SD-NEXT:    uhadd v0.8b, v0.8b, v1.8b50; CHECK-SD-NEXT:    ret51;52; CHECK-GI-LABEL: avgfloor_u_i8_to_i16:53; CHECK-GI:       // %bb.0:54; CHECK-GI-NEXT:    ushll v0.8h, v0.8b, #055; CHECK-GI-NEXT:    ushll v1.8h, v1.8b, #056; CHECK-GI-NEXT:    uhadd v0.8h, v0.8h, v1.8h57; CHECK-GI-NEXT:    xtn v0.8b, v0.8h58; CHECK-GI-NEXT:    ret59  %a16 = zext  <8 x i8>  %a to <8 x i16>60  %b16 = zext  <8 x i8>  %b to <8 x i16>61  %avg16 = call <8 x i16> @llvm.aarch64.neon.uhadd.v8i16(<8 x i16> %a16, <8 x i16> %b16)62  %res = trunc <8 x i16> %avg16 to <8 x i8>63  ret <8 x i8> %res64}65 66define <8 x i8> @test_avgfloor_s(<8 x i8> %a, <8 x i8> %b) {67; CHECK-SD-LABEL: test_avgfloor_s:68; CHECK-SD:       // %bb.0:69; CHECK-SD-NEXT:    shadd v0.8b, v0.8b, v1.8b70; CHECK-SD-NEXT:    ret71;72; CHECK-GI-LABEL: test_avgfloor_s:73; CHECK-GI:       // %bb.0:74; CHECK-GI-NEXT:    sshll v0.8h, v0.8b, #075; CHECK-GI-NEXT:    sshll v1.8h, v1.8b, #076; CHECK-GI-NEXT:    shadd v0.8h, v0.8h, v1.8h77; CHECK-GI-NEXT:    xtn v0.8b, v0.8h78; CHECK-GI-NEXT:    ret79  %a16 = sext  <8 x i8>  %a to <8 x i16>80  %b16 = sext  <8 x i8>  %b to <8 x i16>81  %avg16 = call <8 x i16> @llvm.aarch64.neon.shadd.v8i16(<8 x i16> %a16, <8 x i16> %b16)82  %res  = trunc <8 x i16> %avg16 to <8 x i8>83  ret <8 x i8> %res84}85