brintos

brintos / llvm-project-archived public Read only

0
0
Text · 10.4 KiB · 5436662 Raw
254 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon,+lut,+bf16 | FileCheck %s3 4define <16 x i8> @test_luti2_lane_i8(<8 x i8> %vn, <8 x i8> %vm){5; CHECK-LABEL: test_luti2_lane_i8:6; CHECK:       // %bb.0:7; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q08; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q19; CHECK-NEXT:    luti2 v0.16b, { v0.16b }, v1[0]10; CHECK-NEXT:    ret11   %res= tail call <16 x i8> @llvm.aarch64.neon.vluti2.lane.v16i8.v8i8(<8 x i8> %vn, <8 x i8> %vm, i32 0)12   ret <16 x i8>  %res13}14 15define <16 x i8> @test_luti2_laneq_i8(<8 x i8> %vn, <16 x i8> %vm){16; CHECK-LABEL: test_luti2_laneq_i8:17; CHECK:       // %bb.0:18; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q019; CHECK-NEXT:    luti2 v0.16b, { v0.16b }, v1[0]20; CHECK-NEXT:    ret21   %res= tail call <16 x i8> @llvm.aarch64.neon.vluti2.laneq.v16i8.v8i8(<8 x i8> %vn, <16 x i8> %vm, i32 0)22   ret <16 x i8>  %res23}24 25define <16 x i8> @test_luti2q_lane_i8(<16 x i8> %vn, <8 x i8> %vm){26; CHECK-LABEL: test_luti2q_lane_i8:27; CHECK:       // %bb.0:28; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q129; CHECK-NEXT:    luti2 v0.16b, { v0.16b }, v1[0]30; CHECK-NEXT:    ret31   %res= tail call <16 x i8> @llvm.aarch64.neon.vluti2.lane.v16i8.v16i8(<16 x i8> %vn, <8 x i8> %vm, i32 0)32   ret <16 x i8>  %res33}34 35define <16 x i8> @test_luti2q_laneq_i8(<16 x i8> %vn, <16 x i8> %vm){36; CHECK-LABEL: test_luti2q_laneq_i8:37; CHECK:       // %bb.0:38; CHECK-NEXT:    luti2 v0.16b, { v0.16b }, v1[0]39; CHECK-NEXT:    ret40   %res= tail call <16 x i8> @llvm.aarch64.neon.vluti2.laneq.v16i8.v16i8(<16 x i8> %vn, <16 x i8> %vm, i32 0)41   ret <16 x i8>  %res42}43 44define <8 x i16> @test_luti2_lane_i16(<4 x i16> %vn, <8 x i8> %vm){45; CHECK-LABEL: test_luti2_lane_i16:46; CHECK:       // %bb.0:47; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q048; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q149; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]50; CHECK-NEXT:    ret51   %res= tail call <8 x i16> @llvm.aarch64.neon.vluti2.lane.v8i16.v4i16(<4 x i16> %vn, <8 x i8> %vm, i32 0)52   ret <8 x i16>  %res53}54 55define <8 x i16> @test_luti2_laneq_i16(<4 x i16> %vn, <16 x i8> %vm){56; CHECK-LABEL: test_luti2_laneq_i16:57; CHECK:       // %bb.0:58; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q059; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]60; CHECK-NEXT:    ret61   %res= tail call <8 x i16> @llvm.aarch64.neon.vluti2.laneq.v8i16.v4i16(<4 x i16> %vn, <16 x i8> %vm, i32 0)62   ret <8 x i16>  %res63}64 65define <8 x i16> @test_luti2q_lane_i16(<4 x i16> %vn, <8 x i8> %vm){66; CHECK-LABEL: test_luti2q_lane_i16:67; CHECK:       // %bb.0:68; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q069; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q170; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]71; CHECK-NEXT:    ret72   %res= tail call <8 x i16> @llvm.aarch64.neon.vluti2.lane.v8i16.v8i16(<4 x i16> %vn, <8 x i8> %vm, i32 0)73   ret <8 x i16>  %res74}75 76define <8 x i16> @test_luti2q_laneq_i16(<8 x i16> %vn, <16 x i8> %vm){77; CHECK-LABEL: test_luti2q_laneq_i16:78; CHECK:       // %bb.0:79; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]80; CHECK-NEXT:    ret81   %res= tail call <8 x i16> @llvm.aarch64.neon.vluti2.laneq.v8i16.v8i16(<8 x i16> %vn, <16 x i8> %vm, i32 0)82   ret <8 x i16>  %res83}84 85define <8 x half> @test_luti2_lane_f16(<4 x half> %vn, <8 x i8> %vm){86; CHECK-LABEL: test_luti2_lane_f16:87; CHECK:       // %bb.0:88; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q089; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q190; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]91; CHECK-NEXT:    ret92   %res= tail call <8 x half> @llvm.aarch64.neon.vluti2.lane.v8f16.v4f16(<4 x half> %vn, <8 x i8> %vm, i32 0)93   ret <8 x half>  %res94}95 96define <8 x half> @test_luti2_laneq_f16(<4 x half> %vn, <16 x i8> %vm){97; CHECK-LABEL: test_luti2_laneq_f16:98; CHECK:       // %bb.0:99; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0100; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]101; CHECK-NEXT:    ret102   %res= tail call <8 x half> @llvm.aarch64.neon.vluti2.laneq.v8f16.v4i16(<4 x half> %vn, <16 x i8> %vm, i32 0)103   ret <8 x half>  %res104}105 106define <8 x half> @test_luti2q_lane_f16(<8 x half> %vn, <8 x i8> %vm){107; CHECK-LABEL: test_luti2q_lane_f16:108; CHECK:       // %bb.0:109; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1110; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]111; CHECK-NEXT:    ret112   %res= tail call <8 x half> @llvm.aarch64.neon.vluti2.lane.v8f16.v8f16(<8 x half> %vn, <8 x i8> %vm, i32 0)113   ret <8 x half>  %res114}115 116define <8 x half> @test_luti2q_laneq_f16(<8 x half> %vn, <16 x i8> %vm){117; CHECK-LABEL: test_luti2q_laneq_f16:118; CHECK:       // %bb.0:119; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]120; CHECK-NEXT:    ret121   %res= tail call <8 x half> @llvm.aarch64.neon.vluti2.laneq.v8f16.v8f16(<8 x half> %vn, <16 x i8> %vm, i32 0)122   ret <8 x half>  %res123}124 125define <8 x bfloat> @test_luti2_lane_bf16(<4 x bfloat> %vn, <8 x i8> %vm){126; CHECK-LABEL: test_luti2_lane_bf16:127; CHECK:       // %bb.0:128; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0129; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1130; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]131; CHECK-NEXT:    ret132   %res= tail call <8 x bfloat> @llvm.aarch64.neon.vluti2.lane.v8bf16.v4bf16(<4 x bfloat> %vn, <8 x i8> %vm, i32 0)133   ret <8 x bfloat>  %res134}135 136define <8 x bfloat> @test_luti2_laneq_bf16(<4 x bfloat> %vn, <16 x i8> %vm){137; CHECK-LABEL: test_luti2_laneq_bf16:138; CHECK:       // %bb.0:139; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0140; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]141; CHECK-NEXT:    ret142   %res= tail call <8 x bfloat> @llvm.aarch64.neon.vluti2.laneq.v8bf16.v4bf16(<4 x bfloat> %vn, <16 x i8> %vm, i32 0)143   ret <8 x bfloat>  %res144}145 146define <8 x bfloat> @test_luti2q_lane_bf16(<4 x bfloat> %vn, <8 x i8> %vm){147; CHECK-LABEL: test_luti2q_lane_bf16:148; CHECK:       // %bb.0:149; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0150; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1151; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]152; CHECK-NEXT:    ret153   %res= tail call <8 x bfloat> @llvm.aarch64.neon.vluti2.lane.v8bf16.v8bf16(<4 x bfloat> %vn, <8 x i8> %vm, i32 0)154   ret <8 x bfloat>  %res155}156 157define <8 x bfloat> @test_luti2q_laneq_bf16(<8 x bfloat> %vn, <16 x i8> %vm){158; CHECK-LABEL: test_luti2q_laneq_bf16:159; CHECK:       // %bb.0:160; CHECK-NEXT:    luti2 v0.8h, { v0.8h }, v1[0]161; CHECK-NEXT:    ret162   %res= tail call <8 x bfloat> @llvm.aarch64.neon.vluti2.laneq.v8bf16.v8bf16(<8 x bfloat> %vn, <16 x i8> %vm, i32 0)163   ret <8 x bfloat>  %res164}165 166define <16 x i8> @test_luti4q_lane_i8(<16 x i8> %vn, <8 x i8> %vm){167; CHECK-LABEL: test_luti4q_lane_i8:168; CHECK:       // %bb.0:169; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q1170; CHECK-NEXT:    luti4 v0.16b, { v0.16b }, v1[0]171; CHECK-NEXT:    ret172   %res= tail call <16 x i8> @llvm.aarch64.neon.vluti4q.lane.v16i8(<16 x i8> %vn, <8 x i8> %vm, i32 0)173   ret <16 x i8>  %res174}175 176define <16 x i8> @test_luti4q_laneq_i8(<16 x i8> %vn, <16 x i8> %vm){177; CHECK-LABEL: test_luti4q_laneq_i8:178; CHECK:       // %bb.0:179; CHECK-NEXT:    luti4 v0.16b, { v0.16b }, v1[0]180; CHECK-NEXT:    ret181   %res= tail call <16 x i8> @llvm.aarch64.neon.vluti4q.laneq.v16i8(<16 x i8> %vn, <16 x i8> %vm, i32 0)182   ret <16 x i8>  %res183}184 185define <8 x i16> @test_luti4q_lane_x2_i16(<8 x i16> %vn1, <8 x i16> %vn2, <8 x i8> %vm){186; CHECK-LABEL: test_luti4q_lane_x2_i16:187; CHECK:       // %bb.0:188; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1189; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2190; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1191; CHECK-NEXT:    luti4 v0.8h, { v0.8h, v1.8h }, v2[1]192; CHECK-NEXT:    ret193   %res= tail call <8 x i16> @llvm.aarch64.neon.vluti4q.lane.x2.v8i16(<8 x i16> %vn1, <8 x i16> %vn2, <8 x i8> %vm, i32 1)194   ret <8 x i16> %res195}196 197define <8 x i16> @test_luti4q_laneq_x2_i16(<8 x i16> %vn1, <8 x i16> %vn2, <16 x i8> %vm){198; CHECK-LABEL: test_luti4q_laneq_x2_i16:199; CHECK:       // %bb.0:200; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1201; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1202; CHECK-NEXT:    luti4 v0.8h, { v0.8h, v1.8h }, v2[1]203; CHECK-NEXT:    ret204   %res= tail call <8 x i16> @llvm.aarch64.neon.vluti4q.laneq.x2.v8i16(<8 x i16> %vn1, <8 x i16> %vn2, <16 x i8> %vm, i32 1)205   ret <8 x i16> %res206}207 208define <8 x half> @test_luti4q_lane_x2_f16(<8 x half>%vn1, <8 x half> %vn2, <8 x i8> %vm){209; CHECK-LABEL: test_luti4q_lane_x2_f16:210; CHECK:       // %bb.0:211; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1212; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2213; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1214; CHECK-NEXT:    luti4 v0.8h, { v0.8h, v1.8h }, v2[1]215; CHECK-NEXT:    ret216   %res= tail call <8 x half> @llvm.aarch64.neon.vluti4q.lane.x2.v8f16(<8 x half> %vn1, <8 x half> %vn2, <8 x i8> %vm, i32 1)217   ret <8 x half> %res218}219 220 221define <8 x half> @test_luti4q_laneq_x2_f16(<8 x half>%vn1, <8 x half> %vn2, <16 x i8> %vm){222; CHECK-LABEL: test_luti4q_laneq_x2_f16:223; CHECK:       // %bb.0:224; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1225; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1226; CHECK-NEXT:    luti4 v0.8h, { v0.8h, v1.8h }, v2[1]227; CHECK-NEXT:    ret228   %res= tail call <8 x half> @llvm.aarch64.neon.vluti4q.laneq.x2.v8f16(<8 x half> %vn1, <8 x half> %vn2, <16 x i8> %vm, i32 1)229   ret <8 x half> %res230}231 232define <8 x bfloat> @test_luti4q_laneq_x2_bf16(<8 x bfloat>%vn1, <8 x bfloat> %vn2, <16 x i8> %vm){233; CHECK-LABEL: test_luti4q_laneq_x2_bf16:234; CHECK:       // %bb.0:235; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1236; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1237; CHECK-NEXT:    luti4 v0.8h, { v0.8h, v1.8h }, v2[1]238; CHECK-NEXT:    ret239   %res= tail call <8 x bfloat> @llvm.aarch64.neon.vluti4q.laneq.x2.v8bf16(<8 x bfloat> %vn1, <8 x bfloat> %vn2, <16 x i8> %vm, i32 1)240   ret <8 x bfloat> %res241}242 243define <8 x bfloat> @test_luti4q_lane_x2_bf16(<8 x bfloat>%vn1, <8 x bfloat> %vn2, <8 x i8> %vm){244; CHECK-LABEL: test_luti4q_lane_x2_bf16:245; CHECK:       // %bb.0:246; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1247; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q2248; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1249; CHECK-NEXT:    luti4 v0.8h, { v0.8h, v1.8h }, v2[1]250; CHECK-NEXT:    ret251   %res= tail call <8 x bfloat> @llvm.aarch64.neon.vluti4q.lane.x2.v8bf16(<8 x bfloat> %vn1, <8 x bfloat> %vn2, <8 x i8> %vm, i32 1)252   ret <8 x bfloat> %res253}254