Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
      2 
      3 define <8 x i8> @movi8b() {
      4 ; CHECK-LABEL: movi8b:
      5 ; CHECK:  movi {{v[0-9]+}}.8b, #{{0x8|8}}
      6    ret <8 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
      7 }
      8 
      9 define <16 x i8> @movi16b() {
     10 ; CHECK-LABEL: movi16b:
     11 ; CHECK:  movi {{v[0-9]+}}.16b, #{{0x8|8}}
     12    ret <16 x i8> < i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8 >
     13 }
     14 
     15 define <2 x i32> @movi2s_lsl0() {
     16 ; CHECK-LABEL: movi2s_lsl0:
     17 ; CHECK: movi {{d[0-9]+}}, #0x0000ff000000ff
     18    ret <2 x i32> < i32 255, i32 255 >
     19 }
     20 
     21 define <2 x i32> @movi2s_lsl8() {
     22 ; CHECK-LABEL: movi2s_lsl8:
     23 ; CHECK: movi {{d[0-9]+}}, #0x00ff000000ff00
     24    ret <2 x i32> < i32 65280, i32 65280 >
     25 }
     26 
     27 define <2 x i32> @movi2s_lsl16() {
     28 ; CHECK-LABEL: movi2s_lsl16:
     29 ; CHECK: movi {{d[0-9]+}}, #0xff000000ff0000
     30    ret <2 x i32> < i32 16711680, i32 16711680 >
     31 
     32 }
     33 
     34 define <2 x i32> @movi2s_lsl24() {
     35 ; CHECK-LABEL: movi2s_lsl24:
     36 ; CHECK: movi {{d[0-9]+}}, #0xff000000ff000000
     37    ret <2 x i32> < i32 4278190080, i32 4278190080 >
     38 }
     39 
     40 define <4 x i32> @movi4s_lsl0() {
     41 ; CHECK-LABEL: movi4s_lsl0:
     42 ; CHECK: movi {{v[0-9]+}}.2d, #0x0000ff000000ff
     43    ret <4 x i32> < i32 255, i32 255, i32 255, i32 255 >
     44 }
     45 
     46 define <4 x i32> @movi4s_lsl8() {
     47 ; CHECK-LABEL: movi4s_lsl8:
     48 ; CHECK: movi {{v[0-9]+}}.2d, #0x00ff000000ff00
     49    ret <4 x i32> < i32 65280, i32 65280, i32 65280, i32 65280 >
     50 }
     51 
     52 define <4 x i32> @movi4s_lsl16() {
     53 ; CHECK-LABEL: movi4s_lsl16:
     54 ; CHECK:  movi {{v[0-9]+}}.2d, #0xff000000ff0000
     55    ret <4 x i32> < i32 16711680, i32 16711680, i32 16711680, i32 16711680 >
     56 
     57 }
     58 
     59 define <4 x i32> @movi4s_lsl24() {
     60 ; CHECK-LABEL: movi4s_lsl24:
     61 ; CHECK:  movi {{v[0-9]+}}.2d, #0xff000000ff000000
     62    ret <4 x i32> < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080 >
     63 }
     64 
     65 define <4 x i16> @movi4h_lsl0() {
     66 ; CHECK-LABEL: movi4h_lsl0:
     67 ; CHECK:  movi {{d[0-9]+}}, #0xff00ff00ff00ff
     68    ret <4 x i16> < i16 255, i16 255, i16 255, i16 255 >
     69 }
     70 
     71 define <4 x i16> @movi4h_lsl8() {
     72 ; CHECK-LABEL: movi4h_lsl8:
     73 ; CHECK: movi d0, #0xff00ff00ff00ff00
     74    ret <4 x i16> < i16 65280, i16 65280, i16 65280, i16 65280 >
     75 }
     76 
     77 define <8 x i16> @movi8h_lsl0() {
     78 ; CHECK-LABEL: movi8h_lsl0:
     79 ; CHECK: movi v0.2d, #0xff00ff00ff00ff
     80    ret <8 x i16> < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
     81 }
     82 
     83 define <8 x i16> @movi8h_lsl8() {
     84 ; CHECK-LABEL: movi8h_lsl8:
     85 ; CHECK: movi v0.2d, #0xff00ff00ff00ff00
     86    ret <8 x i16> < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
     87 }
     88 
     89 
     90 define <2 x i32> @mvni2s_lsl0() {
     91 ; CHECK-LABEL: mvni2s_lsl0:
     92 ; CHECK:  mvni {{v[0-9]+}}.2s, #{{0x10|16}}
     93    ret <2 x i32> < i32 4294967279, i32 4294967279 >
     94 }
     95 
     96 define <2 x i32> @mvni2s_lsl8() {
     97 ; CHECK-LABEL: mvni2s_lsl8:
     98 ; CHECK:  mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #8
     99    ret <2 x i32> < i32 4294963199, i32 4294963199 >
    100 }
    101 
    102 define <2 x i32> @mvni2s_lsl16() {
    103 ; CHECK-LABEL: mvni2s_lsl16:
    104 ; CHECK:  mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #16
    105    ret <2 x i32> < i32 4293918719, i32 4293918719 >
    106 }
    107 
    108 define <2 x i32> @mvni2s_lsl24() {
    109 ; CHECK-LABEL: mvni2s_lsl24:
    110 ; CHECK:  mvni {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #24
    111    ret <2 x i32> < i32 4026531839, i32 4026531839 >
    112 }
    113 
    114 define <4 x i32> @mvni4s_lsl0() {
    115 ; CHECK-LABEL: mvni4s_lsl0:
    116 ; CHECK:  mvni {{v[0-9]+}}.4s, #{{0x10|16}}
    117    ret <4 x i32> < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
    118 }
    119 
    120 define <4 x i32> @mvni4s_lsl8() {
    121 ; CHECK-LABEL: mvni4s_lsl8:
    122 ; CHECK:  mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #8
    123    ret <4 x i32> < i32 4294963199, i32 4294963199, i32 4294963199, i32 4294963199 >
    124 }
    125 
    126 define <4 x i32> @mvni4s_lsl16() {
    127 ; CHECK-LABEL: mvni4s_lsl16:
    128 ; CHECK:  mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #16
    129    ret <4 x i32> < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
    130 
    131 }
    132 
    133 define <4 x i32> @mvni4s_lsl24() {
    134 ; CHECK-LABEL: mvni4s_lsl24:
    135 ; CHECK:  mvni {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #24
    136    ret <4 x i32> < i32 4026531839, i32 4026531839, i32 4026531839, i32 4026531839 >
    137 }
    138 
    139 
    140 define <4 x i16> @mvni4h_lsl0() {
    141 ; CHECK-LABEL: mvni4h_lsl0:
    142 ; CHECK:  mvni {{v[0-9]+}}.4h, #{{0x10|16}}
    143    ret <4 x i16> < i16 65519, i16 65519, i16 65519, i16 65519 >
    144 }
    145 
    146 define <4 x i16> @mvni4h_lsl8() {
    147 ; CHECK-LABEL: mvni4h_lsl8:
    148 ; CHECK:  mvni {{v[0-9]+}}.4h, #{{0x10|16}}, lsl #8
    149    ret <4 x i16> < i16 61439, i16 61439, i16 61439, i16 61439 >
    150 }
    151 
    152 define <8 x i16> @mvni8h_lsl0() {
    153 ; CHECK-LABEL: mvni8h_lsl0:
    154 ; CHECK:  mvni {{v[0-9]+}}.8h, #{{0x10|16}}
    155    ret <8 x i16> < i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519, i16 65519 >
    156 }
    157 
    158 define <8 x i16> @mvni8h_lsl8() {
    159 ; CHECK-LABEL: mvni8h_lsl8:
    160 ; CHECK:  mvni {{v[0-9]+}}.8h, #{{0x10|16}}, lsl #8
    161    ret <8 x i16> < i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439, i16 61439 >
    162 }
    163 
    164 
    165 define <2 x i32> @movi2s_msl8(<2 x i32> %a) {
    166 ; CHECK-LABEL: movi2s_msl8:
    167 ; CHECK: movi {{d[0-9]+}}, #0x00ffff0000ffff
    168 	ret <2 x i32> < i32 65535, i32 65535 >
    169 }
    170 
    171 define <2 x i32> @movi2s_msl16() {
    172 ; CHECK-LABEL: movi2s_msl16:
    173 ; CHECK:  movi d0, #0xffffff00ffffff
    174    ret <2 x i32> < i32 16777215, i32 16777215 >
    175 }
    176 
    177 
    178 define <4 x i32> @movi4s_msl8() {
    179 ; CHECK-LABEL: movi4s_msl8:
    180 ; CHECK:  movi v0.2d, #0x00ffff0000ffff
    181    ret <4 x i32> < i32 65535, i32 65535, i32 65535, i32 65535 >
    182 }
    183 
    184 define <4 x i32> @movi4s_msl16() {
    185 ; CHECK-LABEL: movi4s_msl16:
    186 ; CHECK:  movi v0.2d, #0xffffff00ffffff
    187    ret <4 x i32> < i32 16777215, i32 16777215, i32 16777215, i32 16777215 >
    188 }
    189 
    190 define <2 x i32> @mvni2s_msl8() {
    191 ; CHECK-LABEL: mvni2s_msl8:
    192 ; CHECK:  mvni {{v[0-9]+}}.2s, #{{0x10|16}}, msl #8
    193    ret <2 x i32> < i32 18446744073709547264, i32 18446744073709547264>
    194 }
    195 
    196 define <2 x i32> @mvni2s_msl16() {
    197 ; CHECK-LABEL: mvni2s_msl16:
    198 ; CHECK:  mvni {{v[0-9]+}}.2s, #{{0x10|16}}, msl #16
    199    ret <2 x i32> < i32 18446744073708437504, i32 18446744073708437504>
    200 }
    201 
    202 define <4 x i32> @mvni4s_msl8() {
    203 ; CHECK-LABEL: mvni4s_msl8:
    204 ; CHECK:  mvni {{v[0-9]+}}.4s, #{{0x10|16}}, msl #8
    205    ret <4 x i32> < i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264, i32 18446744073709547264>
    206 }
    207 
    208 define <4 x i32> @mvni4s_msl16() {
    209 ; CHECK-LABEL: mvni4s_msl16:
    210 ; CHECK:  mvni {{v[0-9]+}}.4s, #{{0x10|16}}, msl #16
    211    ret <4 x i32> < i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504, i32 18446744073708437504>
    212 }
    213 
    214 define <2 x i64> @movi2d() {
    215 ; CHECK-LABEL: movi2d:
    216 ; CHECK: movi {{v[0-9]+}}.2d, #0xff0000ff0000ffff
    217 	ret <2 x i64> < i64 18374687574888349695, i64 18374687574888349695 >
    218 }
    219 
    220 define <1 x i64> @movid() {
    221 ; CHECK-LABEL: movid:
    222 ; CHECK: movi {{d[0-9]+}}, #0xff0000ff0000ffff
    223 	ret  <1 x i64> < i64 18374687574888349695 >
    224 }
    225 
    226 define <2 x float> @fmov2s() {
    227 ; CHECK-LABEL: fmov2s:
    228 ; CHECK:  fmov {{v[0-9]+}}.2s, #{{-12.00000000|-1.200000e\+01}}
    229 	ret <2 x float> < float -1.2e1, float -1.2e1>
    230 }
    231 
    232 define <4 x float> @fmov4s() {
    233 ; CHECK-LABEL: fmov4s:
    234 ; CHECK:  fmov {{v[0-9]+}}.4s, #{{-12.00000000|-1.200000e\+01}}
    235 	ret <4 x float> < float -1.2e1, float -1.2e1, float -1.2e1, float -1.2e1>
    236 }
    237 
    238 define <2 x double> @fmov2d() {
    239 ; CHECK-LABEL: fmov2d:
    240 ; CHECK:  fmov {{v[0-9]+}}.2d, #{{-12.00000000|-1.200000e\+01}}
    241 	ret <2 x double> < double -1.2e1, double -1.2e1>
    242 }
    243 
    244 define <2 x i32> @movi1d_1() {
    245 ; CHECK-LABEL: movi1d_1:
    246 ; CHECK: movi    d0, #0x{{0*}}ffffffff0000
    247   ret <2 x i32> < i32  -65536, i32 65535>
    248 }
    249 
    250 
    251 declare <2 x i32> @test_movi1d(<2 x i32>, <2 x i32>)
    252 define <2 x i32> @movi1d() {
    253 ; CHECK-LABEL: movi1d:
    254 ; CHECK: adrp {{x[0-9]+}}, .{{[A-Z0-9_]+}}
    255 ; CHECK: ldr {{d[0-9]+}}, [{{x[0-9]+}}, {{#?}}:lo12:.{{[A-Z0-9_]+}}]
    256 ; CHECK-NEXT: movi     d1, #0x{{0*}}ffffffff0000
    257   %1 = tail call <2 x i32> @test_movi1d(<2 x i32> <i32 -2147483648, i32 2147450880>, <2 x i32> <i32 -65536, i32 65535>)
    258   ret <2 x i32> %1
    259 }
    260 
    261