Home | History | Annotate | Download | only in ARM
      1 ; RUN: llc < %s -march=arm -mattr=+neon | FileCheck %s
      2 
      3 define <8 x i8> @v_bsli8(<8 x i8>* %A, <8 x i8>* %B, <8 x i8>* %C) nounwind {
      4 ;CHECK: v_bsli8:
      5 ;CHECK: vbsl
      6 	%tmp1 = load <8 x i8>* %A
      7 	%tmp2 = load <8 x i8>* %B
      8 	%tmp3 = load <8 x i8>* %C
      9 	%tmp4 = and <8 x i8> %tmp1, %tmp2
     10 	%tmp5 = xor <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
     11 	%tmp6 = and <8 x i8> %tmp5, %tmp3
     12 	%tmp7 = or <8 x i8> %tmp4, %tmp6
     13 	ret <8 x i8> %tmp7
     14 }
     15 
     16 define <4 x i16> @v_bsli16(<4 x i16>* %A, <4 x i16>* %B, <4 x i16>* %C) nounwind {
     17 ;CHECK: v_bsli16:
     18 ;CHECK: vbsl
     19 	%tmp1 = load <4 x i16>* %A
     20 	%tmp2 = load <4 x i16>* %B
     21 	%tmp3 = load <4 x i16>* %C
     22 	%tmp4 = and <4 x i16> %tmp1, %tmp2
     23 	%tmp5 = xor <4 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1 >
     24 	%tmp6 = and <4 x i16> %tmp5, %tmp3
     25 	%tmp7 = or <4 x i16> %tmp4, %tmp6
     26 	ret <4 x i16> %tmp7
     27 }
     28 
     29 define <2 x i32> @v_bsli32(<2 x i32>* %A, <2 x i32>* %B, <2 x i32>* %C) nounwind {
     30 ;CHECK: v_bsli32:
     31 ;CHECK: vbsl
     32 	%tmp1 = load <2 x i32>* %A
     33 	%tmp2 = load <2 x i32>* %B
     34 	%tmp3 = load <2 x i32>* %C
     35 	%tmp4 = and <2 x i32> %tmp1, %tmp2
     36 	%tmp5 = xor <2 x i32> %tmp1, < i32 -1, i32 -1 >
     37 	%tmp6 = and <2 x i32> %tmp5, %tmp3
     38 	%tmp7 = or <2 x i32> %tmp4, %tmp6
     39 	ret <2 x i32> %tmp7
     40 }
     41 
     42 define <1 x i64> @v_bsli64(<1 x i64>* %A, <1 x i64>* %B, <1 x i64>* %C) nounwind {
     43 ;CHECK: v_bsli64:
     44 ;CHECK: vbsl
     45 	%tmp1 = load <1 x i64>* %A
     46 	%tmp2 = load <1 x i64>* %B
     47 	%tmp3 = load <1 x i64>* %C
     48 	%tmp4 = and <1 x i64> %tmp1, %tmp2
     49 	%tmp5 = xor <1 x i64> %tmp1, < i64 -1 >
     50 	%tmp6 = and <1 x i64> %tmp5, %tmp3
     51 	%tmp7 = or <1 x i64> %tmp4, %tmp6
     52 	ret <1 x i64> %tmp7
     53 }
     54 
     55 define <16 x i8> @v_bslQi8(<16 x i8>* %A, <16 x i8>* %B, <16 x i8>* %C) nounwind {
     56 ;CHECK: v_bslQi8:
     57 ;CHECK: vbsl
     58 	%tmp1 = load <16 x i8>* %A
     59 	%tmp2 = load <16 x i8>* %B
     60 	%tmp3 = load <16 x i8>* %C
     61 	%tmp4 = and <16 x i8> %tmp1, %tmp2
     62 	%tmp5 = xor <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
     63 	%tmp6 = and <16 x i8> %tmp5, %tmp3
     64 	%tmp7 = or <16 x i8> %tmp4, %tmp6
     65 	ret <16 x i8> %tmp7
     66 }
     67 
     68 define <8 x i16> @v_bslQi16(<8 x i16>* %A, <8 x i16>* %B, <8 x i16>* %C) nounwind {
     69 ;CHECK: v_bslQi16:
     70 ;CHECK: vbsl
     71 	%tmp1 = load <8 x i16>* %A
     72 	%tmp2 = load <8 x i16>* %B
     73 	%tmp3 = load <8 x i16>* %C
     74 	%tmp4 = and <8 x i16> %tmp1, %tmp2
     75 	%tmp5 = xor <8 x i16> %tmp1, < i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1 >
     76 	%tmp6 = and <8 x i16> %tmp5, %tmp3
     77 	%tmp7 = or <8 x i16> %tmp4, %tmp6
     78 	ret <8 x i16> %tmp7
     79 }
     80 
     81 define <4 x i32> @v_bslQi32(<4 x i32>* %A, <4 x i32>* %B, <4 x i32>* %C) nounwind {
     82 ;CHECK: v_bslQi32:
     83 ;CHECK: vbsl
     84 	%tmp1 = load <4 x i32>* %A
     85 	%tmp2 = load <4 x i32>* %B
     86 	%tmp3 = load <4 x i32>* %C
     87 	%tmp4 = and <4 x i32> %tmp1, %tmp2
     88 	%tmp5 = xor <4 x i32> %tmp1, < i32 -1, i32 -1, i32 -1, i32 -1 >
     89 	%tmp6 = and <4 x i32> %tmp5, %tmp3
     90 	%tmp7 = or <4 x i32> %tmp4, %tmp6
     91 	ret <4 x i32> %tmp7
     92 }
     93 
     94 define <2 x i64> @v_bslQi64(<2 x i64>* %A, <2 x i64>* %B, <2 x i64>* %C) nounwind {
     95 ;CHECK: v_bslQi64:
     96 ;CHECK: vbsl
     97 	%tmp1 = load <2 x i64>* %A
     98 	%tmp2 = load <2 x i64>* %B
     99 	%tmp3 = load <2 x i64>* %C
    100 	%tmp4 = and <2 x i64> %tmp1, %tmp2
    101 	%tmp5 = xor <2 x i64> %tmp1, < i64 -1, i64 -1 >
    102 	%tmp6 = and <2 x i64> %tmp5, %tmp3
    103 	%tmp7 = or <2 x i64> %tmp4, %tmp6
    104 	ret <2 x i64> %tmp7
    105 }
    106