1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s 3 4; 5; FP_EXTEND 6; 7 8define <vscale x 2 x float> @fcvts_nxv2f16(<vscale x 2 x half> %a) { 9; CHECK-LABEL: fcvts_nxv2f16: 10; CHECK: // %bb.0: 11; CHECK-NEXT: ptrue p0.d 12; CHECK-NEXT: fcvt z0.s, p0/m, z0.h 13; CHECK-NEXT: ret 14 %res = fpext <vscale x 2 x half> %a to <vscale x 2 x float> 15 ret <vscale x 2 x float> %res 16} 17 18define <vscale x 3 x float> @fcvts_nxv3f16(<vscale x 3 x half> %a) { 19; CHECK-LABEL: fcvts_nxv3f16: 20; CHECK: // %bb.0: 21; CHECK-NEXT: ptrue p0.s 22; CHECK-NEXT: fcvt z0.s, p0/m, z0.h 23; CHECK-NEXT: ret 24 %res = fpext <vscale x 3 x half> %a to <vscale x 3 x float> 25 ret <vscale x 3 x float> %res 26} 27 28define <vscale x 4 x float> @fcvts_nxv4f16(<vscale x 4 x half> %a) { 29; CHECK-LABEL: fcvts_nxv4f16: 30; CHECK: // %bb.0: 31; CHECK-NEXT: ptrue p0.s 32; CHECK-NEXT: fcvt z0.s, p0/m, z0.h 33; CHECK-NEXT: ret 34 %res = fpext <vscale x 4 x half> %a to <vscale x 4 x float> 35 ret <vscale x 4 x float> %res 36} 37 38define <vscale x 2 x double> @fcvtd_nxv2f16(<vscale x 2 x half> %a) { 39; CHECK-LABEL: fcvtd_nxv2f16: 40; CHECK: // %bb.0: 41; CHECK-NEXT: ptrue p0.d 42; CHECK-NEXT: fcvt z0.d, p0/m, z0.h 43; CHECK-NEXT: ret 44 %res = fpext <vscale x 2 x half> %a to <vscale x 2 x double> 45 ret <vscale x 2 x double> %res 46} 47 48define <vscale x 2 x double> @fcvtd_nxv2f32(<vscale x 2 x float> %a) { 49; CHECK-LABEL: fcvtd_nxv2f32: 50; CHECK: // %bb.0: 51; CHECK-NEXT: ptrue p0.d 52; CHECK-NEXT: fcvt z0.d, p0/m, z0.s 53; CHECK-NEXT: ret 54 %res = fpext <vscale x 2 x float> %a to <vscale x 2 x double> 55 ret <vscale x 2 x double> %res 56} 57 58; 59; FP_ROUND 60; 61 62define <vscale x 2 x half> @fcvth_nxv2f32(<vscale x 2 x float> %a) { 63; CHECK-LABEL: fcvth_nxv2f32: 64; CHECK: // %bb.0: 65; CHECK-NEXT: ptrue p0.d 66; CHECK-NEXT: fcvt z0.h, p0/m, z0.s 67; CHECK-NEXT: ret 68 %res = fptrunc <vscale x 2 x float> %a to <vscale x 2 x half> 69 ret <vscale x 2 x half> %res 70} 71 72define <vscale x 3 x half> @fcvth_nxv3f32(<vscale x 3 x float> %a) { 73; CHECK-LABEL: fcvth_nxv3f32: 74; CHECK: // %bb.0: 75; CHECK-NEXT: ptrue p0.s 76; CHECK-NEXT: fcvt z0.h, p0/m, z0.s 77; CHECK-NEXT: ret 78 %res = fptrunc <vscale x 3 x float> %a to <vscale x 3 x half> 79 ret <vscale x 3 x half> %res 80} 81 82define <vscale x 4 x half> @fcvth_nxv4f32(<vscale x 4 x float> %a) { 83; CHECK-LABEL: fcvth_nxv4f32: 84; CHECK: // %bb.0: 85; CHECK-NEXT: ptrue p0.s 86; CHECK-NEXT: fcvt z0.h, p0/m, z0.s 87; CHECK-NEXT: ret 88 %res = fptrunc <vscale x 4 x float> %a to <vscale x 4 x half> 89 ret <vscale x 4 x half> %res 90} 91 92define <vscale x 2 x half> @fcvth_nxv2f64(<vscale x 2 x double> %a) { 93; CHECK-LABEL: fcvth_nxv2f64: 94; CHECK: // %bb.0: 95; CHECK-NEXT: ptrue p0.d 96; CHECK-NEXT: fcvt z0.h, p0/m, z0.d 97; CHECK-NEXT: ret 98 %res = fptrunc <vscale x 2 x double> %a to <vscale x 2 x half> 99 ret <vscale x 2 x half> %res 100} 101 102define <vscale x 2 x float> @fcvts_nxv2f64(<vscale x 2 x double> %a) { 103; CHECK-LABEL: fcvts_nxv2f64: 104; CHECK: // %bb.0: 105; CHECK-NEXT: ptrue p0.d 106; CHECK-NEXT: fcvt z0.s, p0/m, z0.d 107; CHECK-NEXT: ret 108 %res = fptrunc <vscale x 2 x double> %a to <vscale x 2 x float> 109 ret <vscale x 2 x float> %res 110} 111 112; 113; FP_TO_SINT 114; 115 116define <vscale x 2 x i16> @fcvtzs_h_nxv2f16(<vscale x 2 x half> %a) { 117; CHECK-LABEL: fcvtzs_h_nxv2f16: 118; CHECK: // %bb.0: 119; CHECK-NEXT: ptrue p0.d 120; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h 121; CHECK-NEXT: ret 122 %res = fptosi <vscale x 2 x half> %a to <vscale x 2 x i16> 123 ret <vscale x 2 x i16> %res 124} 125 126define <vscale x 2 x i16> @fcvtzs_h_nxv2f32(<vscale x 2 x float> %a) { 127; CHECK-LABEL: fcvtzs_h_nxv2f32: 128; CHECK: // %bb.0: 129; CHECK-NEXT: ptrue p0.d 130; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s 131; CHECK-NEXT: ret 132 %res = fptosi <vscale x 2 x float> %a to <vscale x 2 x i16> 133 ret <vscale x 2 x i16> %res 134} 135 136define <vscale x 2 x i16> @fcvtzs_h_nxv2f64(<vscale x 2 x double> %a) { 137; CHECK-LABEL: fcvtzs_h_nxv2f64: 138; CHECK: // %bb.0: 139; CHECK-NEXT: ptrue p0.d 140; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d 141; CHECK-NEXT: ret 142 %res = fptosi <vscale x 2 x double> %a to <vscale x 2 x i16> 143 ret <vscale x 2 x i16> %res 144} 145 146define <vscale x 4 x i16> @fcvtzs_h_nxv4f16(<vscale x 4 x half> %a) { 147; CHECK-LABEL: fcvtzs_h_nxv4f16: 148; CHECK: // %bb.0: 149; CHECK-NEXT: ptrue p0.s 150; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h 151; CHECK-NEXT: ret 152 %res = fptosi <vscale x 4 x half> %a to <vscale x 4 x i16> 153 ret <vscale x 4 x i16> %res 154} 155 156define <vscale x 4 x i16> @fcvtzs_h_nxv4f32(<vscale x 4 x float> %a) { 157; CHECK-LABEL: fcvtzs_h_nxv4f32: 158; CHECK: // %bb.0: 159; CHECK-NEXT: ptrue p0.s 160; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s 161; CHECK-NEXT: ret 162 %res = fptosi <vscale x 4 x float> %a to <vscale x 4 x i16> 163 ret <vscale x 4 x i16> %res 164} 165 166define <vscale x 7 x i16> @fcvtzs_h_nxv7f16(<vscale x 7 x half> %a) { 167; CHECK-LABEL: fcvtzs_h_nxv7f16: 168; CHECK: // %bb.0: 169; CHECK-NEXT: ptrue p0.h 170; CHECK-NEXT: fcvtzs z0.h, p0/m, z0.h 171; CHECK-NEXT: ret 172 %res = fptosi <vscale x 7 x half> %a to <vscale x 7 x i16> 173 ret <vscale x 7 x i16> %res 174} 175 176define <vscale x 8 x i16> @fcvtzs_h_nxv8f16(<vscale x 8 x half> %a) { 177; CHECK-LABEL: fcvtzs_h_nxv8f16: 178; CHECK: // %bb.0: 179; CHECK-NEXT: ptrue p0.h 180; CHECK-NEXT: fcvtzs z0.h, p0/m, z0.h 181; CHECK-NEXT: ret 182 %res = fptosi <vscale x 8 x half> %a to <vscale x 8 x i16> 183 ret <vscale x 8 x i16> %res 184} 185 186define <vscale x 2 x i32> @fcvtzs_s_nxv2f16(<vscale x 2 x half> %a) { 187; CHECK-LABEL: fcvtzs_s_nxv2f16: 188; CHECK: // %bb.0: 189; CHECK-NEXT: ptrue p0.d 190; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h 191; CHECK-NEXT: ret 192 %res = fptosi <vscale x 2 x half> %a to <vscale x 2 x i32> 193 ret <vscale x 2 x i32> %res 194} 195 196define <vscale x 2 x i32> @fcvtzs_s_nxv2f32(<vscale x 2 x float> %a) { 197; CHECK-LABEL: fcvtzs_s_nxv2f32: 198; CHECK: // %bb.0: 199; CHECK-NEXT: ptrue p0.d 200; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s 201; CHECK-NEXT: ret 202 %res = fptosi <vscale x 2 x float> %a to <vscale x 2 x i32> 203 ret <vscale x 2 x i32> %res 204} 205 206define <vscale x 2 x i32> @fcvtzs_s_nxv2f64(<vscale x 2 x double> %a) { 207; CHECK-LABEL: fcvtzs_s_nxv2f64: 208; CHECK: // %bb.0: 209; CHECK-NEXT: ptrue p0.d 210; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d 211; CHECK-NEXT: ret 212 %res = fptosi <vscale x 2 x double> %a to <vscale x 2 x i32> 213 ret <vscale x 2 x i32> %res 214} 215 216define <vscale x 4 x i32> @fcvtzs_s_nxv4f16(<vscale x 4 x half> %a) { 217; CHECK-LABEL: fcvtzs_s_nxv4f16: 218; CHECK: // %bb.0: 219; CHECK-NEXT: ptrue p0.s 220; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h 221; CHECK-NEXT: ret 222 %res = fptosi <vscale x 4 x half> %a to <vscale x 4 x i32> 223 ret <vscale x 4 x i32> %res 224} 225 226define <vscale x 3 x i32> @fcvtzs_s_nxv3f16(<vscale x 3 x half> %a) { 227; CHECK-LABEL: fcvtzs_s_nxv3f16: 228; CHECK: // %bb.0: 229; CHECK-NEXT: ptrue p0.s 230; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h 231; CHECK-NEXT: ret 232 %res = fptosi <vscale x 3 x half> %a to <vscale x 3 x i32> 233 ret <vscale x 3 x i32> %res 234} 235 236define <vscale x 4 x i32> @fcvtzs_s_nxv4f32(<vscale x 4 x float> %a) { 237; CHECK-LABEL: fcvtzs_s_nxv4f32: 238; CHECK: // %bb.0: 239; CHECK-NEXT: ptrue p0.s 240; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s 241; CHECK-NEXT: ret 242 %res = fptosi <vscale x 4 x float> %a to <vscale x 4 x i32> 243 ret <vscale x 4 x i32> %res 244} 245 246define <vscale x 2 x i64> @fcvtzs_d_nxv2f16(<vscale x 2 x half> %a) { 247; CHECK-LABEL: fcvtzs_d_nxv2f16: 248; CHECK: // %bb.0: 249; CHECK-NEXT: ptrue p0.d 250; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h 251; CHECK-NEXT: ret 252 %res = fptosi <vscale x 2 x half> %a to <vscale x 2 x i64> 253 ret <vscale x 2 x i64> %res 254} 255 256define <vscale x 2 x i64> @fcvtzs_d_nxv2f32(<vscale x 2 x float> %a) { 257; CHECK-LABEL: fcvtzs_d_nxv2f32: 258; CHECK: // %bb.0: 259; CHECK-NEXT: ptrue p0.d 260; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s 261; CHECK-NEXT: ret 262 %res = fptosi <vscale x 2 x float> %a to <vscale x 2 x i64> 263 ret <vscale x 2 x i64> %res 264} 265 266define <vscale x 2 x i64> @fcvtzs_d_nxv2f64(<vscale x 2 x double> %a) { 267; CHECK-LABEL: fcvtzs_d_nxv2f64: 268; CHECK: // %bb.0: 269; CHECK-NEXT: ptrue p0.d 270; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d 271; CHECK-NEXT: ret 272 %res = fptosi <vscale x 2 x double> %a to <vscale x 2 x i64> 273 ret <vscale x 2 x i64> %res 274} 275 276; 277; FP_TO_UINT 278; 279 280; NOTE: Using fcvtzs is safe as fptoui overflow is considered poison and a 281; 64bit signed value encompasses the entire range of a 16bit unsigned value 282define <vscale x 2 x i16> @fcvtzu_h_nxv2f16(<vscale x 2 x half> %a) { 283; CHECK-LABEL: fcvtzu_h_nxv2f16: 284; CHECK: // %bb.0: 285; CHECK-NEXT: ptrue p0.d 286; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h 287; CHECK-NEXT: ret 288 %res = fptoui <vscale x 2 x half> %a to <vscale x 2 x i16> 289 ret <vscale x 2 x i16> %res 290} 291 292define <vscale x 2 x i16> @fcvtzu_h_nxv2f32(<vscale x 2 x float> %a) { 293; CHECK-LABEL: fcvtzu_h_nxv2f32: 294; CHECK: // %bb.0: 295; CHECK-NEXT: ptrue p0.d 296; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s 297; CHECK-NEXT: ret 298 %res = fptoui <vscale x 2 x float> %a to <vscale x 2 x i16> 299 ret <vscale x 2 x i16> %res 300} 301 302define <vscale x 2 x i16> @fcvtzu_h_nxv2f64(<vscale x 2 x double> %a) { 303; CHECK-LABEL: fcvtzu_h_nxv2f64: 304; CHECK: // %bb.0: 305; CHECK-NEXT: ptrue p0.d 306; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d 307; CHECK-NEXT: ret 308 %res = fptoui <vscale x 2 x double> %a to <vscale x 2 x i16> 309 ret <vscale x 2 x i16> %res 310} 311 312define <vscale x 4 x i16> @fcvtzu_h_nxv4f16(<vscale x 4 x half> %a) { 313; CHECK-LABEL: fcvtzu_h_nxv4f16: 314; CHECK: // %bb.0: 315; CHECK-NEXT: ptrue p0.s 316; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.h 317; CHECK-NEXT: ret 318 %res = fptoui <vscale x 4 x half> %a to <vscale x 4 x i16> 319 ret <vscale x 4 x i16> %res 320} 321 322define <vscale x 4 x i16> @fcvtzu_h_nxv4f32(<vscale x 4 x float> %a) { 323; CHECK-LABEL: fcvtzu_h_nxv4f32: 324; CHECK: // %bb.0: 325; CHECK-NEXT: ptrue p0.s 326; CHECK-NEXT: fcvtzs z0.s, p0/m, z0.s 327; CHECK-NEXT: ret 328 %res = fptosi <vscale x 4 x float> %a to <vscale x 4 x i16> 329 ret <vscale x 4 x i16> %res 330} 331 332define <vscale x 7 x i16> @fcvtzu_h_nxv7f16(<vscale x 7 x half> %a) { 333; CHECK-LABEL: fcvtzu_h_nxv7f16: 334; CHECK: // %bb.0: 335; CHECK-NEXT: ptrue p0.h 336; CHECK-NEXT: fcvtzu z0.h, p0/m, z0.h 337; CHECK-NEXT: ret 338 %res = fptoui <vscale x 7 x half> %a to <vscale x 7 x i16> 339 ret <vscale x 7 x i16> %res 340} 341 342define <vscale x 8 x i16> @fcvtzu_h_nxv8f16(<vscale x 8 x half> %a) { 343; CHECK-LABEL: fcvtzu_h_nxv8f16: 344; CHECK: // %bb.0: 345; CHECK-NEXT: ptrue p0.h 346; CHECK-NEXT: fcvtzu z0.h, p0/m, z0.h 347; CHECK-NEXT: ret 348 %res = fptoui <vscale x 8 x half> %a to <vscale x 8 x i16> 349 ret <vscale x 8 x i16> %res 350} 351 352define <vscale x 2 x i32> @fcvtzu_s_nxv2f16(<vscale x 2 x half> %a) { 353; CHECK-LABEL: fcvtzu_s_nxv2f16: 354; CHECK: // %bb.0: 355; CHECK-NEXT: ptrue p0.d 356; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.h 357; CHECK-NEXT: ret 358 %res = fptoui <vscale x 2 x half> %a to <vscale x 2 x i32> 359 ret <vscale x 2 x i32> %res 360} 361 362define <vscale x 2 x i32> @fcvtzu_s_nxv2f32(<vscale x 2 x float> %a) { 363; CHECK-LABEL: fcvtzu_s_nxv2f32: 364; CHECK: // %bb.0: 365; CHECK-NEXT: ptrue p0.d 366; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.s 367; CHECK-NEXT: ret 368 %res = fptoui <vscale x 2 x float> %a to <vscale x 2 x i32> 369 ret <vscale x 2 x i32> %res 370} 371 372define <vscale x 2 x i32> @fcvtzu_s_nxv2f64(<vscale x 2 x double> %a) { 373; CHECK-LABEL: fcvtzu_s_nxv2f64: 374; CHECK: // %bb.0: 375; CHECK-NEXT: ptrue p0.d 376; CHECK-NEXT: fcvtzs z0.d, p0/m, z0.d 377; CHECK-NEXT: ret 378 %res = fptoui <vscale x 2 x double> %a to <vscale x 2 x i32> 379 ret <vscale x 2 x i32> %res 380} 381 382define <vscale x 3 x i32> @fcvtzu_s_nxv3f16(<vscale x 3 x half> %a) { 383; CHECK-LABEL: fcvtzu_s_nxv3f16: 384; CHECK: // %bb.0: 385; CHECK-NEXT: ptrue p0.s 386; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h 387; CHECK-NEXT: ret 388 %res = fptoui <vscale x 3 x half> %a to <vscale x 3 x i32> 389 ret <vscale x 3 x i32> %res 390} 391 392define <vscale x 3 x i32> @fcvtzu_s_nxv3f32(<vscale x 3 x float> %a) { 393; CHECK-LABEL: fcvtzu_s_nxv3f32: 394; CHECK: // %bb.0: 395; CHECK-NEXT: ptrue p0.s 396; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s 397; CHECK-NEXT: ret 398 %res = fptoui <vscale x 3 x float> %a to <vscale x 3 x i32> 399 ret <vscale x 3 x i32> %res 400} 401 402define <vscale x 4 x i32> @fcvtzu_s_nxv4f16(<vscale x 4 x half> %a) { 403; CHECK-LABEL: fcvtzu_s_nxv4f16: 404; CHECK: // %bb.0: 405; CHECK-NEXT: ptrue p0.s 406; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.h 407; CHECK-NEXT: ret 408 %res = fptoui <vscale x 4 x half> %a to <vscale x 4 x i32> 409 ret <vscale x 4 x i32> %res 410} 411 412define <vscale x 4 x i32> @fcvtzu_s_nxv4f32(<vscale x 4 x float> %a) { 413; CHECK-LABEL: fcvtzu_s_nxv4f32: 414; CHECK: // %bb.0: 415; CHECK-NEXT: ptrue p0.s 416; CHECK-NEXT: fcvtzu z0.s, p0/m, z0.s 417; CHECK-NEXT: ret 418 %res = fptoui <vscale x 4 x float> %a to <vscale x 4 x i32> 419 ret <vscale x 4 x i32> %res 420} 421 422define <vscale x 2 x i64> @fcvtzu_d_nxv2f16(<vscale x 2 x half> %a) { 423; CHECK-LABEL: fcvtzu_d_nxv2f16: 424; CHECK: // %bb.0: 425; CHECK-NEXT: ptrue p0.d 426; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.h 427; CHECK-NEXT: ret 428 %res = fptoui <vscale x 2 x half> %a to <vscale x 2 x i64> 429 ret <vscale x 2 x i64> %res 430} 431 432define <vscale x 2 x i64> @fcvtzu_d_nxv2f32(<vscale x 2 x float> %a) { 433; CHECK-LABEL: fcvtzu_d_nxv2f32: 434; CHECK: // %bb.0: 435; CHECK-NEXT: ptrue p0.d 436; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.s 437; CHECK-NEXT: ret 438 %res = fptoui <vscale x 2 x float> %a to <vscale x 2 x i64> 439 ret <vscale x 2 x i64> %res 440} 441 442define <vscale x 2 x i64> @fcvtzu_d_nxv2f64(<vscale x 2 x double> %a) { 443; CHECK-LABEL: fcvtzu_d_nxv2f64: 444; CHECK: // %bb.0: 445; CHECK-NEXT: ptrue p0.d 446; CHECK-NEXT: fcvtzu z0.d, p0/m, z0.d 447; CHECK-NEXT: ret 448 %res = fptoui <vscale x 2 x double> %a to <vscale x 2 x i64> 449 ret <vscale x 2 x i64> %res 450} 451 452; SINT_TO_FP 453 454define <vscale x 2 x half> @scvtf_h_nxv2i1(<vscale x 2 x i1> %a) { 455; CHECK-LABEL: scvtf_h_nxv2i1: 456; CHECK: // %bb.0: 457; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff 458; CHECK-NEXT: ptrue p0.d 459; CHECK-NEXT: scvtf z0.h, p0/m, z0.d 460; CHECK-NEXT: ret 461 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x half> 462 ret <vscale x 2 x half> %res 463} 464 465define <vscale x 2 x half> @scvtf_h_nxv2i16(<vscale x 2 x i16> %a) { 466; CHECK-LABEL: scvtf_h_nxv2i16: 467; CHECK: // %bb.0: 468; CHECK-NEXT: ptrue p0.d 469; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 470; CHECK-NEXT: ret 471 %res = sitofp <vscale x 2 x i16> %a to <vscale x 2 x half> 472 ret <vscale x 2 x half> %res 473} 474 475define <vscale x 2 x half> @scvtf_h_nxv2i32(<vscale x 2 x i32> %a) { 476; CHECK-LABEL: scvtf_h_nxv2i32: 477; CHECK: // %bb.0: 478; CHECK-NEXT: ptrue p0.d 479; CHECK-NEXT: scvtf z0.h, p0/m, z0.s 480; CHECK-NEXT: ret 481 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x half> 482 ret <vscale x 2 x half> %res 483} 484 485define <vscale x 2 x half> @scvtf_h_nxv2i64(<vscale x 2 x i64> %a) { 486; CHECK-LABEL: scvtf_h_nxv2i64: 487; CHECK: // %bb.0: 488; CHECK-NEXT: ptrue p0.d 489; CHECK-NEXT: scvtf z0.h, p0/m, z0.d 490; CHECK-NEXT: ret 491 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x half> 492 ret <vscale x 2 x half> %res 493} 494 495define <vscale x 3 x half> @scvtf_h_nxv3i1(<vscale x 3 x i1> %a) { 496; CHECK-LABEL: scvtf_h_nxv3i1: 497; CHECK: // %bb.0: 498; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 499; CHECK-NEXT: ptrue p0.s 500; CHECK-NEXT: scvtf z0.h, p0/m, z0.s 501; CHECK-NEXT: ret 502 %res = sitofp <vscale x 3 x i1> %a to <vscale x 3 x half> 503 ret <vscale x 3 x half> %res 504} 505 506define <vscale x 3 x half> @scvtf_h_nxv3i16(<vscale x 3 x i16> %a) { 507; CHECK-LABEL: scvtf_h_nxv3i16: 508; CHECK: // %bb.0: 509; CHECK-NEXT: ptrue p0.s 510; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 511; CHECK-NEXT: ret 512 %res = sitofp <vscale x 3 x i16> %a to <vscale x 3 x half> 513 ret <vscale x 3 x half> %res 514} 515 516define <vscale x 4 x half> @scvtf_h_nxv4i1(<vscale x 4 x i1> %a) { 517; CHECK-LABEL: scvtf_h_nxv4i1: 518; CHECK: // %bb.0: 519; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 520; CHECK-NEXT: ptrue p0.s 521; CHECK-NEXT: scvtf z0.h, p0/m, z0.s 522; CHECK-NEXT: ret 523 %res = sitofp <vscale x 4 x i1> %a to <vscale x 4 x half> 524 ret <vscale x 4 x half> %res 525} 526 527define <vscale x 4 x half> @scvtf_h_nxv4i16(<vscale x 4 x i16> %a) { 528; CHECK-LABEL: scvtf_h_nxv4i16: 529; CHECK: // %bb.0: 530; CHECK-NEXT: ptrue p0.s 531; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 532; CHECK-NEXT: ret 533 %res = sitofp <vscale x 4 x i16> %a to <vscale x 4 x half> 534 ret <vscale x 4 x half> %res 535} 536 537define <vscale x 4 x half> @scvtf_h_nxv4i32(<vscale x 4 x i32> %a) { 538; CHECK-LABEL: scvtf_h_nxv4i32: 539; CHECK: // %bb.0: 540; CHECK-NEXT: ptrue p0.s 541; CHECK-NEXT: scvtf z0.h, p0/m, z0.s 542; CHECK-NEXT: ret 543 %res = sitofp <vscale x 4 x i32> %a to <vscale x 4 x half> 544 ret <vscale x 4 x half> %res 545} 546 547define <vscale x 7 x half> @scvtf_h_nxv7i1(<vscale x 7 x i1> %a) { 548; CHECK-LABEL: scvtf_h_nxv7i1: 549; CHECK: // %bb.0: 550; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff 551; CHECK-NEXT: ptrue p0.h 552; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 553; CHECK-NEXT: ret 554 %res = sitofp <vscale x 7 x i1> %a to <vscale x 7 x half> 555 ret <vscale x 7 x half> %res 556} 557 558define <vscale x 7 x half> @scvtf_h_nxv7i16(<vscale x 7 x i16> %a) { 559; CHECK-LABEL: scvtf_h_nxv7i16: 560; CHECK: // %bb.0: 561; CHECK-NEXT: ptrue p0.h 562; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 563; CHECK-NEXT: ret 564 %res = sitofp <vscale x 7 x i16> %a to <vscale x 7 x half> 565 ret <vscale x 7 x half> %res 566} 567 568define <vscale x 8 x half> @scvtf_h_nxv8i1(<vscale x 8 x i1> %a) { 569; CHECK-LABEL: scvtf_h_nxv8i1: 570; CHECK: // %bb.0: 571; CHECK-NEXT: mov z0.h, p0/z, #-1 // =0xffffffffffffffff 572; CHECK-NEXT: ptrue p0.h 573; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 574; CHECK-NEXT: ret 575 %res = sitofp <vscale x 8 x i1> %a to <vscale x 8 x half> 576 ret <vscale x 8 x half> %res 577} 578 579define <vscale x 8 x half> @scvtf_h_nxv8i16(<vscale x 8 x i16> %a) { 580; CHECK-LABEL: scvtf_h_nxv8i16: 581; CHECK: // %bb.0: 582; CHECK-NEXT: ptrue p0.h 583; CHECK-NEXT: scvtf z0.h, p0/m, z0.h 584; CHECK-NEXT: ret 585 %res = sitofp <vscale x 8 x i16> %a to <vscale x 8 x half> 586 ret <vscale x 8 x half> %res 587} 588 589define <vscale x 2 x float> @scvtf_s_nxv2i1(<vscale x 2 x i1> %a) { 590; CHECK-LABEL: scvtf_s_nxv2i1: 591; CHECK: // %bb.0: 592; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff 593; CHECK-NEXT: ptrue p0.d 594; CHECK-NEXT: scvtf z0.s, p0/m, z0.d 595; CHECK-NEXT: ret 596 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x float> 597 ret <vscale x 2 x float> %res 598} 599 600define <vscale x 2 x float> @scvtf_s_nxv2i32(<vscale x 2 x i32> %a) { 601; CHECK-LABEL: scvtf_s_nxv2i32: 602; CHECK: // %bb.0: 603; CHECK-NEXT: ptrue p0.d 604; CHECK-NEXT: scvtf z0.s, p0/m, z0.s 605; CHECK-NEXT: ret 606 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x float> 607 ret <vscale x 2 x float> %res 608} 609 610define <vscale x 2 x float> @scvtf_s_nxv2i64(<vscale x 2 x i64> %a) { 611; CHECK-LABEL: scvtf_s_nxv2i64: 612; CHECK: // %bb.0: 613; CHECK-NEXT: ptrue p0.d 614; CHECK-NEXT: scvtf z0.s, p0/m, z0.d 615; CHECK-NEXT: ret 616 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x float> 617 ret <vscale x 2 x float> %res 618} 619 620define <vscale x 3 x float> @scvtf_s_nxv3i1(<vscale x 3 x i1> %a) { 621; CHECK-LABEL: scvtf_s_nxv3i1: 622; CHECK: // %bb.0: 623; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 624; CHECK-NEXT: ptrue p0.s 625; CHECK-NEXT: scvtf z0.s, p0/m, z0.s 626; CHECK-NEXT: ret 627 %res = sitofp <vscale x 3 x i1> %a to <vscale x 3 x float> 628 ret <vscale x 3 x float> %res 629} 630 631define <vscale x 3 x float> @scvtf_s_nxv3i32(<vscale x 3 x i32> %a) { 632; CHECK-LABEL: scvtf_s_nxv3i32: 633; CHECK: // %bb.0: 634; CHECK-NEXT: ptrue p0.s 635; CHECK-NEXT: scvtf z0.s, p0/m, z0.s 636; CHECK-NEXT: ret 637 %res = sitofp <vscale x 3 x i32> %a to <vscale x 3 x float> 638 ret <vscale x 3 x float> %res 639} 640 641define <vscale x 4 x float> @scvtf_s_nxv4i1(<vscale x 4 x i1> %a) { 642; CHECK-LABEL: scvtf_s_nxv4i1: 643; CHECK: // %bb.0: 644; CHECK-NEXT: mov z0.s, p0/z, #-1 // =0xffffffffffffffff 645; CHECK-NEXT: ptrue p0.s 646; CHECK-NEXT: scvtf z0.s, p0/m, z0.s 647; CHECK-NEXT: ret 648 %res = sitofp <vscale x 4 x i1> %a to <vscale x 4 x float> 649 ret <vscale x 4 x float> %res 650} 651 652define <vscale x 4 x float> @scvtf_s_nxv4i32(<vscale x 4 x i32> %a) { 653; CHECK-LABEL: scvtf_s_nxv4i32: 654; CHECK: // %bb.0: 655; CHECK-NEXT: ptrue p0.s 656; CHECK-NEXT: scvtf z0.s, p0/m, z0.s 657; CHECK-NEXT: ret 658 %res = sitofp <vscale x 4 x i32> %a to <vscale x 4 x float> 659 ret <vscale x 4 x float> %res 660} 661 662define <vscale x 2 x double> @scvtf_d_nxv2i1(<vscale x 2 x i1> %a) { 663; CHECK-LABEL: scvtf_d_nxv2i1: 664; CHECK: // %bb.0: 665; CHECK-NEXT: mov z0.d, p0/z, #-1 // =0xffffffffffffffff 666; CHECK-NEXT: ptrue p0.d 667; CHECK-NEXT: scvtf z0.d, p0/m, z0.d 668; CHECK-NEXT: ret 669 %res = sitofp <vscale x 2 x i1> %a to <vscale x 2 x double> 670 ret <vscale x 2 x double> %res 671} 672 673define <vscale x 2 x double> @scvtf_d_nxv2i32(<vscale x 2 x i32> %a) { 674; CHECK-LABEL: scvtf_d_nxv2i32: 675; CHECK: // %bb.0: 676; CHECK-NEXT: ptrue p0.d 677; CHECK-NEXT: scvtf z0.d, p0/m, z0.s 678; CHECK-NEXT: ret 679 %res = sitofp <vscale x 2 x i32> %a to <vscale x 2 x double> 680 ret <vscale x 2 x double> %res 681} 682 683define <vscale x 2 x double> @scvtf_d_nxv2i64(<vscale x 2 x i64> %a) { 684; CHECK-LABEL: scvtf_d_nxv2i64: 685; CHECK: // %bb.0: 686; CHECK-NEXT: ptrue p0.d 687; CHECK-NEXT: scvtf z0.d, p0/m, z0.d 688; CHECK-NEXT: ret 689 %res = sitofp <vscale x 2 x i64> %a to <vscale x 2 x double> 690 ret <vscale x 2 x double> %res 691} 692 693; UINT_TO_FP 694 695define <vscale x 2 x half> @ucvtf_h_nxv2i1(<vscale x 2 x i1> %a) { 696; CHECK-LABEL: ucvtf_h_nxv2i1: 697; CHECK: // %bb.0: 698; CHECK-NEXT: mov z0.d, p0/z, #1 // =0x1 699; CHECK-NEXT: ptrue p0.d 700; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d 701; CHECK-NEXT: ret 702 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x half> 703 ret <vscale x 2 x half> %res 704} 705 706define <vscale x 2 x half> @ucvtf_h_nxv2i16(<vscale x 2 x i16> %a) { 707; CHECK-LABEL: ucvtf_h_nxv2i16: 708; CHECK: // %bb.0: 709; CHECK-NEXT: ptrue p0.d 710; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h 711; CHECK-NEXT: ret 712 %res = uitofp <vscale x 2 x i16> %a to <vscale x 2 x half> 713 ret <vscale x 2 x half> %res 714} 715 716define <vscale x 2 x half> @ucvtf_h_nxv2i32(<vscale x 2 x i32> %a) { 717; CHECK-LABEL: ucvtf_h_nxv2i32: 718; CHECK: // %bb.0: 719; CHECK-NEXT: ptrue p0.d 720; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s 721; CHECK-NEXT: ret 722 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x half> 723 ret <vscale x 2 x half> %res 724} 725 726define <vscale x 2 x half> @ucvtf_h_nxv2i64(<vscale x 2 x i64> %a) { 727; CHECK-LABEL: ucvtf_h_nxv2i64: 728; CHECK: // %bb.0: 729; CHECK-NEXT: ptrue p0.d 730; CHECK-NEXT: ucvtf z0.h, p0/m, z0.d 731; CHECK-NEXT: ret 732 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x half> 733 ret <vscale x 2 x half> %res 734} 735 736define <vscale x 3 x half> @ucvtf_h_nxv3i1(<vscale x 3 x i1> %a) { 737; CHECK-LABEL: ucvtf_h_nxv3i1: 738; CHECK: // %bb.0: 739; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1 740; CHECK-NEXT: ptrue p0.s 741; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s 742; CHECK-NEXT: ret 743 %res = uitofp <vscale x 3 x i1> %a to <vscale x 3 x half> 744 ret <vscale x 3 x half> %res 745} 746 747define <vscale x 3 x half> @ucvtf_h_nxv3i16(<vscale x 3 x i16> %a) { 748; CHECK-LABEL: ucvtf_h_nxv3i16: 749; CHECK: // %bb.0: 750; CHECK-NEXT: ptrue p0.s 751; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h 752; CHECK-NEXT: ret 753 %res = uitofp <vscale x 3 x i16> %a to <vscale x 3 x half> 754 ret <vscale x 3 x half> %res 755} 756 757define <vscale x 3 x half> @ucvtf_h_nxv3i32(<vscale x 3 x i32> %a) { 758; CHECK-LABEL: ucvtf_h_nxv3i32: 759; CHECK: // %bb.0: 760; CHECK-NEXT: ptrue p0.s 761; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s 762; CHECK-NEXT: ret 763 %res = uitofp <vscale x 3 x i32> %a to <vscale x 3 x half> 764 ret <vscale x 3 x half> %res 765} 766 767define <vscale x 4 x half> @ucvtf_h_nxv4i1(<vscale x 4 x i1> %a) { 768; CHECK-LABEL: ucvtf_h_nxv4i1: 769; CHECK: // %bb.0: 770; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1 771; CHECK-NEXT: ptrue p0.s 772; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s 773; CHECK-NEXT: ret 774 %res = uitofp <vscale x 4 x i1> %a to <vscale x 4 x half> 775 ret <vscale x 4 x half> %res 776} 777 778define <vscale x 4 x half> @ucvtf_h_nxv4i16(<vscale x 4 x i16> %a) { 779; CHECK-LABEL: ucvtf_h_nxv4i16: 780; CHECK: // %bb.0: 781; CHECK-NEXT: ptrue p0.s 782; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h 783; CHECK-NEXT: ret 784 %res = uitofp <vscale x 4 x i16> %a to <vscale x 4 x half> 785 ret <vscale x 4 x half> %res 786} 787 788define <vscale x 4 x half> @ucvtf_h_nxv4i32(<vscale x 4 x i32> %a) { 789; CHECK-LABEL: ucvtf_h_nxv4i32: 790; CHECK: // %bb.0: 791; CHECK-NEXT: ptrue p0.s 792; CHECK-NEXT: ucvtf z0.h, p0/m, z0.s 793; CHECK-NEXT: ret 794 %res = uitofp <vscale x 4 x i32> %a to <vscale x 4 x half> 795 ret <vscale x 4 x half> %res 796} 797 798define <vscale x 8 x half> @ucvtf_h_nxv8i1(<vscale x 8 x i1> %a) { 799; CHECK-LABEL: ucvtf_h_nxv8i1: 800; CHECK: // %bb.0: 801; CHECK-NEXT: mov z0.h, p0/z, #1 // =0x1 802; CHECK-NEXT: ptrue p0.h 803; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h 804; CHECK-NEXT: ret 805 %res = uitofp <vscale x 8 x i1> %a to <vscale x 8 x half> 806 ret <vscale x 8 x half> %res 807} 808 809define <vscale x 8 x half> @ucvtf_h_nxv8i16(<vscale x 8 x i16> %a) { 810; CHECK-LABEL: ucvtf_h_nxv8i16: 811; CHECK: // %bb.0: 812; CHECK-NEXT: ptrue p0.h 813; CHECK-NEXT: ucvtf z0.h, p0/m, z0.h 814; CHECK-NEXT: ret 815 %res = uitofp <vscale x 8 x i16> %a to <vscale x 8 x half> 816 ret <vscale x 8 x half> %res 817} 818 819define <vscale x 2 x float> @ucvtf_s_nxv2i1(<vscale x 2 x i1> %a) { 820; CHECK-LABEL: ucvtf_s_nxv2i1: 821; CHECK: // %bb.0: 822; CHECK-NEXT: mov z0.d, p0/z, #1 // =0x1 823; CHECK-NEXT: ptrue p0.d 824; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d 825; CHECK-NEXT: ret 826 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x float> 827 ret <vscale x 2 x float> %res 828} 829 830define <vscale x 2 x float> @ucvtf_s_nxv2i32(<vscale x 2 x i32> %a) { 831; CHECK-LABEL: ucvtf_s_nxv2i32: 832; CHECK: // %bb.0: 833; CHECK-NEXT: ptrue p0.d 834; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s 835; CHECK-NEXT: ret 836 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x float> 837 ret <vscale x 2 x float> %res 838} 839 840define <vscale x 2 x float> @ucvtf_s_nxv2i64(<vscale x 2 x i64> %a) { 841; CHECK-LABEL: ucvtf_s_nxv2i64: 842; CHECK: // %bb.0: 843; CHECK-NEXT: ptrue p0.d 844; CHECK-NEXT: ucvtf z0.s, p0/m, z0.d 845; CHECK-NEXT: ret 846 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x float> 847 ret <vscale x 2 x float> %res 848} 849 850define <vscale x 4 x float> @ucvtf_s_nxv4i1(<vscale x 4 x i1> %a) { 851; CHECK-LABEL: ucvtf_s_nxv4i1: 852; CHECK: // %bb.0: 853; CHECK-NEXT: mov z0.s, p0/z, #1 // =0x1 854; CHECK-NEXT: ptrue p0.s 855; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s 856; CHECK-NEXT: ret 857 %res = uitofp <vscale x 4 x i1> %a to <vscale x 4 x float> 858 ret <vscale x 4 x float> %res 859} 860 861define <vscale x 4 x float> @ucvtf_s_nxv4i32(<vscale x 4 x i32> %a) { 862; CHECK-LABEL: ucvtf_s_nxv4i32: 863; CHECK: // %bb.0: 864; CHECK-NEXT: ptrue p0.s 865; CHECK-NEXT: ucvtf z0.s, p0/m, z0.s 866; CHECK-NEXT: ret 867 %res = uitofp <vscale x 4 x i32> %a to <vscale x 4 x float> 868 ret <vscale x 4 x float> %res 869} 870 871define <vscale x 2 x double> @ucvtf_d_nxv2i1(<vscale x 2 x i1> %a) { 872; CHECK-LABEL: ucvtf_d_nxv2i1: 873; CHECK: // %bb.0: 874; CHECK-NEXT: mov z0.d, p0/z, #1 // =0x1 875; CHECK-NEXT: ptrue p0.d 876; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d 877; CHECK-NEXT: ret 878 %res = uitofp <vscale x 2 x i1> %a to <vscale x 2 x double> 879 ret <vscale x 2 x double> %res 880} 881 882define <vscale x 2 x double> @ucvtf_d_nxv2i32(<vscale x 2 x i32> %a) { 883; CHECK-LABEL: ucvtf_d_nxv2i32: 884; CHECK: // %bb.0: 885; CHECK-NEXT: ptrue p0.d 886; CHECK-NEXT: ucvtf z0.d, p0/m, z0.s 887; CHECK-NEXT: ret 888 %res = uitofp <vscale x 2 x i32> %a to <vscale x 2 x double> 889 ret <vscale x 2 x double> %res 890} 891 892define <vscale x 2 x double> @ucvtf_d_nxv2i64(<vscale x 2 x i64> %a) { 893; CHECK-LABEL: ucvtf_d_nxv2i64: 894; CHECK: // %bb.0: 895; CHECK-NEXT: ptrue p0.d 896; CHECK-NEXT: ucvtf z0.d, p0/m, z0.d 897; CHECK-NEXT: ret 898 %res = uitofp <vscale x 2 x i64> %a to <vscale x 2 x double> 899 ret <vscale x 2 x double> %res 900} 901 902define <vscale x 4 x float> @fcvt_htos_movprfx(<vscale x 4 x half> %a, <vscale x 4 x half> %b) { 903; CHECK-LABEL: fcvt_htos_movprfx: 904; CHECK: // %bb.0: 905; CHECK-NEXT: ptrue p0.s 906; CHECK-NEXT: movprfx z0, z1 907; CHECK-NEXT: fcvt z0.s, p0/m, z1.h 908; CHECK-NEXT: ret 909 %res = fpext <vscale x 4 x half> %b to <vscale x 4 x float> 910 ret <vscale x 4 x float> %res 911} 912 913define <vscale x 2 x double> @fcvt_htod_movprfx(<vscale x 2 x half> %a, <vscale x 2 x half> %b) { 914; CHECK-LABEL: fcvt_htod_movprfx: 915; CHECK: // %bb.0: 916; CHECK-NEXT: ptrue p0.d 917; CHECK-NEXT: movprfx z0, z1 918; CHECK-NEXT: fcvt z0.d, p0/m, z1.h 919; CHECK-NEXT: ret 920 %res = fpext <vscale x 2 x half> %b to <vscale x 2 x double> 921 ret <vscale x 2 x double> %res 922} 923 924define <vscale x 2 x double> @fcvt_stod_movprfx(<vscale x 2 x float> %a, <vscale x 2 x float> %b) { 925; CHECK-LABEL: fcvt_stod_movprfx: 926; CHECK: // %bb.0: 927; CHECK-NEXT: ptrue p0.d 928; CHECK-NEXT: movprfx z0, z1 929; CHECK-NEXT: fcvt z0.d, p0/m, z1.s 930; CHECK-NEXT: ret 931 %res = fpext <vscale x 2 x float> %b to <vscale x 2 x double> 932 ret <vscale x 2 x double> %res 933} 934 935define <vscale x 4 x half> @fcvt_stoh_movprfx(<vscale x 4 x float> %a, <vscale x 4 x float> %b) { 936; CHECK-LABEL: fcvt_stoh_movprfx: 937; CHECK: // %bb.0: 938; CHECK-NEXT: ptrue p0.s 939; CHECK-NEXT: movprfx z0, z1 940; CHECK-NEXT: fcvt z0.h, p0/m, z1.s 941; CHECK-NEXT: ret 942 %res = fptrunc <vscale x 4 x float> %b to <vscale x 4 x half> 943 ret <vscale x 4 x half> %res 944} 945 946define <vscale x 2 x half> @fcvt_dtoh_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) { 947; CHECK-LABEL: fcvt_dtoh_movprfx: 948; CHECK: // %bb.0: 949; CHECK-NEXT: ptrue p0.d 950; CHECK-NEXT: movprfx z0, z1 951; CHECK-NEXT: fcvt z0.h, p0/m, z1.d 952; CHECK-NEXT: ret 953 %res = fptrunc <vscale x 2 x double> %b to <vscale x 2 x half> 954 ret <vscale x 2 x half> %res 955} 956 957define <vscale x 2 x float> @fcvt_dtos_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) { 958; CHECK-LABEL: fcvt_dtos_movprfx: 959; CHECK: // %bb.0: 960; CHECK-NEXT: ptrue p0.d 961; CHECK-NEXT: movprfx z0, z1 962; CHECK-NEXT: fcvt z0.s, p0/m, z1.d 963; CHECK-NEXT: ret 964 %res = fptrunc <vscale x 2 x double> %b to <vscale x 2 x float> 965 ret <vscale x 2 x float> %res 966} 967 968define <vscale x 8 x half> @scvtf_htoh_movprfx(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) { 969; CHECK-LABEL: scvtf_htoh_movprfx: 970; CHECK: // %bb.0: 971; CHECK-NEXT: ptrue p0.h 972; CHECK-NEXT: movprfx z0, z1 973; CHECK-NEXT: scvtf z0.h, p0/m, z1.h 974; CHECK-NEXT: ret 975 %res = sitofp <vscale x 8 x i16> %b to <vscale x 8 x half> 976 ret <vscale x 8 x half> %res 977} 978 979define <vscale x 4 x float> @scvtf_stos_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 980; CHECK-LABEL: scvtf_stos_movprfx: 981; CHECK: // %bb.0: 982; CHECK-NEXT: ptrue p0.s 983; CHECK-NEXT: movprfx z0, z1 984; CHECK-NEXT: scvtf z0.s, p0/m, z1.s 985; CHECK-NEXT: ret 986 %res = sitofp <vscale x 4 x i32> %b to <vscale x 4 x float> 987 ret <vscale x 4 x float> %res 988} 989 990define <vscale x 2 x double> @scvtf_stod_movprfx(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) { 991; CHECK-LABEL: scvtf_stod_movprfx: 992; CHECK: // %bb.0: 993; CHECK-NEXT: ptrue p0.d 994; CHECK-NEXT: movprfx z0, z1 995; CHECK-NEXT: scvtf z0.d, p0/m, z1.s 996; CHECK-NEXT: ret 997 %res = sitofp <vscale x 2 x i32> %b to <vscale x 2 x double> 998 ret <vscale x 2 x double> %res 999} 1000 1001define <vscale x 2 x float> @scvtf_dtos_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 1002; CHECK-LABEL: scvtf_dtos_movprfx: 1003; CHECK: // %bb.0: 1004; CHECK-NEXT: ptrue p0.d 1005; CHECK-NEXT: movprfx z0, z1 1006; CHECK-NEXT: scvtf z0.s, p0/m, z1.d 1007; CHECK-NEXT: ret 1008 %res = sitofp <vscale x 2 x i64> %b to <vscale x 2 x float> 1009 ret <vscale x 2 x float> %res 1010} 1011 1012define <vscale x 4 x half> @scvtf_stoh_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 1013; CHECK-LABEL: scvtf_stoh_movprfx: 1014; CHECK: // %bb.0: 1015; CHECK-NEXT: ptrue p0.s 1016; CHECK-NEXT: movprfx z0, z1 1017; CHECK-NEXT: scvtf z0.h, p0/m, z1.s 1018; CHECK-NEXT: ret 1019 %res = sitofp <vscale x 4 x i32> %b to <vscale x 4 x half> 1020 ret <vscale x 4 x half> %res 1021} 1022 1023define <vscale x 2 x half> @scvtf_dtoh_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 1024; CHECK-LABEL: scvtf_dtoh_movprfx: 1025; CHECK: // %bb.0: 1026; CHECK-NEXT: ptrue p0.d 1027; CHECK-NEXT: movprfx z0, z1 1028; CHECK-NEXT: scvtf z0.h, p0/m, z1.d 1029; CHECK-NEXT: ret 1030 %res = sitofp <vscale x 2 x i64> %b to <vscale x 2 x half> 1031 ret <vscale x 2 x half> %res 1032} 1033 1034define <vscale x 2 x double> @scvtf_dtod_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 1035; CHECK-LABEL: scvtf_dtod_movprfx: 1036; CHECK: // %bb.0: 1037; CHECK-NEXT: ptrue p0.d 1038; CHECK-NEXT: movprfx z0, z1 1039; CHECK-NEXT: scvtf z0.d, p0/m, z1.d 1040; CHECK-NEXT: ret 1041 %res = sitofp <vscale x 2 x i64> %b to <vscale x 2 x double> 1042 ret <vscale x 2 x double> %res 1043} 1044 1045define <vscale x 4 x float> @ucvtf_stos_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 1046; CHECK-LABEL: ucvtf_stos_movprfx: 1047; CHECK: // %bb.0: 1048; CHECK-NEXT: ptrue p0.s 1049; CHECK-NEXT: movprfx z0, z1 1050; CHECK-NEXT: ucvtf z0.s, p0/m, z1.s 1051; CHECK-NEXT: ret 1052 %res = uitofp <vscale x 4 x i32> %b to <vscale x 4 x float> 1053 ret <vscale x 4 x float> %res 1054} 1055 1056define <vscale x 8 x half> @ucvtf_htoh_movprfx(<vscale x 8 x i16> %a, <vscale x 8 x i16> %b) { 1057; CHECK-LABEL: ucvtf_htoh_movprfx: 1058; CHECK: // %bb.0: 1059; CHECK-NEXT: ptrue p0.h 1060; CHECK-NEXT: movprfx z0, z1 1061; CHECK-NEXT: ucvtf z0.h, p0/m, z1.h 1062; CHECK-NEXT: ret 1063 %res = uitofp <vscale x 8 x i16> %b to <vscale x 8 x half> 1064 ret <vscale x 8 x half> %res 1065} 1066 1067define <vscale x 2 x double> @ucvtf_stod_movprfx(<vscale x 2 x i32> %a, <vscale x 2 x i32> %b) { 1068; CHECK-LABEL: ucvtf_stod_movprfx: 1069; CHECK: // %bb.0: 1070; CHECK-NEXT: ptrue p0.d 1071; CHECK-NEXT: movprfx z0, z1 1072; CHECK-NEXT: ucvtf z0.d, p0/m, z1.s 1073; CHECK-NEXT: ret 1074 %res = uitofp <vscale x 2 x i32> %b to <vscale x 2 x double> 1075 ret <vscale x 2 x double> %res 1076} 1077 1078define <vscale x 4 x half> @ucvtf_stoh_movprfx(<vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 1079; CHECK-LABEL: ucvtf_stoh_movprfx: 1080; CHECK: // %bb.0: 1081; CHECK-NEXT: ptrue p0.s 1082; CHECK-NEXT: movprfx z0, z1 1083; CHECK-NEXT: ucvtf z0.h, p0/m, z1.s 1084; CHECK-NEXT: ret 1085 %res = uitofp <vscale x 4 x i32> %b to <vscale x 4 x half> 1086 ret <vscale x 4 x half> %res 1087} 1088 1089define <vscale x 2 x float> @ucvtf_dtos_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 1090; CHECK-LABEL: ucvtf_dtos_movprfx: 1091; CHECK: // %bb.0: 1092; CHECK-NEXT: ptrue p0.d 1093; CHECK-NEXT: movprfx z0, z1 1094; CHECK-NEXT: ucvtf z0.s, p0/m, z1.d 1095; CHECK-NEXT: ret 1096 %res = uitofp <vscale x 2 x i64> %b to <vscale x 2 x float> 1097 ret <vscale x 2 x float> %res 1098} 1099 1100define <vscale x 2 x half> @ucvtf_dtoh_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 1101; CHECK-LABEL: ucvtf_dtoh_movprfx: 1102; CHECK: // %bb.0: 1103; CHECK-NEXT: ptrue p0.d 1104; CHECK-NEXT: movprfx z0, z1 1105; CHECK-NEXT: ucvtf z0.h, p0/m, z1.d 1106; CHECK-NEXT: ret 1107 %res = uitofp <vscale x 2 x i64> %b to <vscale x 2 x half> 1108 ret <vscale x 2 x half> %res 1109} 1110 1111define <vscale x 2 x double> @ucvtf_dtod_movprfx(<vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 1112; CHECK-LABEL: ucvtf_dtod_movprfx: 1113; CHECK: // %bb.0: 1114; CHECK-NEXT: ptrue p0.d 1115; CHECK-NEXT: movprfx z0, z1 1116; CHECK-NEXT: ucvtf z0.d, p0/m, z1.d 1117; CHECK-NEXT: ret 1118 %res = uitofp <vscale x 2 x i64> %b to <vscale x 2 x double> 1119 ret <vscale x 2 x double> %res 1120} 1121 1122define <vscale x 8 x i16> @fcvtzs_htoh_movprfx(<vscale x 8 x half> %a, <vscale x 8 x half> %b) { 1123; CHECK-LABEL: fcvtzs_htoh_movprfx: 1124; CHECK: // %bb.0: 1125; CHECK-NEXT: ptrue p0.h 1126; CHECK-NEXT: movprfx z0, z1 1127; CHECK-NEXT: fcvtzs z0.h, p0/m, z1.h 1128; CHECK-NEXT: ret 1129 %res = fptosi <vscale x 8 x half> %b to <vscale x 8 x i16> 1130 ret <vscale x 8 x i16> %res 1131} 1132 1133define <vscale x 4 x i32> @fcvtzs_stos_movprfx(<vscale x 4 x float> %a, <vscale x 4 x float> %b) { 1134; CHECK-LABEL: fcvtzs_stos_movprfx: 1135; CHECK: // %bb.0: 1136; CHECK-NEXT: ptrue p0.s 1137; CHECK-NEXT: movprfx z0, z1 1138; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.s 1139; CHECK-NEXT: ret 1140 %res = fptosi <vscale x 4 x float> %b to <vscale x 4 x i32> 1141 ret <vscale x 4 x i32> %res 1142} 1143 1144define <vscale x 2 x i32> @fcvtzs_dtos_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) { 1145; CHECK-LABEL: fcvtzs_dtos_movprfx: 1146; CHECK: // %bb.0: 1147; CHECK-NEXT: ptrue p0.d 1148; CHECK-NEXT: movprfx z0, z1 1149; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d 1150; CHECK-NEXT: ret 1151 %res = fptosi <vscale x 2 x double> %b to <vscale x 2 x i32> 1152 ret <vscale x 2 x i32> %res 1153} 1154 1155define <vscale x 2 x i64> @fcvtzs_stod_movprfx(<vscale x 2 x float> %a, <vscale x 2 x float> %b) { 1156; CHECK-LABEL: fcvtzs_stod_movprfx: 1157; CHECK: // %bb.0: 1158; CHECK-NEXT: ptrue p0.d 1159; CHECK-NEXT: movprfx z0, z1 1160; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.s 1161; CHECK-NEXT: ret 1162 %res = fptosi <vscale x 2 x float> %b to <vscale x 2 x i64> 1163 ret <vscale x 2 x i64> %res 1164} 1165 1166define <vscale x 4 x i32> @fcvtzs_htos_movprfx(<vscale x 4 x half> %a, <vscale x 4 x half> %b) { 1167; CHECK-LABEL: fcvtzs_htos_movprfx: 1168; CHECK: // %bb.0: 1169; CHECK-NEXT: ptrue p0.s 1170; CHECK-NEXT: movprfx z0, z1 1171; CHECK-NEXT: fcvtzs z0.s, p0/m, z1.h 1172; CHECK-NEXT: ret 1173 %res = fptosi <vscale x 4 x half> %b to <vscale x 4 x i32> 1174 ret <vscale x 4 x i32> %res 1175} 1176 1177define <vscale x 2 x i64> @fcvtzs_htod_movprfx(<vscale x 2 x half> %a, <vscale x 2 x half> %b) { 1178; CHECK-LABEL: fcvtzs_htod_movprfx: 1179; CHECK: // %bb.0: 1180; CHECK-NEXT: ptrue p0.d 1181; CHECK-NEXT: movprfx z0, z1 1182; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.h 1183; CHECK-NEXT: ret 1184 %res = fptosi <vscale x 2 x half> %b to <vscale x 2 x i64> 1185 ret <vscale x 2 x i64> %res 1186} 1187 1188define <vscale x 2 x i64> @fcvtzs_dtod_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) { 1189; CHECK-LABEL: fcvtzs_dtod_movprfx: 1190; CHECK: // %bb.0: 1191; CHECK-NEXT: ptrue p0.d 1192; CHECK-NEXT: movprfx z0, z1 1193; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d 1194; CHECK-NEXT: ret 1195 %res = fptosi <vscale x 2 x double> %b to <vscale x 2 x i64> 1196 ret <vscale x 2 x i64> %res 1197} 1198 1199define <vscale x 8 x i16> @fcvtzu_htoh_movprfx(<vscale x 8 x half> %a, <vscale x 8 x half> %b) { 1200; CHECK-LABEL: fcvtzu_htoh_movprfx: 1201; CHECK: // %bb.0: 1202; CHECK-NEXT: ptrue p0.h 1203; CHECK-NEXT: movprfx z0, z1 1204; CHECK-NEXT: fcvtzu z0.h, p0/m, z1.h 1205; CHECK-NEXT: ret 1206 %res = fptoui <vscale x 8 x half> %b to <vscale x 8 x i16> 1207 ret <vscale x 8 x i16> %res 1208} 1209 1210define <vscale x 4 x i32> @fcvtzu_stos_movprfx(<vscale x 4 x float> %a, <vscale x 4 x float> %b) { 1211; CHECK-LABEL: fcvtzu_stos_movprfx: 1212; CHECK: // %bb.0: 1213; CHECK-NEXT: ptrue p0.s 1214; CHECK-NEXT: movprfx z0, z1 1215; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.s 1216; CHECK-NEXT: ret 1217 %res = fptoui <vscale x 4 x float> %b to <vscale x 4 x i32> 1218 ret <vscale x 4 x i32> %res 1219} 1220 1221define <vscale x 2 x i32> @fcvtzu_dtos_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) { 1222; CHECK-LABEL: fcvtzu_dtos_movprfx: 1223; CHECK: // %bb.0: 1224; CHECK-NEXT: ptrue p0.d 1225; CHECK-NEXT: movprfx z0, z1 1226; CHECK-NEXT: fcvtzs z0.d, p0/m, z1.d 1227; CHECK-NEXT: ret 1228 %res = fptoui <vscale x 2 x double> %b to <vscale x 2 x i32> 1229 ret <vscale x 2 x i32> %res 1230} 1231 1232define <vscale x 2 x i64> @fcvtzu_stod_movprfx(<vscale x 2 x float> %a, <vscale x 2 x float> %b) { 1233; CHECK-LABEL: fcvtzu_stod_movprfx: 1234; CHECK: // %bb.0: 1235; CHECK-NEXT: ptrue p0.d 1236; CHECK-NEXT: movprfx z0, z1 1237; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.s 1238; CHECK-NEXT: ret 1239 %res = fptoui <vscale x 2 x float> %b to <vscale x 2 x i64> 1240 ret <vscale x 2 x i64> %res 1241} 1242 1243define <vscale x 4 x i32> @fcvtzu_htos_movprfx(<vscale x 4 x half> %a, <vscale x 4 x half> %b) { 1244; CHECK-LABEL: fcvtzu_htos_movprfx: 1245; CHECK: // %bb.0: 1246; CHECK-NEXT: ptrue p0.s 1247; CHECK-NEXT: movprfx z0, z1 1248; CHECK-NEXT: fcvtzu z0.s, p0/m, z1.h 1249; CHECK-NEXT: ret 1250 %res = fptoui <vscale x 4 x half> %b to <vscale x 4 x i32> 1251 ret <vscale x 4 x i32> %res 1252} 1253 1254define <vscale x 2 x i64> @fcvtzu_htod_movprfx(<vscale x 2 x half> %a, <vscale x 2 x half> %b) { 1255; CHECK-LABEL: fcvtzu_htod_movprfx: 1256; CHECK: // %bb.0: 1257; CHECK-NEXT: ptrue p0.d 1258; CHECK-NEXT: movprfx z0, z1 1259; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.h 1260; CHECK-NEXT: ret 1261 %res = fptoui <vscale x 2 x half> %b to <vscale x 2 x i64> 1262 ret <vscale x 2 x i64> %res 1263} 1264 1265define <vscale x 2 x i64> @fcvtzu_dtod_movprfx(<vscale x 2 x double> %a, <vscale x 2 x double> %b) { 1266; CHECK-LABEL: fcvtzu_dtod_movprfx: 1267; CHECK: // %bb.0: 1268; CHECK-NEXT: ptrue p0.d 1269; CHECK-NEXT: movprfx z0, z1 1270; CHECK-NEXT: fcvtzu z0.d, p0/m, z1.d 1271; CHECK-NEXT: ret 1272 %res = fptoui <vscale x 2 x double> %b to <vscale x 2 x i64> 1273 ret <vscale x 2 x i64> %res 1274} 1275