1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2 2; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s 3 4define <8 x i8> @test_vshr_n_s8(<8 x i8> %a) { 5; CHECK-LABEL: test_vshr_n_s8: 6; CHECK: // %bb.0: 7; CHECK-NEXT: sshr v0.8b, v0.8b, #3 8; CHECK-NEXT: ret 9 %vshr_n = ashr <8 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 10 ret <8 x i8> %vshr_n 11} 12 13define <4 x i16> @test_vshr_n_s16(<4 x i16> %a) { 14; CHECK-LABEL: test_vshr_n_s16: 15; CHECK: // %bb.0: 16; CHECK-NEXT: sshr v0.4h, v0.4h, #3 17; CHECK-NEXT: ret 18 %vshr_n = ashr <4 x i16> %a, <i16 3, i16 3, i16 3, i16 3> 19 ret <4 x i16> %vshr_n 20} 21 22define <2 x i32> @test_vshr_n_s32(<2 x i32> %a) { 23; CHECK-LABEL: test_vshr_n_s32: 24; CHECK: // %bb.0: 25; CHECK-NEXT: sshr v0.2s, v0.2s, #3 26; CHECK-NEXT: ret 27 %vshr_n = ashr <2 x i32> %a, <i32 3, i32 3> 28 ret <2 x i32> %vshr_n 29} 30 31define <16 x i8> @test_vshrq_n_s8(<16 x i8> %a) { 32; CHECK-LABEL: test_vshrq_n_s8: 33; CHECK: // %bb.0: 34; CHECK-NEXT: sshr v0.16b, v0.16b, #3 35; CHECK-NEXT: ret 36 %vshr_n = ashr <16 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 37 ret <16 x i8> %vshr_n 38} 39 40define <8 x i16> @test_vshrq_n_s16(<8 x i16> %a) { 41; CHECK-LABEL: test_vshrq_n_s16: 42; CHECK: // %bb.0: 43; CHECK-NEXT: sshr v0.8h, v0.8h, #3 44; CHECK-NEXT: ret 45 %vshr_n = ashr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 46 ret <8 x i16> %vshr_n 47} 48 49define <4 x i32> @test_vshrq_n_s32(<4 x i32> %a) { 50; CHECK-LABEL: test_vshrq_n_s32: 51; CHECK: // %bb.0: 52; CHECK-NEXT: sshr v0.4s, v0.4s, #3 53; CHECK-NEXT: ret 54 %vshr_n = ashr <4 x i32> %a, <i32 3, i32 3, i32 3, i32 3> 55 ret <4 x i32> %vshr_n 56} 57 58define <2 x i64> @test_vshrq_n_s64(<2 x i64> %a) { 59; CHECK-LABEL: test_vshrq_n_s64: 60; CHECK: // %bb.0: 61; CHECK-NEXT: sshr v0.2d, v0.2d, #3 62; CHECK-NEXT: ret 63 %vshr_n = ashr <2 x i64> %a, <i64 3, i64 3> 64 ret <2 x i64> %vshr_n 65} 66 67define <8 x i8> @test_vshr_n_u8(<8 x i8> %a) { 68; CHECK-LABEL: test_vshr_n_u8: 69; CHECK: // %bb.0: 70; CHECK-NEXT: ushr v0.8b, v0.8b, #3 71; CHECK-NEXT: ret 72 %vshr_n = lshr <8 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 73 ret <8 x i8> %vshr_n 74} 75 76define <4 x i16> @test_vshr_n_u16(<4 x i16> %a) { 77; CHECK-LABEL: test_vshr_n_u16: 78; CHECK: // %bb.0: 79; CHECK-NEXT: ushr v0.4h, v0.4h, #3 80; CHECK-NEXT: ret 81 %vshr_n = lshr <4 x i16> %a, <i16 3, i16 3, i16 3, i16 3> 82 ret <4 x i16> %vshr_n 83} 84 85define <2 x i32> @test_vshr_n_u32(<2 x i32> %a) { 86; CHECK-LABEL: test_vshr_n_u32: 87; CHECK: // %bb.0: 88; CHECK-NEXT: ushr v0.2s, v0.2s, #3 89; CHECK-NEXT: ret 90 %vshr_n = lshr <2 x i32> %a, <i32 3, i32 3> 91 ret <2 x i32> %vshr_n 92} 93 94define <16 x i8> @test_vshrq_n_u8(<16 x i8> %a) { 95; CHECK-LABEL: test_vshrq_n_u8: 96; CHECK: // %bb.0: 97; CHECK-NEXT: ushr v0.16b, v0.16b, #3 98; CHECK-NEXT: ret 99 %vshr_n = lshr <16 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 100 ret <16 x i8> %vshr_n 101} 102 103define <8 x i16> @test_vshrq_n_u16(<8 x i16> %a) { 104; CHECK-LABEL: test_vshrq_n_u16: 105; CHECK: // %bb.0: 106; CHECK-NEXT: ushr v0.8h, v0.8h, #3 107; CHECK-NEXT: ret 108 %vshr_n = lshr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 109 ret <8 x i16> %vshr_n 110} 111 112define <4 x i32> @test_vshrq_n_u32(<4 x i32> %a) { 113; CHECK-LABEL: test_vshrq_n_u32: 114; CHECK: // %bb.0: 115; CHECK-NEXT: ushr v0.4s, v0.4s, #3 116; CHECK-NEXT: ret 117 %vshr_n = lshr <4 x i32> %a, <i32 3, i32 3, i32 3, i32 3> 118 ret <4 x i32> %vshr_n 119} 120 121define <2 x i64> @test_vshrq_n_u64(<2 x i64> %a) { 122; CHECK-LABEL: test_vshrq_n_u64: 123; CHECK: // %bb.0: 124; CHECK-NEXT: ushr v0.2d, v0.2d, #3 125; CHECK-NEXT: ret 126 %vshr_n = lshr <2 x i64> %a, <i64 3, i64 3> 127 ret <2 x i64> %vshr_n 128} 129 130define <8 x i8> @test_vsra_n_s8(<8 x i8> %a, <8 x i8> %b) { 131; CHECK-LABEL: test_vsra_n_s8: 132; CHECK: // %bb.0: 133; CHECK-NEXT: ssra v0.8b, v1.8b, #3 134; CHECK-NEXT: ret 135 %vsra_n = ashr <8 x i8> %b, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 136 %1 = add <8 x i8> %vsra_n, %a 137 ret <8 x i8> %1 138} 139 140define <4 x i16> @test_vsra_n_s16(<4 x i16> %a, <4 x i16> %b) { 141; CHECK-LABEL: test_vsra_n_s16: 142; CHECK: // %bb.0: 143; CHECK-NEXT: ssra v0.4h, v1.4h, #3 144; CHECK-NEXT: ret 145 %vsra_n = ashr <4 x i16> %b, <i16 3, i16 3, i16 3, i16 3> 146 %1 = add <4 x i16> %vsra_n, %a 147 ret <4 x i16> %1 148} 149 150define <2 x i32> @test_vsra_n_s32(<2 x i32> %a, <2 x i32> %b) { 151; CHECK-LABEL: test_vsra_n_s32: 152; CHECK: // %bb.0: 153; CHECK-NEXT: ssra v0.2s, v1.2s, #3 154; CHECK-NEXT: ret 155 %vsra_n = ashr <2 x i32> %b, <i32 3, i32 3> 156 %1 = add <2 x i32> %vsra_n, %a 157 ret <2 x i32> %1 158} 159 160define <16 x i8> @test_vsraq_n_s8(<16 x i8> %a, <16 x i8> %b) { 161; CHECK-LABEL: test_vsraq_n_s8: 162; CHECK: // %bb.0: 163; CHECK-NEXT: ssra v0.16b, v1.16b, #3 164; CHECK-NEXT: ret 165 %vsra_n = ashr <16 x i8> %b, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 166 %1 = add <16 x i8> %vsra_n, %a 167 ret <16 x i8> %1 168} 169 170define <8 x i16> @test_vsraq_n_s16(<8 x i16> %a, <8 x i16> %b) { 171; CHECK-LABEL: test_vsraq_n_s16: 172; CHECK: // %bb.0: 173; CHECK-NEXT: ssra v0.8h, v1.8h, #3 174; CHECK-NEXT: ret 175 %vsra_n = ashr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 176 %1 = add <8 x i16> %vsra_n, %a 177 ret <8 x i16> %1 178} 179 180define <4 x i32> @test_vsraq_n_s32(<4 x i32> %a, <4 x i32> %b) { 181; CHECK-LABEL: test_vsraq_n_s32: 182; CHECK: // %bb.0: 183; CHECK-NEXT: ssra v0.4s, v1.4s, #3 184; CHECK-NEXT: ret 185 %vsra_n = ashr <4 x i32> %b, <i32 3, i32 3, i32 3, i32 3> 186 %1 = add <4 x i32> %vsra_n, %a 187 ret <4 x i32> %1 188} 189 190define <2 x i64> @test_vsraq_n_s64(<2 x i64> %a, <2 x i64> %b) { 191; CHECK-LABEL: test_vsraq_n_s64: 192; CHECK: // %bb.0: 193; CHECK-NEXT: ssra v0.2d, v1.2d, #3 194; CHECK-NEXT: ret 195 %vsra_n = ashr <2 x i64> %b, <i64 3, i64 3> 196 %1 = add <2 x i64> %vsra_n, %a 197 ret <2 x i64> %1 198} 199 200define <8 x i8> @test_vsra_n_u8(<8 x i8> %a, <8 x i8> %b) { 201; CHECK-LABEL: test_vsra_n_u8: 202; CHECK: // %bb.0: 203; CHECK-NEXT: usra v0.8b, v1.8b, #3 204; CHECK-NEXT: ret 205 %vsra_n = lshr <8 x i8> %b, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 206 %1 = add <8 x i8> %vsra_n, %a 207 ret <8 x i8> %1 208} 209 210define <4 x i16> @test_vsra_n_u16(<4 x i16> %a, <4 x i16> %b) { 211; CHECK-LABEL: test_vsra_n_u16: 212; CHECK: // %bb.0: 213; CHECK-NEXT: usra v0.4h, v1.4h, #3 214; CHECK-NEXT: ret 215 %vsra_n = lshr <4 x i16> %b, <i16 3, i16 3, i16 3, i16 3> 216 %1 = add <4 x i16> %vsra_n, %a 217 ret <4 x i16> %1 218} 219 220define <2 x i32> @test_vsra_n_u32(<2 x i32> %a, <2 x i32> %b) { 221; CHECK-LABEL: test_vsra_n_u32: 222; CHECK: // %bb.0: 223; CHECK-NEXT: usra v0.2s, v1.2s, #3 224; CHECK-NEXT: ret 225 %vsra_n = lshr <2 x i32> %b, <i32 3, i32 3> 226 %1 = add <2 x i32> %vsra_n, %a 227 ret <2 x i32> %1 228} 229 230define <16 x i8> @test_vsraq_n_u8(<16 x i8> %a, <16 x i8> %b) { 231; CHECK-LABEL: test_vsraq_n_u8: 232; CHECK: // %bb.0: 233; CHECK-NEXT: usra v0.16b, v1.16b, #3 234; CHECK-NEXT: ret 235 %vsra_n = lshr <16 x i8> %b, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3> 236 %1 = add <16 x i8> %vsra_n, %a 237 ret <16 x i8> %1 238} 239 240define <8 x i16> @test_vsraq_n_u16(<8 x i16> %a, <8 x i16> %b) { 241; CHECK-LABEL: test_vsraq_n_u16: 242; CHECK: // %bb.0: 243; CHECK-NEXT: usra v0.8h, v1.8h, #3 244; CHECK-NEXT: ret 245 %vsra_n = lshr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 246 %1 = add <8 x i16> %vsra_n, %a 247 ret <8 x i16> %1 248} 249 250define <4 x i32> @test_vsraq_n_u32(<4 x i32> %a, <4 x i32> %b) { 251; CHECK-LABEL: test_vsraq_n_u32: 252; CHECK: // %bb.0: 253; CHECK-NEXT: usra v0.4s, v1.4s, #3 254; CHECK-NEXT: ret 255 %vsra_n = lshr <4 x i32> %b, <i32 3, i32 3, i32 3, i32 3> 256 %1 = add <4 x i32> %vsra_n, %a 257 ret <4 x i32> %1 258} 259 260define <2 x i64> @test_vsraq_n_u64(<2 x i64> %a, <2 x i64> %b) { 261; CHECK-LABEL: test_vsraq_n_u64: 262; CHECK: // %bb.0: 263; CHECK-NEXT: usra v0.2d, v1.2d, #3 264; CHECK-NEXT: ret 265 %vsra_n = lshr <2 x i64> %b, <i64 3, i64 3> 266 %1 = add <2 x i64> %vsra_n, %a 267 ret <2 x i64> %1 268} 269 270define <8 x i8> @test_vshrn_n_s16(<8 x i16> %a) { 271; CHECK-LABEL: test_vshrn_n_s16: 272; CHECK: // %bb.0: 273; CHECK-NEXT: shrn v0.8b, v0.8h, #3 274; CHECK-NEXT: ret 275 %1 = ashr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 276 %vshrn_n = trunc <8 x i16> %1 to <8 x i8> 277 ret <8 x i8> %vshrn_n 278} 279 280define <4 x i16> @test_vshrn_n_s32(<4 x i32> %a) { 281; CHECK-LABEL: test_vshrn_n_s32: 282; CHECK: // %bb.0: 283; CHECK-NEXT: shrn v0.4h, v0.4s, #9 284; CHECK-NEXT: ret 285 %1 = ashr <4 x i32> %a, <i32 9, i32 9, i32 9, i32 9> 286 %vshrn_n = trunc <4 x i32> %1 to <4 x i16> 287 ret <4 x i16> %vshrn_n 288} 289 290define <2 x i32> @test_vshrn_n_s64(<2 x i64> %a) { 291; CHECK-LABEL: test_vshrn_n_s64: 292; CHECK: // %bb.0: 293; CHECK-NEXT: shrn v0.2s, v0.2d, #19 294; CHECK-NEXT: ret 295 %1 = ashr <2 x i64> %a, <i64 19, i64 19> 296 %vshrn_n = trunc <2 x i64> %1 to <2 x i32> 297 ret <2 x i32> %vshrn_n 298} 299 300define <8 x i8> @test_vshrn_n_u16(<8 x i16> %a) { 301; CHECK-LABEL: test_vshrn_n_u16: 302; CHECK: // %bb.0: 303; CHECK-NEXT: shrn v0.8b, v0.8h, #3 304; CHECK-NEXT: ret 305 %1 = lshr <8 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 306 %vshrn_n = trunc <8 x i16> %1 to <8 x i8> 307 ret <8 x i8> %vshrn_n 308} 309 310define <4 x i16> @test_vshrn_n_u32(<4 x i32> %a) { 311; CHECK-LABEL: test_vshrn_n_u32: 312; CHECK: // %bb.0: 313; CHECK-NEXT: shrn v0.4h, v0.4s, #9 314; CHECK-NEXT: ret 315 %1 = lshr <4 x i32> %a, <i32 9, i32 9, i32 9, i32 9> 316 %vshrn_n = trunc <4 x i32> %1 to <4 x i16> 317 ret <4 x i16> %vshrn_n 318} 319 320define <2 x i32> @test_vshrn_n_u64(<2 x i64> %a) { 321; CHECK-LABEL: test_vshrn_n_u64: 322; CHECK: // %bb.0: 323; CHECK-NEXT: shrn v0.2s, v0.2d, #19 324; CHECK-NEXT: ret 325 %1 = lshr <2 x i64> %a, <i64 19, i64 19> 326 %vshrn_n = trunc <2 x i64> %1 to <2 x i32> 327 ret <2 x i32> %vshrn_n 328} 329 330define <16 x i8> @test_vshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) { 331; CHECK-LABEL: test_vshrn_high_n_s16: 332; CHECK: // %bb.0: 333; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 334; CHECK-NEXT: shrn2 v0.16b, v1.8h, #3 335; CHECK-NEXT: ret 336 %1 = ashr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 337 %vshrn_n = trunc <8 x i16> %1 to <8 x i8> 338 %2 = bitcast <8 x i8> %a to <1 x i64> 339 %3 = bitcast <8 x i8> %vshrn_n to <1 x i64> 340 %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1> 341 %4 = bitcast <2 x i64> %shuffle.i to <16 x i8> 342 ret <16 x i8> %4 343} 344 345define <8 x i16> @test_vshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) { 346; CHECK-LABEL: test_vshrn_high_n_s32: 347; CHECK: // %bb.0: 348; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 349; CHECK-NEXT: shrn2 v0.8h, v1.4s, #9 350; CHECK-NEXT: ret 351 %1 = ashr <4 x i32> %b, <i32 9, i32 9, i32 9, i32 9> 352 %vshrn_n = trunc <4 x i32> %1 to <4 x i16> 353 %2 = bitcast <4 x i16> %a to <1 x i64> 354 %3 = bitcast <4 x i16> %vshrn_n to <1 x i64> 355 %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1> 356 %4 = bitcast <2 x i64> %shuffle.i to <8 x i16> 357 ret <8 x i16> %4 358} 359 360define <4 x i32> @test_vshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) { 361; CHECK-LABEL: test_vshrn_high_n_s64: 362; CHECK: // %bb.0: 363; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 364; CHECK-NEXT: shrn2 v0.4s, v1.2d, #19 365; CHECK-NEXT: ret 366 %1 = bitcast <2 x i32> %a to <1 x i64> 367 %2 = ashr <2 x i64> %b, <i64 19, i64 19> 368 %vshrn_n = trunc <2 x i64> %2 to <2 x i32> 369 %3 = bitcast <2 x i32> %vshrn_n to <1 x i64> 370 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %3, <2 x i32> <i32 0, i32 1> 371 %4 = bitcast <2 x i64> %shuffle.i to <4 x i32> 372 ret <4 x i32> %4 373} 374 375define <16 x i8> @test_vshrn_high_n_u16(<8 x i8> %a, <8 x i16> %b) { 376; CHECK-LABEL: test_vshrn_high_n_u16: 377; CHECK: // %bb.0: 378; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 379; CHECK-NEXT: shrn2 v0.16b, v1.8h, #3 380; CHECK-NEXT: ret 381 %1 = lshr <8 x i16> %b, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3> 382 %vshrn_n = trunc <8 x i16> %1 to <8 x i8> 383 %2 = bitcast <8 x i8> %a to <1 x i64> 384 %3 = bitcast <8 x i8> %vshrn_n to <1 x i64> 385 %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1> 386 %4 = bitcast <2 x i64> %shuffle.i to <16 x i8> 387 ret <16 x i8> %4 388} 389 390define <8 x i16> @test_vshrn_high_n_u32(<4 x i16> %a, <4 x i32> %b) { 391; CHECK-LABEL: test_vshrn_high_n_u32: 392; CHECK: // %bb.0: 393; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 394; CHECK-NEXT: shrn2 v0.8h, v1.4s, #9 395; CHECK-NEXT: ret 396 %1 = lshr <4 x i32> %b, <i32 9, i32 9, i32 9, i32 9> 397 %vshrn_n = trunc <4 x i32> %1 to <4 x i16> 398 %2 = bitcast <4 x i16> %a to <1 x i64> 399 %3 = bitcast <4 x i16> %vshrn_n to <1 x i64> 400 %shuffle.i = shufflevector <1 x i64> %2, <1 x i64> %3, <2 x i32> <i32 0, i32 1> 401 %4 = bitcast <2 x i64> %shuffle.i to <8 x i16> 402 ret <8 x i16> %4 403} 404 405define <4 x i32> @test_vshrn_high_n_u64(<2 x i32> %a, <2 x i64> %b) { 406; CHECK-LABEL: test_vshrn_high_n_u64: 407; CHECK: // %bb.0: 408; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 409; CHECK-NEXT: shrn2 v0.4s, v1.2d, #19 410; CHECK-NEXT: ret 411 %1 = bitcast <2 x i32> %a to <1 x i64> 412 %2 = lshr <2 x i64> %b, <i64 19, i64 19> 413 %vshrn_n = trunc <2 x i64> %2 to <2 x i32> 414 %3 = bitcast <2 x i32> %vshrn_n to <1 x i64> 415 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %3, <2 x i32> <i32 0, i32 1> 416 %4 = bitcast <2 x i64> %shuffle.i to <4 x i32> 417 ret <4 x i32> %4 418} 419 420define <16 x i8> @test_vqshrun_high_n_s16(<8 x i8> %a, <8 x i16> %b) { 421; CHECK-LABEL: test_vqshrun_high_n_s16: 422; CHECK: // %bb.0: 423; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 424; CHECK-NEXT: sqshrun2 v0.16b, v1.8h, #3 425; CHECK-NEXT: ret 426 %vqshrun = tail call <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16> %b, i32 3) 427 %1 = bitcast <8 x i8> %a to <1 x i64> 428 %2 = bitcast <8 x i8> %vqshrun to <1 x i64> 429 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 430 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 431 ret <16 x i8> %3 432} 433 434define <8 x i16> @test_vqshrun_high_n_s32(<4 x i16> %a, <4 x i32> %b) { 435; CHECK-LABEL: test_vqshrun_high_n_s32: 436; CHECK: // %bb.0: 437; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 438; CHECK-NEXT: sqshrun2 v0.8h, v1.4s, #9 439; CHECK-NEXT: ret 440 %vqshrun = tail call <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32> %b, i32 9) 441 %1 = bitcast <4 x i16> %a to <1 x i64> 442 %2 = bitcast <4 x i16> %vqshrun to <1 x i64> 443 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 444 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 445 ret <8 x i16> %3 446} 447 448define <4 x i32> @test_vqshrun_high_n_s64(<2 x i32> %a, <2 x i64> %b) { 449; CHECK-LABEL: test_vqshrun_high_n_s64: 450; CHECK: // %bb.0: 451; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 452; CHECK-NEXT: sqshrun2 v0.4s, v1.2d, #19 453; CHECK-NEXT: ret 454 %1 = bitcast <2 x i32> %a to <1 x i64> 455 %vqshrun = tail call <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64> %b, i32 19) 456 %2 = bitcast <2 x i32> %vqshrun to <1 x i64> 457 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 458 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 459 ret <4 x i32> %3 460} 461 462define <16 x i8> @test_vrshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) { 463; CHECK-LABEL: test_vrshrn_high_n_s16: 464; CHECK: // %bb.0: 465; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 466; CHECK-NEXT: rshrn2 v0.16b, v1.8h, #3 467; CHECK-NEXT: ret 468 %vrshrn = tail call <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16> %b, i32 3) 469 %1 = bitcast <8 x i8> %a to <1 x i64> 470 %2 = bitcast <8 x i8> %vrshrn to <1 x i64> 471 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 472 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 473 ret <16 x i8> %3 474} 475 476define <8 x i16> @test_vrshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) { 477; CHECK-LABEL: test_vrshrn_high_n_s32: 478; CHECK: // %bb.0: 479; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 480; CHECK-NEXT: rshrn2 v0.8h, v1.4s, #9 481; CHECK-NEXT: ret 482 %vrshrn = tail call <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32> %b, i32 9) 483 %1 = bitcast <4 x i16> %a to <1 x i64> 484 %2 = bitcast <4 x i16> %vrshrn to <1 x i64> 485 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 486 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 487 ret <8 x i16> %3 488} 489 490define <4 x i32> @test_vrshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) { 491; CHECK-LABEL: test_vrshrn_high_n_s64: 492; CHECK: // %bb.0: 493; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 494; CHECK-NEXT: rshrn2 v0.4s, v1.2d, #19 495; CHECK-NEXT: ret 496 %1 = bitcast <2 x i32> %a to <1 x i64> 497 %vrshrn = tail call <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64> %b, i32 19) 498 %2 = bitcast <2 x i32> %vrshrn to <1 x i64> 499 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 500 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 501 ret <4 x i32> %3 502} 503 504define <16 x i8> @test_vqrshrun_high_n_s16(<8 x i8> %a, <8 x i16> %b) { 505; CHECK-LABEL: test_vqrshrun_high_n_s16: 506; CHECK: // %bb.0: 507; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 508; CHECK-NEXT: sqrshrun2 v0.16b, v1.8h, #3 509; CHECK-NEXT: ret 510 %vqrshrun = tail call <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16> %b, i32 3) 511 %1 = bitcast <8 x i8> %a to <1 x i64> 512 %2 = bitcast <8 x i8> %vqrshrun to <1 x i64> 513 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 514 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 515 ret <16 x i8> %3 516} 517 518define <8 x i16> @test_vqrshrun_high_n_s32(<4 x i16> %a, <4 x i32> %b) { 519; CHECK-LABEL: test_vqrshrun_high_n_s32: 520; CHECK: // %bb.0: 521; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 522; CHECK-NEXT: sqrshrun2 v0.8h, v1.4s, #9 523; CHECK-NEXT: ret 524 %vqrshrun = tail call <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32> %b, i32 9) 525 %1 = bitcast <4 x i16> %a to <1 x i64> 526 %2 = bitcast <4 x i16> %vqrshrun to <1 x i64> 527 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 528 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 529 ret <8 x i16> %3 530} 531 532define <4 x i32> @test_vqrshrun_high_n_s64(<2 x i32> %a, <2 x i64> %b) { 533; CHECK-LABEL: test_vqrshrun_high_n_s64: 534; CHECK: // %bb.0: 535; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 536; CHECK-NEXT: sqrshrun2 v0.4s, v1.2d, #19 537; CHECK-NEXT: ret 538 %1 = bitcast <2 x i32> %a to <1 x i64> 539 %vqrshrun = tail call <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64> %b, i32 19) 540 %2 = bitcast <2 x i32> %vqrshrun to <1 x i64> 541 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 542 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 543 ret <4 x i32> %3 544} 545 546define <16 x i8> @test_vqshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) { 547; CHECK-LABEL: test_vqshrn_high_n_s16: 548; CHECK: // %bb.0: 549; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 550; CHECK-NEXT: sqshrn2 v0.16b, v1.8h, #3 551; CHECK-NEXT: ret 552 %vqshrn = tail call <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16> %b, i32 3) 553 %1 = bitcast <8 x i8> %a to <1 x i64> 554 %2 = bitcast <8 x i8> %vqshrn to <1 x i64> 555 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 556 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 557 ret <16 x i8> %3 558} 559 560define <8 x i16> @test_vqshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) { 561; CHECK-LABEL: test_vqshrn_high_n_s32: 562; CHECK: // %bb.0: 563; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 564; CHECK-NEXT: sqshrn2 v0.8h, v1.4s, #9 565; CHECK-NEXT: ret 566 %vqshrn = tail call <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32> %b, i32 9) 567 %1 = bitcast <4 x i16> %a to <1 x i64> 568 %2 = bitcast <4 x i16> %vqshrn to <1 x i64> 569 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 570 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 571 ret <8 x i16> %3 572} 573 574define <4 x i32> @test_vqshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) { 575; CHECK-LABEL: test_vqshrn_high_n_s64: 576; CHECK: // %bb.0: 577; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 578; CHECK-NEXT: sqshrn2 v0.4s, v1.2d, #19 579; CHECK-NEXT: ret 580 %1 = bitcast <2 x i32> %a to <1 x i64> 581 %vqshrn = tail call <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64> %b, i32 19) 582 %2 = bitcast <2 x i32> %vqshrn to <1 x i64> 583 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 584 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 585 ret <4 x i32> %3 586} 587 588define <16 x i8> @test_vqshrn_high_n_u16(<8 x i8> %a, <8 x i16> %b) { 589; CHECK-LABEL: test_vqshrn_high_n_u16: 590; CHECK: // %bb.0: 591; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 592; CHECK-NEXT: uqshrn2 v0.16b, v1.8h, #3 593; CHECK-NEXT: ret 594 %vqshrn = tail call <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16> %b, i32 3) 595 %1 = bitcast <8 x i8> %a to <1 x i64> 596 %2 = bitcast <8 x i8> %vqshrn to <1 x i64> 597 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 598 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 599 ret <16 x i8> %3 600} 601 602define <8 x i16> @test_vqshrn_high_n_u32(<4 x i16> %a, <4 x i32> %b) { 603; CHECK-LABEL: test_vqshrn_high_n_u32: 604; CHECK: // %bb.0: 605; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 606; CHECK-NEXT: uqshrn2 v0.8h, v1.4s, #9 607; CHECK-NEXT: ret 608 %vqshrn = tail call <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32> %b, i32 9) 609 %1 = bitcast <4 x i16> %a to <1 x i64> 610 %2 = bitcast <4 x i16> %vqshrn to <1 x i64> 611 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 612 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 613 ret <8 x i16> %3 614} 615 616define <4 x i32> @test_vqshrn_high_n_u64(<2 x i32> %a, <2 x i64> %b) { 617; CHECK-LABEL: test_vqshrn_high_n_u64: 618; CHECK: // %bb.0: 619; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 620; CHECK-NEXT: uqshrn2 v0.4s, v1.2d, #19 621; CHECK-NEXT: ret 622 %1 = bitcast <2 x i32> %a to <1 x i64> 623 %vqshrn = tail call <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64> %b, i32 19) 624 %2 = bitcast <2 x i32> %vqshrn to <1 x i64> 625 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 626 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 627 ret <4 x i32> %3 628} 629 630define <16 x i8> @test_vqrshrn_high_n_s16(<8 x i8> %a, <8 x i16> %b) { 631; CHECK-LABEL: test_vqrshrn_high_n_s16: 632; CHECK: // %bb.0: 633; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 634; CHECK-NEXT: sqrshrn2 v0.16b, v1.8h, #3 635; CHECK-NEXT: ret 636 %vqrshrn = tail call <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16> %b, i32 3) 637 %1 = bitcast <8 x i8> %a to <1 x i64> 638 %2 = bitcast <8 x i8> %vqrshrn to <1 x i64> 639 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 640 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 641 ret <16 x i8> %3 642} 643 644define <8 x i16> @test_vqrshrn_high_n_s32(<4 x i16> %a, <4 x i32> %b) { 645; CHECK-LABEL: test_vqrshrn_high_n_s32: 646; CHECK: // %bb.0: 647; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 648; CHECK-NEXT: sqrshrn2 v0.8h, v1.4s, #9 649; CHECK-NEXT: ret 650 %vqrshrn = tail call <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32> %b, i32 9) 651 %1 = bitcast <4 x i16> %a to <1 x i64> 652 %2 = bitcast <4 x i16> %vqrshrn to <1 x i64> 653 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 654 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 655 ret <8 x i16> %3 656} 657 658define <4 x i32> @test_vqrshrn_high_n_s64(<2 x i32> %a, <2 x i64> %b) { 659; CHECK-LABEL: test_vqrshrn_high_n_s64: 660; CHECK: // %bb.0: 661; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 662; CHECK-NEXT: sqrshrn2 v0.4s, v1.2d, #19 663; CHECK-NEXT: ret 664 %1 = bitcast <2 x i32> %a to <1 x i64> 665 %vqrshrn = tail call <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64> %b, i32 19) 666 %2 = bitcast <2 x i32> %vqrshrn to <1 x i64> 667 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 668 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 669 ret <4 x i32> %3 670} 671 672define <16 x i8> @test_vqrshrn_high_n_u16(<8 x i8> %a, <8 x i16> %b) { 673; CHECK-LABEL: test_vqrshrn_high_n_u16: 674; CHECK: // %bb.0: 675; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 676; CHECK-NEXT: uqrshrn2 v0.16b, v1.8h, #3 677; CHECK-NEXT: ret 678 %vqrshrn = tail call <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16> %b, i32 3) 679 %1 = bitcast <8 x i8> %a to <1 x i64> 680 %2 = bitcast <8 x i8> %vqrshrn to <1 x i64> 681 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 682 %3 = bitcast <2 x i64> %shuffle.i to <16 x i8> 683 ret <16 x i8> %3 684} 685 686define <8 x i16> @test_vqrshrn_high_n_u32(<4 x i16> %a, <4 x i32> %b) { 687; CHECK-LABEL: test_vqrshrn_high_n_u32: 688; CHECK: // %bb.0: 689; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 690; CHECK-NEXT: uqrshrn2 v0.8h, v1.4s, #9 691; CHECK-NEXT: ret 692 %vqrshrn = tail call <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32> %b, i32 9) 693 %1 = bitcast <4 x i16> %a to <1 x i64> 694 %2 = bitcast <4 x i16> %vqrshrn to <1 x i64> 695 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 696 %3 = bitcast <2 x i64> %shuffle.i to <8 x i16> 697 ret <8 x i16> %3 698} 699 700define <4 x i32> @test_vqrshrn_high_n_u64(<2 x i32> %a, <2 x i64> %b) { 701; CHECK-LABEL: test_vqrshrn_high_n_u64: 702; CHECK: // %bb.0: 703; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 704; CHECK-NEXT: uqrshrn2 v0.4s, v1.2d, #19 705; CHECK-NEXT: ret 706 %1 = bitcast <2 x i32> %a to <1 x i64> 707 %vqrshrn = tail call <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64> %b, i32 19) 708 %2 = bitcast <2 x i32> %vqrshrn to <1 x i64> 709 %shuffle.i = shufflevector <1 x i64> %1, <1 x i64> %2, <2 x i32> <i32 0, i32 1> 710 %3 = bitcast <2 x i64> %shuffle.i to <4 x i32> 711 ret <4 x i32> %3 712} 713 714 715 716declare <8 x i8> @llvm.aarch64.neon.sqshrun.v8i8(<8 x i16>, i32) 717 718declare <4 x i16> @llvm.aarch64.neon.sqshrun.v4i16(<4 x i32>, i32) 719 720declare <2 x i32> @llvm.aarch64.neon.sqshrun.v2i32(<2 x i64>, i32) 721 722declare <8 x i8> @llvm.aarch64.neon.rshrn.v8i8(<8 x i16>, i32) 723 724declare <4 x i16> @llvm.aarch64.neon.rshrn.v4i16(<4 x i32>, i32) 725 726declare <2 x i32> @llvm.aarch64.neon.rshrn.v2i32(<2 x i64>, i32) 727 728declare <8 x i8> @llvm.aarch64.neon.sqrshrun.v8i8(<8 x i16>, i32) 729 730declare <4 x i16> @llvm.aarch64.neon.sqrshrun.v4i16(<4 x i32>, i32) 731 732declare <2 x i32> @llvm.aarch64.neon.sqrshrun.v2i32(<2 x i64>, i32) 733 734declare <8 x i8> @llvm.aarch64.neon.sqshrn.v8i8(<8 x i16>, i32) 735 736declare <4 x i16> @llvm.aarch64.neon.sqshrn.v4i16(<4 x i32>, i32) 737 738declare <2 x i32> @llvm.aarch64.neon.sqshrn.v2i32(<2 x i64>, i32) 739 740declare <8 x i8> @llvm.aarch64.neon.uqshrn.v8i8(<8 x i16>, i32) 741 742declare <4 x i16> @llvm.aarch64.neon.uqshrn.v4i16(<4 x i32>, i32) 743 744declare <2 x i32> @llvm.aarch64.neon.uqshrn.v2i32(<2 x i64>, i32) 745 746declare <8 x i8> @llvm.aarch64.neon.sqrshrn.v8i8(<8 x i16>, i32) 747 748declare <4 x i16> @llvm.aarch64.neon.sqrshrn.v4i16(<4 x i32>, i32) 749 750declare <2 x i32> @llvm.aarch64.neon.sqrshrn.v2i32(<2 x i64>, i32) 751 752declare <8 x i8> @llvm.aarch64.neon.uqrshrn.v8i8(<8 x i16>, i32) 753 754declare <4 x i16> @llvm.aarch64.neon.uqrshrn.v4i16(<4 x i32>, i32) 755 756declare <2 x i32> @llvm.aarch64.neon.uqrshrn.v2i32(<2 x i64>, i32) 757 758declare <2 x float> @llvm.aarch64.neon.vcvtfxs2fp.v2f32.v2i32(<2 x i32>, i32) 759 760declare <4 x float> @llvm.aarch64.neon.vcvtfxs2fp.v4f32.v4i32(<4 x i32>, i32) 761 762declare <2 x double> @llvm.aarch64.neon.vcvtfxs2fp.v2f64.v2i64(<2 x i64>, i32) 763 764declare <2 x float> @llvm.aarch64.neon.vcvtfxu2fp.v2f32.v2i32(<2 x i32>, i32) 765 766declare <4 x float> @llvm.aarch64.neon.vcvtfxu2fp.v4f32.v4i32(<4 x i32>, i32) 767 768declare <2 x double> @llvm.aarch64.neon.vcvtfxu2fp.v2f64.v2i64(<2 x i64>, i32) 769 770declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v2i32.v2f32(<2 x float>, i32) 771 772declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxs.v4i32.v4f32(<4 x float>, i32) 773 774declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v2i64.v2f64(<2 x double>, i32) 775 776declare <2 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v2i32.v2f32(<2 x float>, i32) 777 778declare <4 x i32> @llvm.aarch64.neon.vcvtfp2fxu.v4i32.v4f32(<4 x float>, i32) 779 780declare <2 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v2i64.v2f64(<2 x double>, i32) 781 782define <1 x i64> @test_vcvt_n_s64_f64(<1 x double> %a) { 783; CHECK-LABEL: test_vcvt_n_s64_f64: 784; CHECK: // %bb.0: 785; CHECK-NEXT: fcvtzs d0, d0, #64 786; CHECK-NEXT: ret 787 %1 = tail call <1 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v1i64.v1f64(<1 x double> %a, i32 64) 788 ret <1 x i64> %1 789} 790 791define <1 x i64> @test_vcvt_n_u64_f64(<1 x double> %a) { 792; CHECK-LABEL: test_vcvt_n_u64_f64: 793; CHECK: // %bb.0: 794; CHECK-NEXT: fcvtzu d0, d0, #64 795; CHECK-NEXT: ret 796 %1 = tail call <1 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v1i64.v1f64(<1 x double> %a, i32 64) 797 ret <1 x i64> %1 798} 799 800define <1 x double> @test_vcvt_n_f64_s64(<1 x i64> %a) { 801; CHECK-LABEL: test_vcvt_n_f64_s64: 802; CHECK: // %bb.0: 803; CHECK-NEXT: scvtf d0, d0, #64 804; CHECK-NEXT: ret 805 %1 = tail call <1 x double> @llvm.aarch64.neon.vcvtfxs2fp.v1f64.v1i64(<1 x i64> %a, i32 64) 806 ret <1 x double> %1 807} 808 809define <1 x double> @test_vcvt_n_f64_u64(<1 x i64> %a) { 810; CHECK-LABEL: test_vcvt_n_f64_u64: 811; CHECK: // %bb.0: 812; CHECK-NEXT: ucvtf d0, d0, #64 813; CHECK-NEXT: ret 814 %1 = tail call <1 x double> @llvm.aarch64.neon.vcvtfxu2fp.v1f64.v1i64(<1 x i64> %a, i32 64) 815 ret <1 x double> %1 816} 817 818declare <1 x i64> @llvm.aarch64.neon.vcvtfp2fxs.v1i64.v1f64(<1 x double>, i32) 819declare <1 x i64> @llvm.aarch64.neon.vcvtfp2fxu.v1i64.v1f64(<1 x double>, i32) 820declare <1 x double> @llvm.aarch64.neon.vcvtfxs2fp.v1f64.v1i64(<1 x i64>, i32) 821declare <1 x double> @llvm.aarch64.neon.vcvtfxu2fp.v1f64.v1i64(<1 x i64>, i32) 822