brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.4 KiB · 9379d78 Raw
328 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple aarch64-none-linux-gnu -mattr=+sve | FileCheck %s3 4define <vscale x 2 x i16> @dupsext_v2i8_v2i16(i8 %src, <vscale x 2 x i16> %b) {5; CHECK-LABEL: dupsext_v2i8_v2i16:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    sxtb w8, w08; CHECK-NEXT:    ptrue p0.d9; CHECK-NEXT:    mov z1.d, x810; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d11; CHECK-NEXT:    ret12entry:13    %in = sext i8 %src to i1614    %broadcast.splatinsert = insertelement <vscale x 2 x i16> poison, i16 %in, i16 015    %broadcast.splat = shufflevector <vscale x 2 x i16> %broadcast.splatinsert, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer16    %out = mul nsw <vscale x 2 x i16> %broadcast.splat, %b17    ret <vscale x 2 x i16> %out18}19 20define <vscale x 4 x i16> @dupsext_v4i8_v4i16(i8 %src, <vscale x 4 x i16> %b) {21; CHECK-LABEL: dupsext_v4i8_v4i16:22; CHECK:       // %bb.0: // %entry23; CHECK-NEXT:    sxtb w8, w024; CHECK-NEXT:    ptrue p0.s25; CHECK-NEXT:    mov z1.s, w826; CHECK-NEXT:    mul z0.s, p0/m, z0.s, z1.s27; CHECK-NEXT:    ret28entry:29    %in = sext i8 %src to i1630    %broadcast.splatinsert = insertelement <vscale x 4 x i16> poison, i16 %in, i16 031    %broadcast.splat = shufflevector <vscale x 4 x i16> %broadcast.splatinsert, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer32    %out = mul nsw <vscale x 4 x i16> %broadcast.splat, %b33    ret <vscale x 4 x i16> %out34}35 36define <vscale x 8 x i16> @dupsext_v8i8_v8i16(i8 %src, <vscale x 8 x i16> %b) {37; CHECK-LABEL: dupsext_v8i8_v8i16:38; CHECK:       // %bb.0: // %entry39; CHECK-NEXT:    sxtb w8, w040; CHECK-NEXT:    ptrue p0.h41; CHECK-NEXT:    mov z1.h, w842; CHECK-NEXT:    mul z0.h, p0/m, z0.h, z1.h43; CHECK-NEXT:    ret44entry:45    %in = sext i8 %src to i1646    %broadcast.splatinsert = insertelement <vscale x 8 x i16> poison, i16 %in, i16 047    %broadcast.splat = shufflevector <vscale x 8 x i16> %broadcast.splatinsert, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer48    %out = mul nsw <vscale x 8 x i16> %broadcast.splat, %b49    ret <vscale x 8 x i16> %out50}51 52define <vscale x 2 x i32> @dupsext_v2i8_v2i32(i8 %src, <vscale x 2 x i32> %b) {53; CHECK-LABEL: dupsext_v2i8_v2i32:54; CHECK:       // %bb.0: // %entry55; CHECK-NEXT:    sxtb w8, w056; CHECK-NEXT:    ptrue p0.d57; CHECK-NEXT:    mov z1.d, x858; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d59; CHECK-NEXT:    ret60entry:61    %in = sext i8 %src to i3262    %broadcast.splatinsert = insertelement <vscale x 2 x i32> poison, i32 %in, i32 063    %broadcast.splat = shufflevector <vscale x 2 x i32> %broadcast.splatinsert, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer64    %out = mul nsw <vscale x 2 x i32> %broadcast.splat, %b65    ret <vscale x 2 x i32> %out66}67 68define <vscale x 4 x i32> @dupsext_v4i8_v4i32(i8 %src, <vscale x 4 x i32> %b) {69; CHECK-LABEL: dupsext_v4i8_v4i32:70; CHECK:       // %bb.0: // %entry71; CHECK-NEXT:    sxtb w8, w072; CHECK-NEXT:    ptrue p0.s73; CHECK-NEXT:    mov z1.s, w874; CHECK-NEXT:    mul z0.s, p0/m, z0.s, z1.s75; CHECK-NEXT:    ret76entry:77    %in = sext i8 %src to i3278    %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %in, i32 079    %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer80    %out = mul nsw <vscale x 4 x i32> %broadcast.splat, %b81    ret <vscale x 4 x i32> %out82}83 84define <vscale x 2 x i64> @dupsext_v2i8_v2i64(i8 %src, <vscale x 2 x i64> %b) {85; CHECK-LABEL: dupsext_v2i8_v2i64:86; CHECK:       // %bb.0: // %entry87; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x088; CHECK-NEXT:    sxtb x8, w089; CHECK-NEXT:    ptrue p0.d90; CHECK-NEXT:    mov z1.d, x891; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d92; CHECK-NEXT:    ret93entry:94    %in = sext i8 %src to i6495    %broadcast.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %in, i64 096    %broadcast.splat = shufflevector <vscale x 2 x i64> %broadcast.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer97    %out = mul nsw <vscale x 2 x i64> %broadcast.splat, %b98    ret <vscale x 2 x i64> %out99}100 101define <vscale x 2 x i32> @dupsext_v2i16_v2i32(i16 %src, <vscale x 2 x i32> %b) {102; CHECK-LABEL: dupsext_v2i16_v2i32:103; CHECK:       // %bb.0: // %entry104; CHECK-NEXT:    sxth w8, w0105; CHECK-NEXT:    ptrue p0.d106; CHECK-NEXT:    mov z1.d, x8107; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d108; CHECK-NEXT:    ret109entry:110    %in = sext i16 %src to i32111    %broadcast.splatinsert = insertelement <vscale x 2 x i32> poison, i32 %in, i32 0112    %broadcast.splat = shufflevector <vscale x 2 x i32> %broadcast.splatinsert, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer113    %out = mul nsw <vscale x 2 x i32> %broadcast.splat, %b114    ret <vscale x 2 x i32> %out115}116 117define <vscale x 4 x i32> @dupsext_v4i16_v4i32(i16 %src, <vscale x 4 x i32> %b) {118; CHECK-LABEL: dupsext_v4i16_v4i32:119; CHECK:       // %bb.0: // %entry120; CHECK-NEXT:    sxth w8, w0121; CHECK-NEXT:    ptrue p0.s122; CHECK-NEXT:    mov z1.s, w8123; CHECK-NEXT:    mul z0.s, p0/m, z0.s, z1.s124; CHECK-NEXT:    ret125entry:126    %in = sext i16 %src to i32127    %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %in, i32 0128    %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer129    %out = mul nsw <vscale x 4 x i32> %broadcast.splat, %b130    ret <vscale x 4 x i32> %out131}132 133define <vscale x 2 x i64> @dupsext_v2i16_v2i64(i16 %src, <vscale x 2 x i64> %b) {134; CHECK-LABEL: dupsext_v2i16_v2i64:135; CHECK:       // %bb.0: // %entry136; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0137; CHECK-NEXT:    sxth x8, w0138; CHECK-NEXT:    ptrue p0.d139; CHECK-NEXT:    mov z1.d, x8140; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d141; CHECK-NEXT:    ret142entry:143    %in = sext i16 %src to i64144    %broadcast.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %in, i64 0145    %broadcast.splat = shufflevector <vscale x 2 x i64> %broadcast.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer146    %out = mul nsw <vscale x 2 x i64> %broadcast.splat, %b147    ret <vscale x 2 x i64> %out148}149 150define <vscale x 2 x i64> @dupsext_v2i32_v2i64(i32 %src, <vscale x 2 x i64> %b) {151; CHECK-LABEL: dupsext_v2i32_v2i64:152; CHECK:       // %bb.0: // %entry153; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0154; CHECK-NEXT:    sxtw x8, w0155; CHECK-NEXT:    ptrue p0.d156; CHECK-NEXT:    mov z1.d, x8157; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d158; CHECK-NEXT:    ret159entry:160    %in = sext i32 %src to i64161    %broadcast.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %in, i64 0162    %broadcast.splat = shufflevector <vscale x 2 x i64> %broadcast.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer163    %out = mul nsw <vscale x 2 x i64> %broadcast.splat, %b164    ret <vscale x 2 x i64> %out165}166 167define <vscale x 2 x i16> @dupzext_v2i8_v2i16(i8 %src, <vscale x 2 x i16> %b) {168; CHECK-LABEL: dupzext_v2i8_v2i16:169; CHECK:       // %bb.0: // %entry170; CHECK-NEXT:    and w8, w0, #0xff171; CHECK-NEXT:    ptrue p0.d172; CHECK-NEXT:    mov z1.d, x8173; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d174; CHECK-NEXT:    ret175entry:176    %in = zext i8 %src to i16177    %broadcast.splatinsert = insertelement <vscale x 2 x i16> poison, i16 %in, i16 0178    %broadcast.splat = shufflevector <vscale x 2 x i16> %broadcast.splatinsert, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer179    %out = mul nuw <vscale x 2 x i16> %broadcast.splat, %b180    ret <vscale x 2 x i16> %out181}182 183define <vscale x 4 x i16> @dupzext_v4i8_v4i16(i8 %src, <vscale x 4 x i16> %b) {184; CHECK-LABEL: dupzext_v4i8_v4i16:185; CHECK:       // %bb.0: // %entry186; CHECK-NEXT:    and w8, w0, #0xff187; CHECK-NEXT:    ptrue p0.s188; CHECK-NEXT:    mov z1.s, w8189; CHECK-NEXT:    mul z0.s, p0/m, z0.s, z1.s190; CHECK-NEXT:    ret191entry:192    %in = zext i8 %src to i16193    %broadcast.splatinsert = insertelement <vscale x 4 x i16> poison, i16 %in, i16 0194    %broadcast.splat = shufflevector <vscale x 4 x i16> %broadcast.splatinsert, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer195    %out = mul nuw <vscale x 4 x i16> %broadcast.splat, %b196    ret <vscale x 4 x i16> %out197}198 199define <vscale x 8 x i16> @dupzext_v8i8_v8i16(i8 %src, <vscale x 8 x i16> %b) {200; CHECK-LABEL: dupzext_v8i8_v8i16:201; CHECK:       // %bb.0: // %entry202; CHECK-NEXT:    and w8, w0, #0xff203; CHECK-NEXT:    ptrue p0.h204; CHECK-NEXT:    mov z1.h, w8205; CHECK-NEXT:    mul z0.h, p0/m, z0.h, z1.h206; CHECK-NEXT:    ret207entry:208    %in = zext i8 %src to i16209    %broadcast.splatinsert = insertelement <vscale x 8 x i16> poison, i16 %in, i16 0210    %broadcast.splat = shufflevector <vscale x 8 x i16> %broadcast.splatinsert, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer211    %out = mul nuw <vscale x 8 x i16> %broadcast.splat, %b212    ret <vscale x 8 x i16> %out213}214 215define <vscale x 2 x i32> @dupzext_v2i8_v2i32(i8 %src, <vscale x 2 x i32> %b) {216; CHECK-LABEL: dupzext_v2i8_v2i32:217; CHECK:       // %bb.0: // %entry218; CHECK-NEXT:    and w8, w0, #0xff219; CHECK-NEXT:    ptrue p0.d220; CHECK-NEXT:    mov z1.d, x8221; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d222; CHECK-NEXT:    ret223entry:224    %in = zext i8 %src to i32225    %broadcast.splatinsert = insertelement <vscale x 2 x i32> poison, i32 %in, i32 0226    %broadcast.splat = shufflevector <vscale x 2 x i32> %broadcast.splatinsert, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer227    %out = mul nuw <vscale x 2 x i32> %broadcast.splat, %b228    ret <vscale x 2 x i32> %out229}230 231define <vscale x 4 x i32> @dupzext_v4i8_v4i32(i8 %src, <vscale x 4 x i32> %b) {232; CHECK-LABEL: dupzext_v4i8_v4i32:233; CHECK:       // %bb.0: // %entry234; CHECK-NEXT:    and w8, w0, #0xff235; CHECK-NEXT:    ptrue p0.s236; CHECK-NEXT:    mov z1.s, w8237; CHECK-NEXT:    mul z0.s, p0/m, z0.s, z1.s238; CHECK-NEXT:    ret239entry:240    %in = zext i8 %src to i32241    %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %in, i32 0242    %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer243    %out = mul nuw <vscale x 4 x i32> %broadcast.splat, %b244    ret <vscale x 4 x i32> %out245}246 247define <vscale x 2 x i64> @dupzext_v2i8_v2i64(i8 %src, <vscale x 2 x i64> %b) {248; CHECK-LABEL: dupzext_v2i8_v2i64:249; CHECK:       // %bb.0: // %entry250; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0251; CHECK-NEXT:    and x8, x0, #0xff252; CHECK-NEXT:    ptrue p0.d253; CHECK-NEXT:    mov z1.d, x8254; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d255; CHECK-NEXT:    ret256entry:257    %in = zext i8 %src to i64258    %broadcast.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %in, i64 0259    %broadcast.splat = shufflevector <vscale x 2 x i64> %broadcast.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer260    %out = mul nuw <vscale x 2 x i64> %broadcast.splat, %b261    ret <vscale x 2 x i64> %out262}263 264define <vscale x 2 x i32> @dupzext_v2i16_v2i32(i16 %src, <vscale x 2 x i32> %b) {265; CHECK-LABEL: dupzext_v2i16_v2i32:266; CHECK:       // %bb.0: // %entry267; CHECK-NEXT:    and w8, w0, #0xffff268; CHECK-NEXT:    ptrue p0.d269; CHECK-NEXT:    mov z1.d, x8270; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d271; CHECK-NEXT:    ret272entry:273    %in = zext i16 %src to i32274    %broadcast.splatinsert = insertelement <vscale x 2 x i32> poison, i32 %in, i32 0275    %broadcast.splat = shufflevector <vscale x 2 x i32> %broadcast.splatinsert, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer276    %out = mul nuw <vscale x 2 x i32> %broadcast.splat, %b277    ret <vscale x 2 x i32> %out278}279 280define <vscale x 4 x i32> @dupzext_v4i16_v4i32(i16 %src, <vscale x 4 x i32> %b) {281; CHECK-LABEL: dupzext_v4i16_v4i32:282; CHECK:       // %bb.0: // %entry283; CHECK-NEXT:    and w8, w0, #0xffff284; CHECK-NEXT:    ptrue p0.s285; CHECK-NEXT:    mov z1.s, w8286; CHECK-NEXT:    mul z0.s, p0/m, z0.s, z1.s287; CHECK-NEXT:    ret288entry:289    %in = zext i16 %src to i32290    %broadcast.splatinsert = insertelement <vscale x 4 x i32> poison, i32 %in, i32 0291    %broadcast.splat = shufflevector <vscale x 4 x i32> %broadcast.splatinsert, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer292    %out = mul nuw <vscale x 4 x i32> %broadcast.splat, %b293    ret <vscale x 4 x i32> %out294}295 296define <vscale x 2 x i64> @dupzext_v2i16_v2i64(i16 %src, <vscale x 2 x i64> %b) {297; CHECK-LABEL: dupzext_v2i16_v2i64:298; CHECK:       // %bb.0: // %entry299; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0300; CHECK-NEXT:    and x8, x0, #0xffff301; CHECK-NEXT:    ptrue p0.d302; CHECK-NEXT:    mov z1.d, x8303; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d304; CHECK-NEXT:    ret305entry:306    %in = zext i16 %src to i64307    %broadcast.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %in, i64 0308    %broadcast.splat = shufflevector <vscale x 2 x i64> %broadcast.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer309    %out = mul nuw <vscale x 2 x i64> %broadcast.splat, %b310    ret <vscale x 2 x i64> %out311}312 313define <vscale x 2 x i64> @dupzext_v2i32_v2i64(i32 %src, <vscale x 2 x i64> %b) {314; CHECK-LABEL: dupzext_v2i32_v2i64:315; CHECK:       // %bb.0: // %entry316; CHECK-NEXT:    mov w8, w0317; CHECK-NEXT:    ptrue p0.d318; CHECK-NEXT:    mov z1.d, x8319; CHECK-NEXT:    mul z0.d, p0/m, z0.d, z1.d320; CHECK-NEXT:    ret321entry:322    %in = zext i32 %src to i64323    %broadcast.splatinsert = insertelement <vscale x 2 x i64> poison, i64 %in, i64 0324    %broadcast.splat = shufflevector <vscale x 2 x i64> %broadcast.splatinsert, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer325    %out = mul nuw <vscale x 2 x i64> %broadcast.splat, %b326    ret <vscale x 2 x i64> %out327}328