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