brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.1 KiB · 3f59022 Raw
364 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s3 4define <8 x i8> @extract_2_v4i16(<4 x i16> %a, <4 x i16> %b) {5; CHECK-LABEL: extract_2_v4i16:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v1.8b8; CHECK-NEXT:    ret9entry:10  %a0 = extractelement <4 x i16> %a, i32 011  %a1 = extractelement <4 x i16> %a, i32 112  %a2 = extractelement <4 x i16> %a, i32 213  %a3 = extractelement <4 x i16> %a, i32 314  %b0 = extractelement <4 x i16> %b, i32 015  %b1 = extractelement <4 x i16> %b, i32 116  %b2 = extractelement <4 x i16> %b, i32 217  %b3 = extractelement <4 x i16> %b, i32 318  %t0 = trunc i16 %a0 to i819  %t1 = trunc i16 %a1 to i820  %t2 = trunc i16 %a2 to i821  %t3 = trunc i16 %a3 to i822  %t4 = trunc i16 %b0 to i823  %t5 = trunc i16 %b1 to i824  %t6 = trunc i16 %b2 to i825  %t7 = trunc i16 %b3 to i826  %i0 = insertelement <8 x i8> undef, i8 %t0, i32 027  %i1 = insertelement <8 x i8> %i0, i8 %t1, i32 128  %i2 = insertelement <8 x i8> %i1, i8 %t2, i32 229  %i3 = insertelement <8 x i8> %i2, i8 %t3, i32 330  %i4 = insertelement <8 x i8> %i3, i8 %t4, i32 431  %i5 = insertelement <8 x i8> %i4, i8 %t5, i32 532  %i6 = insertelement <8 x i8> %i5, i8 %t6, i32 633  %i7 = insertelement <8 x i8> %i6, i8 %t7, i32 734  ret <8 x i8> %i735}36 37define <8 x i8> @extract_2_v4i32(<4 x i32> %a, <4 x i32> %b) {38; CHECK-LABEL: extract_2_v4i32:39; CHECK:       // %bb.0: // %entry40; CHECK-NEXT:    mov w8, v0.s[1]41; CHECK-NEXT:    mov w9, v0.s[2]42; CHECK-NEXT:    mov w10, v0.s[3]43; CHECK-NEXT:    mov v0.b[1], w844; CHECK-NEXT:    mov w8, v1.s[1]45; CHECK-NEXT:    mov v0.b[2], w946; CHECK-NEXT:    mov w9, v1.s[2]47; CHECK-NEXT:    mov v0.b[3], w1048; CHECK-NEXT:    mov v0.b[4], v1.b[0]49; CHECK-NEXT:    mov v0.b[5], w850; CHECK-NEXT:    mov w8, v1.s[3]51; CHECK-NEXT:    mov v0.b[6], w952; CHECK-NEXT:    mov v0.b[7], w853; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $q054; CHECK-NEXT:    ret55entry:56  %a0 = extractelement <4 x i32> %a, i32 057  %a1 = extractelement <4 x i32> %a, i32 158  %a2 = extractelement <4 x i32> %a, i32 259  %a3 = extractelement <4 x i32> %a, i32 360  %b0 = extractelement <4 x i32> %b, i32 061  %b1 = extractelement <4 x i32> %b, i32 162  %b2 = extractelement <4 x i32> %b, i32 263  %b3 = extractelement <4 x i32> %b, i32 364  %t0 = trunc i32 %a0 to i865  %t1 = trunc i32 %a1 to i866  %t2 = trunc i32 %a2 to i867  %t3 = trunc i32 %a3 to i868  %t4 = trunc i32 %b0 to i869  %t5 = trunc i32 %b1 to i870  %t6 = trunc i32 %b2 to i871  %t7 = trunc i32 %b3 to i872  %i0 = insertelement <8 x i8> undef, i8 %t0, i32 073  %i1 = insertelement <8 x i8> %i0, i8 %t1, i32 174  %i2 = insertelement <8 x i8> %i1, i8 %t2, i32 275  %i3 = insertelement <8 x i8> %i2, i8 %t3, i32 376  %i4 = insertelement <8 x i8> %i3, i8 %t4, i32 477  %i5 = insertelement <8 x i8> %i4, i8 %t5, i32 578  %i6 = insertelement <8 x i8> %i5, i8 %t6, i32 679  %i7 = insertelement <8 x i8> %i6, i8 %t7, i32 780  ret <8 x i8> %i781}82 83define <16 x i8> @extract_4_v4i16(<4 x i16> %a, <4 x i16> %b, <4 x i16> %c, <4 x i16> %d) {84; CHECK-LABEL: extract_4_v4i16:85; CHECK:       // %bb.0: // %entry86; CHECK-NEXT:    // kill: def $d2 killed $d2 def $q287; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q088; CHECK-NEXT:    // kill: def $d3 killed $d3 def $q389; CHECK-NEXT:    // kill: def $d1 killed $d1 def $q190; CHECK-NEXT:    mov v2.d[1], v3.d[0]91; CHECK-NEXT:    mov v0.d[1], v1.d[0]92; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v2.16b93; CHECK-NEXT:    ret94entry:95  %a0 = extractelement <4 x i16> %a, i32 096  %a1 = extractelement <4 x i16> %a, i32 197  %a2 = extractelement <4 x i16> %a, i32 298  %a3 = extractelement <4 x i16> %a, i32 399  %b0 = extractelement <4 x i16> %b, i32 0100  %b1 = extractelement <4 x i16> %b, i32 1101  %b2 = extractelement <4 x i16> %b, i32 2102  %b3 = extractelement <4 x i16> %b, i32 3103  %c0 = extractelement <4 x i16> %c, i32 0104  %c1 = extractelement <4 x i16> %c, i32 1105  %c2 = extractelement <4 x i16> %c, i32 2106  %c3 = extractelement <4 x i16> %c, i32 3107  %d0 = extractelement <4 x i16> %d, i32 0108  %d1 = extractelement <4 x i16> %d, i32 1109  %d2 = extractelement <4 x i16> %d, i32 2110  %d3 = extractelement <4 x i16> %d, i32 3111  %t0 = trunc i16 %a0 to i8112  %t1 = trunc i16 %a1 to i8113  %t2 = trunc i16 %a2 to i8114  %t3 = trunc i16 %a3 to i8115  %t4 = trunc i16 %b0 to i8116  %t5 = trunc i16 %b1 to i8117  %t6 = trunc i16 %b2 to i8118  %t7 = trunc i16 %b3 to i8119  %t8 = trunc i16 %c0 to i8120  %t9 = trunc i16 %c1 to i8121  %t10 = trunc i16 %c2 to i8122  %t11 = trunc i16 %c3 to i8123  %t12 = trunc i16 %d0 to i8124  %t13 = trunc i16 %d1 to i8125  %t14 = trunc i16 %d2 to i8126  %t15 = trunc i16 %d3 to i8127  %i0 = insertelement <16 x i8> undef, i8 %t0, i32 0128  %i1 = insertelement <16 x i8> %i0, i8 %t1, i32 1129  %i2 = insertelement <16 x i8> %i1, i8 %t2, i32 2130  %i3 = insertelement <16 x i8> %i2, i8 %t3, i32 3131  %i4 = insertelement <16 x i8> %i3, i8 %t4, i32 4132  %i5 = insertelement <16 x i8> %i4, i8 %t5, i32 5133  %i6 = insertelement <16 x i8> %i5, i8 %t6, i32 6134  %i7 = insertelement <16 x i8> %i6, i8 %t7, i32 7135  %i8 = insertelement <16 x i8> %i7, i8 %t8, i32 8136  %i9 = insertelement <16 x i8> %i8, i8 %t9, i32 9137  %i10 = insertelement <16 x i8> %i9, i8 %t10, i32 10138  %i11 = insertelement <16 x i8> %i10, i8 %t11, i32 11139  %i12 = insertelement <16 x i8> %i11, i8 %t12, i32 12140  %i13 = insertelement <16 x i8> %i12, i8 %t13, i32 13141  %i14 = insertelement <16 x i8> %i13, i8 %t14, i32 14142  %i15 = insertelement <16 x i8> %i14, i8 %t15, i32 15143  ret <16 x i8> %i15144}145 146define <16 x i8> @extract_4_v4i32(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) {147; CHECK-LABEL: extract_4_v4i32:148; CHECK:       // %bb.0: // %entry149; CHECK-NEXT:    uzp1 v2.8h, v2.8h, v3.8h150; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v1.8h151; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v2.16b152; CHECK-NEXT:    ret153entry:154  %a0 = extractelement <4 x i32> %a, i32 0155  %a1 = extractelement <4 x i32> %a, i32 1156  %a2 = extractelement <4 x i32> %a, i32 2157  %a3 = extractelement <4 x i32> %a, i32 3158  %b0 = extractelement <4 x i32> %b, i32 0159  %b1 = extractelement <4 x i32> %b, i32 1160  %b2 = extractelement <4 x i32> %b, i32 2161  %b3 = extractelement <4 x i32> %b, i32 3162  %c0 = extractelement <4 x i32> %c, i32 0163  %c1 = extractelement <4 x i32> %c, i32 1164  %c2 = extractelement <4 x i32> %c, i32 2165  %c3 = extractelement <4 x i32> %c, i32 3166  %d0 = extractelement <4 x i32> %d, i32 0167  %d1 = extractelement <4 x i32> %d, i32 1168  %d2 = extractelement <4 x i32> %d, i32 2169  %d3 = extractelement <4 x i32> %d, i32 3170  %t0 = trunc i32 %a0 to i8171  %t1 = trunc i32 %a1 to i8172  %t2 = trunc i32 %a2 to i8173  %t3 = trunc i32 %a3 to i8174  %t4 = trunc i32 %b0 to i8175  %t5 = trunc i32 %b1 to i8176  %t6 = trunc i32 %b2 to i8177  %t7 = trunc i32 %b3 to i8178  %t8 = trunc i32 %c0 to i8179  %t9 = trunc i32 %c1 to i8180  %t10 = trunc i32 %c2 to i8181  %t11 = trunc i32 %c3 to i8182  %t12 = trunc i32 %d0 to i8183  %t13 = trunc i32 %d1 to i8184  %t14 = trunc i32 %d2 to i8185  %t15 = trunc i32 %d3 to i8186  %i0 = insertelement <16 x i8> undef, i8 %t0, i32 0187  %i1 = insertelement <16 x i8> %i0, i8 %t1, i32 1188  %i2 = insertelement <16 x i8> %i1, i8 %t2, i32 2189  %i3 = insertelement <16 x i8> %i2, i8 %t3, i32 3190  %i4 = insertelement <16 x i8> %i3, i8 %t4, i32 4191  %i5 = insertelement <16 x i8> %i4, i8 %t5, i32 5192  %i6 = insertelement <16 x i8> %i5, i8 %t6, i32 6193  %i7 = insertelement <16 x i8> %i6, i8 %t7, i32 7194  %i8 = insertelement <16 x i8> %i7, i8 %t8, i32 8195  %i9 = insertelement <16 x i8> %i8, i8 %t9, i32 9196  %i10 = insertelement <16 x i8> %i9, i8 %t10, i32 10197  %i11 = insertelement <16 x i8> %i10, i8 %t11, i32 11198  %i12 = insertelement <16 x i8> %i11, i8 %t12, i32 12199  %i13 = insertelement <16 x i8> %i12, i8 %t13, i32 13200  %i14 = insertelement <16 x i8> %i13, i8 %t14, i32 14201  %i15 = insertelement <16 x i8> %i14, i8 %t15, i32 15202  ret <16 x i8> %i15203}204 205define <16 x i8> @extract_4_mixed(<4 x i16> %a, <4 x i32> %b, <4 x i32> %c, <4 x i16> %d) {206; CHECK-LABEL: extract_4_mixed:207; CHECK:       // %bb.0: // %entry208; CHECK-NEXT:    xtn v2.4h, v2.4s209; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0210; CHECK-NEXT:    // kill: def $d3 killed $d3 def $q3211; CHECK-NEXT:    xtn2 v0.8h, v1.4s212; CHECK-NEXT:    mov v2.d[1], v3.d[0]213; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v2.16b214; CHECK-NEXT:    ret215entry:216  %a0 = extractelement <4 x i16> %a, i32 0217  %a1 = extractelement <4 x i16> %a, i32 1218  %a2 = extractelement <4 x i16> %a, i32 2219  %a3 = extractelement <4 x i16> %a, i32 3220  %b0 = extractelement <4 x i32> %b, i32 0221  %b1 = extractelement <4 x i32> %b, i32 1222  %b2 = extractelement <4 x i32> %b, i32 2223  %b3 = extractelement <4 x i32> %b, i32 3224  %c0 = extractelement <4 x i32> %c, i32 0225  %c1 = extractelement <4 x i32> %c, i32 1226  %c2 = extractelement <4 x i32> %c, i32 2227  %c3 = extractelement <4 x i32> %c, i32 3228  %d0 = extractelement <4 x i16> %d, i32 0229  %d1 = extractelement <4 x i16> %d, i32 1230  %d2 = extractelement <4 x i16> %d, i32 2231  %d3 = extractelement <4 x i16> %d, i32 3232  %t0 = trunc i16 %a0 to i8233  %t1 = trunc i16 %a1 to i8234  %t2 = trunc i16 %a2 to i8235  %t3 = trunc i16 %a3 to i8236  %t4 = trunc i32 %b0 to i8237  %t5 = trunc i32 %b1 to i8238  %t6 = trunc i32 %b2 to i8239  %t7 = trunc i32 %b3 to i8240  %t8 = trunc i32 %c0 to i8241  %t9 = trunc i32 %c1 to i8242  %t10 = trunc i32 %c2 to i8243  %t11 = trunc i32 %c3 to i8244  %t12 = trunc i16 %d0 to i8245  %t13 = trunc i16 %d1 to i8246  %t14 = trunc i16 %d2 to i8247  %t15 = trunc i16 %d3 to i8248  %i0 = insertelement <16 x i8> undef, i8 %t0, i32 0249  %i1 = insertelement <16 x i8> %i0, i8 %t1, i32 1250  %i2 = insertelement <16 x i8> %i1, i8 %t2, i32 2251  %i3 = insertelement <16 x i8> %i2, i8 %t3, i32 3252  %i4 = insertelement <16 x i8> %i3, i8 %t4, i32 4253  %i5 = insertelement <16 x i8> %i4, i8 %t5, i32 5254  %i6 = insertelement <16 x i8> %i5, i8 %t6, i32 6255  %i7 = insertelement <16 x i8> %i6, i8 %t7, i32 7256  %i8 = insertelement <16 x i8> %i7, i8 %t8, i32 8257  %i9 = insertelement <16 x i8> %i8, i8 %t9, i32 9258  %i10 = insertelement <16 x i8> %i9, i8 %t10, i32 10259  %i11 = insertelement <16 x i8> %i10, i8 %t11, i32 11260  %i12 = insertelement <16 x i8> %i11, i8 %t12, i32 12261  %i13 = insertelement <16 x i8> %i12, i8 %t13, i32 13262  %i14 = insertelement <16 x i8> %i13, i8 %t14, i32 14263  %i15 = insertelement <16 x i8> %i14, i8 %t15, i32 15264  ret <16 x i8> %i15265}266 267define <16 x i8> @extract_4_v4i32_badindex(<4 x i32> %a, <4 x i32> %b, <4 x i32> %c, <4 x i32> %d) {268; CHECK-LABEL: extract_4_v4i32_badindex:269; CHECK:       // %bb.0: // %entry270; CHECK-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3271; CHECK-NEXT:    adrp x8, .LCPI5_0272; CHECK-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3273; CHECK-NEXT:    ldr q4, [x8, :lo12:.LCPI5_0]274; CHECK-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3275; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3276; CHECK-NEXT:    tbl v0.16b, { v0.16b, v1.16b, v2.16b, v3.16b }, v4.16b277; CHECK-NEXT:    ret278entry:279  %a0 = extractelement <4 x i32> %a, i32 0280  %a1 = extractelement <4 x i32> %a, i32 1281  %a2 = extractelement <4 x i32> %a, i32 2282  %a3 = extractelement <4 x i32> %a, i32 3283  %b0 = extractelement <4 x i32> %b, i32 0284  %b1 = extractelement <4 x i32> %b, i32 2285  %b2 = extractelement <4 x i32> %b, i32 1286  %b3 = extractelement <4 x i32> %b, i32 3287  %c0 = extractelement <4 x i32> %c, i32 0288  %c1 = extractelement <4 x i32> %c, i32 1289  %c2 = extractelement <4 x i32> %c, i32 2290  %c3 = extractelement <4 x i32> %c, i32 3291  %d0 = extractelement <4 x i32> %d, i32 0292  %d1 = extractelement <4 x i32> %d, i32 1293  %d2 = extractelement <4 x i32> %d, i32 2294  %d3 = extractelement <4 x i32> %d, i32 3295  %t0 = trunc i32 %a0 to i8296  %t1 = trunc i32 %a1 to i8297  %t2 = trunc i32 %a2 to i8298  %t3 = trunc i32 %a3 to i8299  %t4 = trunc i32 %b0 to i8300  %t5 = trunc i32 %b1 to i8301  %t6 = trunc i32 %b2 to i8302  %t7 = trunc i32 %b3 to i8303  %t8 = trunc i32 %c0 to i8304  %t9 = trunc i32 %c1 to i8305  %t10 = trunc i32 %c2 to i8306  %t11 = trunc i32 %c3 to i8307  %t12 = trunc i32 %d0 to i8308  %t13 = trunc i32 %d1 to i8309  %t14 = trunc i32 %d2 to i8310  %t15 = trunc i32 %d3 to i8311  %i0 = insertelement <16 x i8> undef, i8 %t0, i32 0312  %i1 = insertelement <16 x i8> %i0, i8 %t1, i32 1313  %i2 = insertelement <16 x i8> %i1, i8 %t2, i32 2314  %i3 = insertelement <16 x i8> %i2, i8 %t3, i32 3315  %i4 = insertelement <16 x i8> %i3, i8 %t4, i32 4316  %i5 = insertelement <16 x i8> %i4, i8 %t5, i32 5317  %i6 = insertelement <16 x i8> %i5, i8 %t6, i32 6318  %i7 = insertelement <16 x i8> %i6, i8 %t7, i32 7319  %i8 = insertelement <16 x i8> %i7, i8 %t8, i32 8320  %i9 = insertelement <16 x i8> %i8, i8 %t9, i32 9321  %i10 = insertelement <16 x i8> %i9, i8 %t10, i32 10322  %i11 = insertelement <16 x i8> %i10, i8 %t11, i32 11323  %i12 = insertelement <16 x i8> %i11, i8 %t12, i32 12324  %i13 = insertelement <16 x i8> %i12, i8 %t13, i32 13325  %i14 = insertelement <16 x i8> %i13, i8 %t14, i32 14326  %i15 = insertelement <16 x i8> %i14, i8 %t15, i32 15327  ret <16 x i8> %i15328}329 330define <16 x i8> @extract_4_v4i32_one(<4 x i32> %a) {331; CHECK-LABEL: extract_4_v4i32_one:332; CHECK:       // %bb.0: // %entry333; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v0.8h334; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v0.16b335; CHECK-NEXT:    ret336entry:337  %a0 = extractelement <4 x i32> %a, i32 0338  %a1 = extractelement <4 x i32> %a, i32 1339  %a2 = extractelement <4 x i32> %a, i32 2340  %a3 = extractelement <4 x i32> %a, i32 3341  %t0 = trunc i32 %a0 to i8342  %t1 = trunc i32 %a1 to i8343  %t2 = trunc i32 %a2 to i8344  %t3 = trunc i32 %a3 to i8345  %i0 = insertelement <16 x i8> undef, i8 %t0, i32 0346  %i1 = insertelement <16 x i8> %i0, i8 %t1, i32 1347  %i2 = insertelement <16 x i8> %i1, i8 %t2, i32 2348  %i3 = insertelement <16 x i8> %i2, i8 %t3, i32 3349  %i4 = insertelement <16 x i8> %i3, i8 %t0, i32 4350  %i5 = insertelement <16 x i8> %i4, i8 %t1, i32 5351  %i6 = insertelement <16 x i8> %i5, i8 %t2, i32 6352  %i7 = insertelement <16 x i8> %i6, i8 %t3, i32 7353  %i8 = insertelement <16 x i8> %i7, i8 %t0, i32 8354  %i9 = insertelement <16 x i8> %i8, i8 %t1, i32 9355  %i10 = insertelement <16 x i8> %i9, i8 %t2, i32 10356  %i11 = insertelement <16 x i8> %i10, i8 %t3, i32 11357  %i12 = insertelement <16 x i8> %i11, i8 %t0, i32 12358  %i13 = insertelement <16 x i8> %i12, i8 %t1, i32 13359  %i14 = insertelement <16 x i8> %i13, i8 %t2, i32 14360  %i15 = insertelement <16 x i8> %i14, i8 %t3, i32 15361  ret <16 x i8> %i15362}363 364