Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -march=arm64 -aarch64-neon-syntax=apple | FileCheck %s
      2 
      3 define <2 x i32> @fcvtas_2s(<2 x float> %A) nounwind {
      4 ;CHECK-LABEL: fcvtas_2s:
      5 ;CHECK-NOT: ld1
      6 ;CHECK: fcvtas.2s v0, v0
      7 ;CHECK-NEXT: ret
      8 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float> %A)
      9 	ret <2 x i32> %tmp3
     10 }
     11 
     12 define <4 x i32> @fcvtas_4s(<4 x float> %A) nounwind {
     13 ;CHECK-LABEL: fcvtas_4s:
     14 ;CHECK-NOT: ld1
     15 ;CHECK: fcvtas.4s v0, v0
     16 ;CHECK-NEXT: ret
     17 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float> %A)
     18 	ret <4 x i32> %tmp3
     19 }
     20 
     21 define <2 x i64> @fcvtas_2d(<2 x double> %A) nounwind {
     22 ;CHECK-LABEL: fcvtas_2d:
     23 ;CHECK-NOT: ld1
     24 ;CHECK: fcvtas.2d v0, v0
     25 ;CHECK-NEXT: ret
     26 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double> %A)
     27 	ret <2 x i64> %tmp3
     28 }
     29 
     30 declare <2 x i32> @llvm.aarch64.neon.fcvtas.v2i32.v2f32(<2 x float>) nounwind readnone
     31 declare <4 x i32> @llvm.aarch64.neon.fcvtas.v4i32.v4f32(<4 x float>) nounwind readnone
     32 declare <2 x i64> @llvm.aarch64.neon.fcvtas.v2i64.v2f64(<2 x double>) nounwind readnone
     33 
     34 define <2 x i32> @fcvtau_2s(<2 x float> %A) nounwind {
     35 ;CHECK-LABEL: fcvtau_2s:
     36 ;CHECK-NOT: ld1
     37 ;CHECK: fcvtau.2s v0, v0
     38 ;CHECK-NEXT: ret
     39 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float> %A)
     40 	ret <2 x i32> %tmp3
     41 }
     42 
     43 define <4 x i32> @fcvtau_4s(<4 x float> %A) nounwind {
     44 ;CHECK-LABEL: fcvtau_4s:
     45 ;CHECK-NOT: ld1
     46 ;CHECK: fcvtau.4s v0, v0
     47 ;CHECK-NEXT: ret
     48 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float> %A)
     49 	ret <4 x i32> %tmp3
     50 }
     51 
     52 define <2 x i64> @fcvtau_2d(<2 x double> %A) nounwind {
     53 ;CHECK-LABEL: fcvtau_2d:
     54 ;CHECK-NOT: ld1
     55 ;CHECK: fcvtau.2d v0, v0
     56 ;CHECK-NEXT: ret
     57 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double> %A)
     58 	ret <2 x i64> %tmp3
     59 }
     60 
     61 declare <2 x i32> @llvm.aarch64.neon.fcvtau.v2i32.v2f32(<2 x float>) nounwind readnone
     62 declare <4 x i32> @llvm.aarch64.neon.fcvtau.v4i32.v4f32(<4 x float>) nounwind readnone
     63 declare <2 x i64> @llvm.aarch64.neon.fcvtau.v2i64.v2f64(<2 x double>) nounwind readnone
     64 
     65 define <2 x i32> @fcvtms_2s(<2 x float> %A) nounwind {
     66 ;CHECK-LABEL: fcvtms_2s:
     67 ;CHECK-NOT: ld1
     68 ;CHECK: fcvtms.2s v0, v0
     69 ;CHECK-NEXT: ret
     70 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float> %A)
     71 	ret <2 x i32> %tmp3
     72 }
     73 
     74 define <4 x i32> @fcvtms_4s(<4 x float> %A) nounwind {
     75 ;CHECK-LABEL: fcvtms_4s:
     76 ;CHECK-NOT: ld1
     77 ;CHECK: fcvtms.4s v0, v0
     78 ;CHECK-NEXT: ret
     79 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float> %A)
     80 	ret <4 x i32> %tmp3
     81 }
     82 
     83 define <2 x i64> @fcvtms_2d(<2 x double> %A) nounwind {
     84 ;CHECK-LABEL: fcvtms_2d:
     85 ;CHECK-NOT: ld1
     86 ;CHECK: fcvtms.2d v0, v0
     87 ;CHECK-NEXT: ret
     88 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double> %A)
     89 	ret <2 x i64> %tmp3
     90 }
     91 
     92 declare <2 x i32> @llvm.aarch64.neon.fcvtms.v2i32.v2f32(<2 x float>) nounwind readnone
     93 declare <4 x i32> @llvm.aarch64.neon.fcvtms.v4i32.v4f32(<4 x float>) nounwind readnone
     94 declare <2 x i64> @llvm.aarch64.neon.fcvtms.v2i64.v2f64(<2 x double>) nounwind readnone
     95 
     96 define <2 x i32> @fcvtmu_2s(<2 x float> %A) nounwind {
     97 ;CHECK-LABEL: fcvtmu_2s:
     98 ;CHECK-NOT: ld1
     99 ;CHECK: fcvtmu.2s v0, v0
    100 ;CHECK-NEXT: ret
    101 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float> %A)
    102 	ret <2 x i32> %tmp3
    103 }
    104 
    105 define <4 x i32> @fcvtmu_4s(<4 x float> %A) nounwind {
    106 ;CHECK-LABEL: fcvtmu_4s:
    107 ;CHECK-NOT: ld1
    108 ;CHECK: fcvtmu.4s v0, v0
    109 ;CHECK-NEXT: ret
    110 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float> %A)
    111 	ret <4 x i32> %tmp3
    112 }
    113 
    114 define <2 x i64> @fcvtmu_2d(<2 x double> %A) nounwind {
    115 ;CHECK-LABEL: fcvtmu_2d:
    116 ;CHECK-NOT: ld1
    117 ;CHECK: fcvtmu.2d v0, v0
    118 ;CHECK-NEXT: ret
    119 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double> %A)
    120 	ret <2 x i64> %tmp3
    121 }
    122 
    123 declare <2 x i32> @llvm.aarch64.neon.fcvtmu.v2i32.v2f32(<2 x float>) nounwind readnone
    124 declare <4 x i32> @llvm.aarch64.neon.fcvtmu.v4i32.v4f32(<4 x float>) nounwind readnone
    125 declare <2 x i64> @llvm.aarch64.neon.fcvtmu.v2i64.v2f64(<2 x double>) nounwind readnone
    126 
    127 define <2 x i32> @fcvtps_2s(<2 x float> %A) nounwind {
    128 ;CHECK-LABEL: fcvtps_2s:
    129 ;CHECK-NOT: ld1
    130 ;CHECK: fcvtps.2s v0, v0
    131 ;CHECK-NEXT: ret
    132 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float> %A)
    133 	ret <2 x i32> %tmp3
    134 }
    135 
    136 define <4 x i32> @fcvtps_4s(<4 x float> %A) nounwind {
    137 ;CHECK-LABEL: fcvtps_4s:
    138 ;CHECK-NOT: ld1
    139 ;CHECK: fcvtps.4s v0, v0
    140 ;CHECK-NEXT: ret
    141 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float> %A)
    142 	ret <4 x i32> %tmp3
    143 }
    144 
    145 define <2 x i64> @fcvtps_2d(<2 x double> %A) nounwind {
    146 ;CHECK-LABEL: fcvtps_2d:
    147 ;CHECK-NOT: ld1
    148 ;CHECK: fcvtps.2d v0, v0
    149 ;CHECK-NEXT: ret
    150 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double> %A)
    151 	ret <2 x i64> %tmp3
    152 }
    153 
    154 declare <2 x i32> @llvm.aarch64.neon.fcvtps.v2i32.v2f32(<2 x float>) nounwind readnone
    155 declare <4 x i32> @llvm.aarch64.neon.fcvtps.v4i32.v4f32(<4 x float>) nounwind readnone
    156 declare <2 x i64> @llvm.aarch64.neon.fcvtps.v2i64.v2f64(<2 x double>) nounwind readnone
    157 
    158 define <2 x i32> @fcvtpu_2s(<2 x float> %A) nounwind {
    159 ;CHECK-LABEL: fcvtpu_2s:
    160 ;CHECK-NOT: ld1
    161 ;CHECK: fcvtpu.2s v0, v0
    162 ;CHECK-NEXT: ret
    163 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float> %A)
    164 	ret <2 x i32> %tmp3
    165 }
    166 
    167 define <4 x i32> @fcvtpu_4s(<4 x float> %A) nounwind {
    168 ;CHECK-LABEL: fcvtpu_4s:
    169 ;CHECK-NOT: ld1
    170 ;CHECK: fcvtpu.4s v0, v0
    171 ;CHECK-NEXT: ret
    172 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float> %A)
    173 	ret <4 x i32> %tmp3
    174 }
    175 
    176 define <2 x i64> @fcvtpu_2d(<2 x double> %A) nounwind {
    177 ;CHECK-LABEL: fcvtpu_2d:
    178 ;CHECK-NOT: ld1
    179 ;CHECK: fcvtpu.2d v0, v0
    180 ;CHECK-NEXT: ret
    181 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double> %A)
    182 	ret <2 x i64> %tmp3
    183 }
    184 
    185 declare <2 x i32> @llvm.aarch64.neon.fcvtpu.v2i32.v2f32(<2 x float>) nounwind readnone
    186 declare <4 x i32> @llvm.aarch64.neon.fcvtpu.v4i32.v4f32(<4 x float>) nounwind readnone
    187 declare <2 x i64> @llvm.aarch64.neon.fcvtpu.v2i64.v2f64(<2 x double>) nounwind readnone
    188 
    189 define <2 x i32> @fcvtns_2s(<2 x float> %A) nounwind {
    190 ;CHECK-LABEL: fcvtns_2s:
    191 ;CHECK-NOT: ld1
    192 ;CHECK: fcvtns.2s v0, v0
    193 ;CHECK-NEXT: ret
    194 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float> %A)
    195 	ret <2 x i32> %tmp3
    196 }
    197 
    198 define <4 x i32> @fcvtns_4s(<4 x float> %A) nounwind {
    199 ;CHECK-LABEL: fcvtns_4s:
    200 ;CHECK-NOT: ld1
    201 ;CHECK: fcvtns.4s v0, v0
    202 ;CHECK-NEXT: ret
    203 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float> %A)
    204 	ret <4 x i32> %tmp3
    205 }
    206 
    207 define <2 x i64> @fcvtns_2d(<2 x double> %A) nounwind {
    208 ;CHECK-LABEL: fcvtns_2d:
    209 ;CHECK-NOT: ld1
    210 ;CHECK: fcvtns.2d v0, v0
    211 ;CHECK-NEXT: ret
    212 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double> %A)
    213 	ret <2 x i64> %tmp3
    214 }
    215 
    216 declare <2 x i32> @llvm.aarch64.neon.fcvtns.v2i32.v2f32(<2 x float>) nounwind readnone
    217 declare <4 x i32> @llvm.aarch64.neon.fcvtns.v4i32.v4f32(<4 x float>) nounwind readnone
    218 declare <2 x i64> @llvm.aarch64.neon.fcvtns.v2i64.v2f64(<2 x double>) nounwind readnone
    219 
    220 define <2 x i32> @fcvtnu_2s(<2 x float> %A) nounwind {
    221 ;CHECK-LABEL: fcvtnu_2s:
    222 ;CHECK-NOT: ld1
    223 ;CHECK: fcvtnu.2s v0, v0
    224 ;CHECK-NEXT: ret
    225 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float> %A)
    226 	ret <2 x i32> %tmp3
    227 }
    228 
    229 define <4 x i32> @fcvtnu_4s(<4 x float> %A) nounwind {
    230 ;CHECK-LABEL: fcvtnu_4s:
    231 ;CHECK-NOT: ld1
    232 ;CHECK: fcvtnu.4s v0, v0
    233 ;CHECK-NEXT: ret
    234 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float> %A)
    235 	ret <4 x i32> %tmp3
    236 }
    237 
    238 define <2 x i64> @fcvtnu_2d(<2 x double> %A) nounwind {
    239 ;CHECK-LABEL: fcvtnu_2d:
    240 ;CHECK-NOT: ld1
    241 ;CHECK: fcvtnu.2d v0, v0
    242 ;CHECK-NEXT: ret
    243 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double> %A)
    244 	ret <2 x i64> %tmp3
    245 }
    246 
    247 declare <2 x i32> @llvm.aarch64.neon.fcvtnu.v2i32.v2f32(<2 x float>) nounwind readnone
    248 declare <4 x i32> @llvm.aarch64.neon.fcvtnu.v4i32.v4f32(<4 x float>) nounwind readnone
    249 declare <2 x i64> @llvm.aarch64.neon.fcvtnu.v2i64.v2f64(<2 x double>) nounwind readnone
    250 
    251 define <2 x i32> @fcvtzs_2s(<2 x float> %A) nounwind {
    252 ;CHECK-LABEL: fcvtzs_2s:
    253 ;CHECK-NOT: ld1
    254 ;CHECK: fcvtzs.2s v0, v0
    255 ;CHECK-NEXT: ret
    256 	%tmp3 = fptosi <2 x float> %A to <2 x i32>
    257 	ret <2 x i32> %tmp3
    258 }
    259 
    260 define <4 x i32> @fcvtzs_4s(<4 x float> %A) nounwind {
    261 ;CHECK-LABEL: fcvtzs_4s:
    262 ;CHECK-NOT: ld1
    263 ;CHECK: fcvtzs.4s v0, v0
    264 ;CHECK-NEXT: ret
    265 	%tmp3 = fptosi <4 x float> %A to <4 x i32>
    266 	ret <4 x i32> %tmp3
    267 }
    268 
    269 define <2 x i64> @fcvtzs_2d(<2 x double> %A) nounwind {
    270 ;CHECK-LABEL: fcvtzs_2d:
    271 ;CHECK-NOT: ld1
    272 ;CHECK: fcvtzs.2d v0, v0
    273 ;CHECK-NEXT: ret
    274 	%tmp3 = fptosi <2 x double> %A to <2 x i64>
    275 	ret <2 x i64> %tmp3
    276 }
    277 
    278 
    279 define <2 x i32> @fcvtzu_2s(<2 x float> %A) nounwind {
    280 ;CHECK-LABEL: fcvtzu_2s:
    281 ;CHECK-NOT: ld1
    282 ;CHECK: fcvtzu.2s v0, v0
    283 ;CHECK-NEXT: ret
    284 	%tmp3 = fptoui <2 x float> %A to <2 x i32>
    285 	ret <2 x i32> %tmp3
    286 }
    287 
    288 define <4 x i32> @fcvtzu_4s(<4 x float> %A) nounwind {
    289 ;CHECK-LABEL: fcvtzu_4s:
    290 ;CHECK-NOT: ld1
    291 ;CHECK: fcvtzu.4s v0, v0
    292 ;CHECK-NEXT: ret
    293 	%tmp3 = fptoui <4 x float> %A to <4 x i32>
    294 	ret <4 x i32> %tmp3
    295 }
    296 
    297 define <2 x i64> @fcvtzu_2d(<2 x double> %A) nounwind {
    298 ;CHECK-LABEL: fcvtzu_2d:
    299 ;CHECK-NOT: ld1
    300 ;CHECK: fcvtzu.2d v0, v0
    301 ;CHECK-NEXT: ret
    302 	%tmp3 = fptoui <2 x double> %A to <2 x i64>
    303 	ret <2 x i64> %tmp3
    304 }
    305 
    306 define <2 x float> @frinta_2s(<2 x float> %A) nounwind {
    307 ;CHECK-LABEL: frinta_2s:
    308 ;CHECK-NOT: ld1
    309 ;CHECK: frinta.2s v0, v0
    310 ;CHECK-NEXT: ret
    311 	%tmp3 = call <2 x float> @llvm.round.v2f32(<2 x float> %A)
    312 	ret <2 x float> %tmp3
    313 }
    314 
    315 define <4 x float> @frinta_4s(<4 x float> %A) nounwind {
    316 ;CHECK-LABEL: frinta_4s:
    317 ;CHECK-NOT: ld1
    318 ;CHECK: frinta.4s v0, v0
    319 ;CHECK-NEXT: ret
    320 	%tmp3 = call <4 x float> @llvm.round.v4f32(<4 x float> %A)
    321 	ret <4 x float> %tmp3
    322 }
    323 
    324 define <2 x double> @frinta_2d(<2 x double> %A) nounwind {
    325 ;CHECK-LABEL: frinta_2d:
    326 ;CHECK-NOT: ld1
    327 ;CHECK: frinta.2d v0, v0
    328 ;CHECK-NEXT: ret
    329 	%tmp3 = call <2 x double> @llvm.round.v2f64(<2 x double> %A)
    330 	ret <2 x double> %tmp3
    331 }
    332 
    333 declare <2 x float> @llvm.round.v2f32(<2 x float>) nounwind readnone
    334 declare <4 x float> @llvm.round.v4f32(<4 x float>) nounwind readnone
    335 declare <2 x double> @llvm.round.v2f64(<2 x double>) nounwind readnone
    336 
    337 define <2 x float> @frinti_2s(<2 x float> %A) nounwind {
    338 ;CHECK-LABEL: frinti_2s:
    339 ;CHECK-NOT: ld1
    340 ;CHECK: frinti.2s v0, v0
    341 ;CHECK-NEXT: ret
    342 	%tmp3 = call <2 x float> @llvm.nearbyint.v2f32(<2 x float> %A)
    343 	ret <2 x float> %tmp3
    344 }
    345 
    346 define <4 x float> @frinti_4s(<4 x float> %A) nounwind {
    347 ;CHECK-LABEL: frinti_4s:
    348 ;CHECK-NOT: ld1
    349 ;CHECK: frinti.4s v0, v0
    350 ;CHECK-NEXT: ret
    351 	%tmp3 = call <4 x float> @llvm.nearbyint.v4f32(<4 x float> %A)
    352 	ret <4 x float> %tmp3
    353 }
    354 
    355 define <2 x double> @frinti_2d(<2 x double> %A) nounwind {
    356 ;CHECK-LABEL: frinti_2d:
    357 ;CHECK-NOT: ld1
    358 ;CHECK: frinti.2d v0, v0
    359 ;CHECK-NEXT: ret
    360 	%tmp3 = call <2 x double> @llvm.nearbyint.v2f64(<2 x double> %A)
    361 	ret <2 x double> %tmp3
    362 }
    363 
    364 declare <2 x float> @llvm.nearbyint.v2f32(<2 x float>) nounwind readnone
    365 declare <4 x float> @llvm.nearbyint.v4f32(<4 x float>) nounwind readnone
    366 declare <2 x double> @llvm.nearbyint.v2f64(<2 x double>) nounwind readnone
    367 
    368 define <2 x float> @frintm_2s(<2 x float> %A) nounwind {
    369 ;CHECK-LABEL: frintm_2s:
    370 ;CHECK-NOT: ld1
    371 ;CHECK: frintm.2s v0, v0
    372 ;CHECK-NEXT: ret
    373 	%tmp3 = call <2 x float> @llvm.floor.v2f32(<2 x float> %A)
    374 	ret <2 x float> %tmp3
    375 }
    376 
    377 define <4 x float> @frintm_4s(<4 x float> %A) nounwind {
    378 ;CHECK-LABEL: frintm_4s:
    379 ;CHECK-NOT: ld1
    380 ;CHECK: frintm.4s v0, v0
    381 ;CHECK-NEXT: ret
    382 	%tmp3 = call <4 x float> @llvm.floor.v4f32(<4 x float> %A)
    383 	ret <4 x float> %tmp3
    384 }
    385 
    386 define <2 x double> @frintm_2d(<2 x double> %A) nounwind {
    387 ;CHECK-LABEL: frintm_2d:
    388 ;CHECK-NOT: ld1
    389 ;CHECK: frintm.2d v0, v0
    390 ;CHECK-NEXT: ret
    391 	%tmp3 = call <2 x double> @llvm.floor.v2f64(<2 x double> %A)
    392 	ret <2 x double> %tmp3
    393 }
    394 
    395 declare <2 x float> @llvm.floor.v2f32(<2 x float>) nounwind readnone
    396 declare <4 x float> @llvm.floor.v4f32(<4 x float>) nounwind readnone
    397 declare <2 x double> @llvm.floor.v2f64(<2 x double>) nounwind readnone
    398 
    399 define <2 x float> @frintn_2s(<2 x float> %A) nounwind {
    400 ;CHECK-LABEL: frintn_2s:
    401 ;CHECK-NOT: ld1
    402 ;CHECK: frintn.2s v0, v0
    403 ;CHECK-NEXT: ret
    404 	%tmp3 = call <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float> %A)
    405 	ret <2 x float> %tmp3
    406 }
    407 
    408 define <4 x float> @frintn_4s(<4 x float> %A) nounwind {
    409 ;CHECK-LABEL: frintn_4s:
    410 ;CHECK-NOT: ld1
    411 ;CHECK: frintn.4s v0, v0
    412 ;CHECK-NEXT: ret
    413 	%tmp3 = call <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float> %A)
    414 	ret <4 x float> %tmp3
    415 }
    416 
    417 define <2 x double> @frintn_2d(<2 x double> %A) nounwind {
    418 ;CHECK-LABEL: frintn_2d:
    419 ;CHECK-NOT: ld1
    420 ;CHECK: frintn.2d v0, v0
    421 ;CHECK-NEXT: ret
    422 	%tmp3 = call <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double> %A)
    423 	ret <2 x double> %tmp3
    424 }
    425 
    426 declare <2 x float> @llvm.aarch64.neon.frintn.v2f32(<2 x float>) nounwind readnone
    427 declare <4 x float> @llvm.aarch64.neon.frintn.v4f32(<4 x float>) nounwind readnone
    428 declare <2 x double> @llvm.aarch64.neon.frintn.v2f64(<2 x double>) nounwind readnone
    429 
    430 define <2 x float> @frintp_2s(<2 x float> %A) nounwind {
    431 ;CHECK-LABEL: frintp_2s:
    432 ;CHECK-NOT: ld1
    433 ;CHECK: frintp.2s v0, v0
    434 ;CHECK-NEXT: ret
    435 	%tmp3 = call <2 x float> @llvm.ceil.v2f32(<2 x float> %A)
    436 	ret <2 x float> %tmp3
    437 }
    438 
    439 define <4 x float> @frintp_4s(<4 x float> %A) nounwind {
    440 ;CHECK-LABEL: frintp_4s:
    441 ;CHECK-NOT: ld1
    442 ;CHECK: frintp.4s v0, v0
    443 ;CHECK-NEXT: ret
    444 	%tmp3 = call <4 x float> @llvm.ceil.v4f32(<4 x float> %A)
    445 	ret <4 x float> %tmp3
    446 }
    447 
    448 define <2 x double> @frintp_2d(<2 x double> %A) nounwind {
    449 ;CHECK-LABEL: frintp_2d:
    450 ;CHECK-NOT: ld1
    451 ;CHECK: frintp.2d v0, v0
    452 ;CHECK-NEXT: ret
    453 	%tmp3 = call <2 x double> @llvm.ceil.v2f64(<2 x double> %A)
    454 	ret <2 x double> %tmp3
    455 }
    456 
    457 declare <2 x float> @llvm.ceil.v2f32(<2 x float>) nounwind readnone
    458 declare <4 x float> @llvm.ceil.v4f32(<4 x float>) nounwind readnone
    459 declare <2 x double> @llvm.ceil.v2f64(<2 x double>) nounwind readnone
    460 
    461 define <2 x float> @frintx_2s(<2 x float> %A) nounwind {
    462 ;CHECK-LABEL: frintx_2s:
    463 ;CHECK-NOT: ld1
    464 ;CHECK: frintx.2s v0, v0
    465 ;CHECK-NEXT: ret
    466 	%tmp3 = call <2 x float> @llvm.rint.v2f32(<2 x float> %A)
    467 	ret <2 x float> %tmp3
    468 }
    469 
    470 define <4 x float> @frintx_4s(<4 x float> %A) nounwind {
    471 ;CHECK-LABEL: frintx_4s:
    472 ;CHECK-NOT: ld1
    473 ;CHECK: frintx.4s v0, v0
    474 ;CHECK-NEXT: ret
    475 	%tmp3 = call <4 x float> @llvm.rint.v4f32(<4 x float> %A)
    476 	ret <4 x float> %tmp3
    477 }
    478 
    479 define <2 x double> @frintx_2d(<2 x double> %A) nounwind {
    480 ;CHECK-LABEL: frintx_2d:
    481 ;CHECK-NOT: ld1
    482 ;CHECK: frintx.2d v0, v0
    483 ;CHECK-NEXT: ret
    484 	%tmp3 = call <2 x double> @llvm.rint.v2f64(<2 x double> %A)
    485 	ret <2 x double> %tmp3
    486 }
    487 
    488 declare <2 x float> @llvm.rint.v2f32(<2 x float>) nounwind readnone
    489 declare <4 x float> @llvm.rint.v4f32(<4 x float>) nounwind readnone
    490 declare <2 x double> @llvm.rint.v2f64(<2 x double>) nounwind readnone
    491 
    492 define <2 x float> @frintz_2s(<2 x float> %A) nounwind {
    493 ;CHECK-LABEL: frintz_2s:
    494 ;CHECK-NOT: ld1
    495 ;CHECK: frintz.2s v0, v0
    496 ;CHECK-NEXT: ret
    497 	%tmp3 = call <2 x float> @llvm.trunc.v2f32(<2 x float> %A)
    498 	ret <2 x float> %tmp3
    499 }
    500 
    501 define <4 x float> @frintz_4s(<4 x float> %A) nounwind {
    502 ;CHECK-LABEL: frintz_4s:
    503 ;CHECK-NOT: ld1
    504 ;CHECK: frintz.4s v0, v0
    505 ;CHECK-NEXT: ret
    506 	%tmp3 = call <4 x float> @llvm.trunc.v4f32(<4 x float> %A)
    507 	ret <4 x float> %tmp3
    508 }
    509 
    510 define <2 x double> @frintz_2d(<2 x double> %A) nounwind {
    511 ;CHECK-LABEL: frintz_2d:
    512 ;CHECK-NOT: ld1
    513 ;CHECK: frintz.2d v0, v0
    514 ;CHECK-NEXT: ret
    515 	%tmp3 = call <2 x double> @llvm.trunc.v2f64(<2 x double> %A)
    516 	ret <2 x double> %tmp3
    517 }
    518 
    519 declare <2 x float> @llvm.trunc.v2f32(<2 x float>) nounwind readnone
    520 declare <4 x float> @llvm.trunc.v4f32(<4 x float>) nounwind readnone
    521 declare <2 x double> @llvm.trunc.v2f64(<2 x double>) nounwind readnone
    522 
    523 define <2 x float> @fcvtxn_2s(<2 x double> %A) nounwind {
    524 ;CHECK-LABEL: fcvtxn_2s:
    525 ;CHECK-NOT: ld1
    526 ;CHECK: fcvtxn v0.2s, v0.2d
    527 ;CHECK-NEXT: ret
    528 	%tmp3 = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %A)
    529 	ret <2 x float> %tmp3
    530 }
    531 
    532 define <4 x float> @fcvtxn_4s(<2 x float> %ret, <2 x double> %A) nounwind {
    533 ;CHECK-LABEL: fcvtxn_4s:
    534 ;CHECK-NOT: ld1
    535 ;CHECK: fcvtxn2 v0.4s, v1.2d
    536 ;CHECK-NEXT: ret
    537 	%tmp3 = call <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double> %A)
    538         %res = shufflevector <2 x float> %ret, <2 x float> %tmp3, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
    539 	ret <4 x float> %res
    540 }
    541 
    542 declare <2 x float> @llvm.aarch64.neon.fcvtxn.v2f32.v2f64(<2 x double>) nounwind readnone
    543 
    544 define <2 x i32> @fcvtzsc_2s(<2 x float> %A) nounwind {
    545 ;CHECK-LABEL: fcvtzsc_2s:
    546 ;CHECK-NOT: ld1
    547 ;CHECK: fcvtzs.2s v0, v0, #1
    548 ;CHECK-NEXT: ret
    549 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float> %A, i32 1)
    550 	ret <2 x i32> %tmp3
    551 }
    552 
    553 define <4 x i32> @fcvtzsc_4s(<4 x float> %A) nounwind {
    554 ;CHECK-LABEL: fcvtzsc_4s:
    555 ;CHECK-NOT: ld1
    556 ;CHECK: fcvtzs.4s v0, v0, #1
    557 ;CHECK-NEXT: ret
    558 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float> %A, i32 1)
    559 	ret <4 x i32> %tmp3
    560 }
    561 
    562 define <2 x i64> @fcvtzsc_2d(<2 x double> %A) nounwind {
    563 ;CHECK-LABEL: fcvtzsc_2d:
    564 ;CHECK-NOT: ld1
    565 ;CHECK: fcvtzs.2d v0, v0, #1
    566 ;CHECK-NEXT: ret
    567 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double> %A, i32 1)
    568 	ret <2 x i64> %tmp3
    569 }
    570 
    571 declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float>, i32) nounwind readnone
    572 declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float>, i32) nounwind readnone
    573 declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double>, i32) nounwind readnone
    574 
    575 define <2 x i32> @fcvtzuc_2s(<2 x float> %A) nounwind {
    576 ;CHECK-LABEL: fcvtzuc_2s:
    577 ;CHECK-NOT: ld1
    578 ;CHECK: fcvtzu.2s v0, v0, #1
    579 ;CHECK-NEXT: ret
    580 	%tmp3 = call <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float> %A, i32 1)
    581 	ret <2 x i32> %tmp3
    582 }
    583 
    584 define <4 x i32> @fcvtzuc_4s(<4 x float> %A) nounwind {
    585 ;CHECK-LABEL: fcvtzuc_4s:
    586 ;CHECK-NOT: ld1
    587 ;CHECK: fcvtzu.4s v0, v0, #1
    588 ;CHECK-NEXT: ret
    589 	%tmp3 = call <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float> %A, i32 1)
    590 	ret <4 x i32> %tmp3
    591 }
    592 
    593 define <2 x i64> @fcvtzuc_2d(<2 x double> %A) nounwind {
    594 ;CHECK-LABEL: fcvtzuc_2d:
    595 ;CHECK-NOT: ld1
    596 ;CHECK: fcvtzu.2d v0, v0, #1
    597 ;CHECK-NEXT: ret
    598 	%tmp3 = call <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double> %A, i32 1)
    599 	ret <2 x i64> %tmp3
    600 }
    601 
    602 declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float>, i32) nounwind readnone
    603 declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float>, i32) nounwind readnone
    604 declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double>, i32) nounwind readnone
    605 
    606 define <2 x float> @scvtf_2sc(<2 x i32> %A) nounwind {
    607 ;CHECK-LABEL: scvtf_2sc:
    608 ;CHECK-NOT: ld1
    609 ;CHECK: scvtf.2s v0, v0, #1
    610 ;CHECK-NEXT: ret
    611 	%tmp3 = call <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32> %A, i32 1)
    612 	ret <2 x float> %tmp3
    613 }
    614 
    615 define <4 x float> @scvtf_4sc(<4 x i32> %A) nounwind {
    616 ;CHECK-LABEL: scvtf_4sc:
    617 ;CHECK-NOT: ld1
    618 ;CHECK: scvtf.4s v0, v0, #1
    619 ;CHECK-NEXT: ret
    620 	%tmp3 = call <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32> %A, i32 1)
    621 	ret <4 x float> %tmp3
    622 }
    623 
    624 define <2 x double> @scvtf_2dc(<2 x i64> %A) nounwind {
    625 ;CHECK-LABEL: scvtf_2dc:
    626 ;CHECK-NOT: ld1
    627 ;CHECK: scvtf.2d v0, v0, #1
    628 ;CHECK-NEXT: ret
    629 	%tmp3 = call <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64> %A, i32 1)
    630 	ret <2 x double> %tmp3
    631 }
    632 
    633 declare <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32>, i32) nounwind readnone
    634 declare <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32>, i32) nounwind readnone
    635 declare <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64>, i32) nounwind readnone
    636 
    637 define <2 x float> @ucvtf_2sc(<2 x i32> %A) nounwind {
    638 ;CHECK-LABEL: ucvtf_2sc:
    639 ;CHECK-NOT: ld1
    640 ;CHECK: ucvtf.2s v0, v0, #1
    641 ;CHECK-NEXT: ret
    642 	%tmp3 = call <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32> %A, i32 1)
    643 	ret <2 x float> %tmp3
    644 }
    645 
    646 define <4 x float> @ucvtf_4sc(<4 x i32> %A) nounwind {
    647 ;CHECK-LABEL: ucvtf_4sc:
    648 ;CHECK-NOT: ld1
    649 ;CHECK: ucvtf.4s v0, v0, #1
    650 ;CHECK-NEXT: ret
    651 	%tmp3 = call <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32> %A, i32 1)
    652 	ret <4 x float> %tmp3
    653 }
    654 
    655 define <2 x double> @ucvtf_2dc(<2 x i64> %A) nounwind {
    656 ;CHECK-LABEL: ucvtf_2dc:
    657 ;CHECK-NOT: ld1
    658 ;CHECK: ucvtf.2d v0, v0, #1
    659 ;CHECK-NEXT: ret
    660 	%tmp3 = call <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64> %A, i32 1)
    661 	ret <2 x double> %tmp3
    662 }
    663 
    664 
    665 ;CHECK-LABEL: autogen_SD28458:
    666 ;CHECK: fcvt
    667 ;CHECK: ret
    668 define void @autogen_SD28458(<8 x double> %val.f64, <8 x float>* %addr.f32) {
    669   %Tr53 = fptrunc <8 x double> %val.f64 to <8 x float>
    670   store <8 x float> %Tr53, <8 x float>* %addr.f32
    671   ret void
    672 }
    673 
    674 ;CHECK-LABEL: autogen_SD19225:
    675 ;CHECK: fcvt
    676 ;CHECK: ret
    677 define void @autogen_SD19225(<8 x double>* %addr.f64, <8 x float>* %addr.f32) {
    678   %A = load <8 x float>, <8 x float>* %addr.f32
    679   %Tr53 = fpext <8 x float> %A to <8 x double>
    680   store <8 x double> %Tr53, <8 x double>* %addr.f64
    681   ret void
    682 }
    683 
    684 declare <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32>, i32) nounwind readnone
    685 declare <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32>, i32) nounwind readnone
    686 declare <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64>, i32) nounwind readnone
    687