Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
      2 
      3 define <8 x i8> @v_orrimm(<8 x i8>* %A) nounwind {
      4 ; CHECK-LABEL: v_orrimm:
      5 ; CHECK-NOT: mov
      6 ; CHECK-NOT: mvn
      7 ; CHECK: orr
      8 	%tmp1 = load <8 x i8>, <8 x i8>* %A
      9 	%tmp3 = or <8 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
     10 	ret <8 x i8> %tmp3
     11 }
     12 
     13 define <16 x i8> @v_orrimmQ(<16 x i8>* %A) nounwind {
     14 ; CHECK: v_orrimmQ
     15 ; CHECK-NOT: mov
     16 ; CHECK-NOT: mvn
     17 ; CHECK: orr
     18 	%tmp1 = load <16 x i8>, <16 x i8>* %A
     19 	%tmp3 = or <16 x i8> %tmp1, <i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1, i8 0, i8 0, i8 0, i8 1>
     20 	ret <16 x i8> %tmp3
     21 }
     22 
     23 define <8 x i8> @v_bicimm(<8 x i8>* %A) nounwind {
     24 ; CHECK-LABEL: v_bicimm:
     25 ; CHECK-NOT: mov
     26 ; CHECK-NOT: mvn
     27 ; CHECK: bic
     28 	%tmp1 = load <8 x i8>, <8 x i8>* %A
     29 	%tmp3 = and <8 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
     30 	ret <8 x i8> %tmp3
     31 }
     32 
     33 define <16 x i8> @v_bicimmQ(<16 x i8>* %A) nounwind {
     34 ; CHECK-LABEL: v_bicimmQ:
     35 ; CHECK-NOT: mov
     36 ; CHECK-NOT: mvn
     37 ; CHECK: bic
     38 	%tmp1 = load <16 x i8>, <16 x i8>* %A
     39 	%tmp3 = and <16 x i8> %tmp1, < i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0, i8 -1, i8 -1, i8 -1, i8 0 >
     40 	ret <16 x i8> %tmp3
     41 }
     42 
     43 define <2 x double> @foo(<2 x double> %bar) nounwind {
     44 ; CHECK: foo
     45 ; CHECK: fmov.2d	v1, #1.0000000
     46   %add = fadd <2 x double> %bar, <double 1.0, double 1.0>
     47   ret <2 x double> %add
     48 }
     49 
     50 define <4 x i32> @movi_4s_imm_t1() nounwind readnone ssp {
     51 entry:
     52 ; CHECK-LABEL: movi_4s_imm_t1:
     53 ; CHECK: movi.4s v0, #0x4b
     54   ret <4 x i32> <i32 75, i32 75, i32 75, i32 75>
     55 }
     56 
     57 define <4 x i32> @movi_4s_imm_t2() nounwind readnone ssp {
     58 entry:
     59 ; CHECK-LABEL: movi_4s_imm_t2:
     60 ; CHECK: movi.4s v0, #0x4b, lsl #8
     61   ret <4 x i32> <i32 19200, i32 19200, i32 19200, i32 19200>
     62 }
     63 
     64 define <4 x i32> @movi_4s_imm_t3() nounwind readnone ssp {
     65 entry:
     66 ; CHECK-LABEL: movi_4s_imm_t3:
     67 ; CHECK: movi.4s v0, #0x4b, lsl #16
     68   ret <4 x i32> <i32 4915200, i32 4915200, i32 4915200, i32 4915200>
     69 }
     70 
     71 define <4 x i32> @movi_4s_imm_t4() nounwind readnone ssp {
     72 entry:
     73 ; CHECK-LABEL: movi_4s_imm_t4:
     74 ; CHECK: movi.4s v0, #0x4b, lsl #24
     75   ret <4 x i32> <i32 1258291200, i32 1258291200, i32 1258291200, i32 1258291200>
     76 }
     77 
     78 define <8 x i16> @movi_8h_imm_t5() nounwind readnone ssp {
     79 entry:
     80 ; CHECK-LABEL: movi_8h_imm_t5:
     81 ; CHECK: movi.8h v0, #0x4b
     82   ret <8 x i16> <i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75, i16 75>
     83 }
     84 
     85 ; rdar://11989841
     86 define <8 x i16> @movi_8h_imm_t6() nounwind readnone ssp {
     87 entry:
     88 ; CHECK-LABEL: movi_8h_imm_t6:
     89 ; CHECK: movi.8h v0, #0x4b, lsl #8
     90   ret <8 x i16> <i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200, i16 19200>
     91 }
     92 
     93 define <4 x i32> @movi_4s_imm_t7() nounwind readnone ssp {
     94 entry:
     95 ; CHECK-LABEL: movi_4s_imm_t7:
     96 ; CHECK: movi.4s v0, #0x4b, msl #8
     97 ret <4 x i32> <i32 19455, i32 19455, i32 19455, i32 19455>
     98 }
     99 
    100 define <4 x i32> @movi_4s_imm_t8() nounwind readnone ssp {
    101 entry:
    102 ; CHECK-LABEL: movi_4s_imm_t8:
    103 ; CHECK: movi.4s v0, #0x4b, msl #16
    104 ret <4 x i32> <i32 4980735, i32 4980735, i32 4980735, i32 4980735>
    105 }
    106 
    107 define <16 x i8> @movi_16b_imm_t9() nounwind readnone ssp {
    108 entry:
    109 ; CHECK-LABEL: movi_16b_imm_t9:
    110 ; CHECK: movi.16b v0, #0x4b
    111 ret <16 x i8> <i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75,
    112                i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75, i8 75>
    113 }
    114 
    115 define <2 x i64> @movi_2d_imm_t10() nounwind readnone ssp {
    116 entry:
    117 ; CHECK-LABEL: movi_2d_imm_t10:
    118 ; CHECK: movi.2d v0, #0xff00ff00ff00ff
    119 ret <2 x i64> <i64 71777214294589695, i64 71777214294589695>
    120 }
    121 
    122 define <4 x i32> @movi_4s_imm_t11() nounwind readnone ssp {
    123 entry:
    124 ; CHECK-LABEL: movi_4s_imm_t11:
    125 ; CHECK: fmov.4s v0, #-0.32812500
    126 ret <4 x i32> <i32 3198681088, i32 3198681088, i32 3198681088, i32 3198681088>
    127 }
    128 
    129 define <2 x i64> @movi_2d_imm_t12() nounwind readnone ssp {
    130 entry:
    131 ; CHECK-LABEL: movi_2d_imm_t12:
    132 ; CHECK: fmov.2d v0, #-0.17187500
    133 ret <2 x i64> <i64 13818732506632945664, i64 13818732506632945664>
    134 }
    135