1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -mattr=+sve < %s | FileCheck %s 3; RUN: llc -mattr=+sve2p2 < %s | FileCheck %s -check-prefix CHECK-2p2 4 5; RUN: llc -mattr=+sme -force-streaming < %s | FileCheck %s 6; RUN: llc -mattr=+sme2p2 -force-streaming < %s | FileCheck %s -check-prefix CHECK-2p2 7 8target triple = "aarch64-linux" 9 10define <vscale x 8 x i16> @test_svextb_s16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) { 11; CHECK-LABEL: test_svextb_s16_x_1: 12; CHECK: // %bb.0: // %entry 13; CHECK-NEXT: sxtb z0.h, p0/m, z0.h 14; CHECK-NEXT: ret 15; 16; CHECK-2p2-LABEL: test_svextb_s16_x_1: 17; CHECK-2p2: // %bb.0: // %entry 18; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z0.h 19; CHECK-2p2-NEXT: ret 20entry: 21 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 22 ret <vscale x 8 x i16> %0 23} 24 25define <vscale x 8 x i16> @test_svextb_s16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) { 26; CHECK-LABEL: test_svextb_s16_x_2: 27; CHECK: // %bb.0: // %entry 28; CHECK-NEXT: movprfx z0, z1 29; CHECK-NEXT: sxtb z0.h, p0/m, z1.h 30; CHECK-NEXT: ret 31; 32; CHECK-2p2-LABEL: test_svextb_s16_x_2: 33; CHECK-2p2: // %bb.0: // %entry 34; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z1.h 35; CHECK-2p2-NEXT: ret 36entry: 37 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 38 ret <vscale x 8 x i16> %0 39} 40 41define <vscale x 8 x i16> @test_svextb_s16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) { 42; CHECK-LABEL: test_svextb_s16_z: 43; CHECK: // %bb.0: // %entry 44; CHECK-NEXT: mov z0.h, #0 // =0x0 45; CHECK-NEXT: sxtb z0.h, p0/m, z1.h 46; CHECK-NEXT: ret 47; 48; CHECK-2p2-LABEL: test_svextb_s16_z: 49; CHECK-2p2: // %bb.0: // %entry 50; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z1.h 51; CHECK-2p2-NEXT: ret 52entry: 53 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 54 ret <vscale x 8 x i16> %0 55} 56 57define <vscale x 4 x i32> @test_svextb_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) { 58; CHECK-LABEL: test_svextb_s32_x_1: 59; CHECK: // %bb.0: // %entry 60; CHECK-NEXT: sxtb z0.s, p0/m, z0.s 61; CHECK-NEXT: ret 62; 63; CHECK-2p2-LABEL: test_svextb_s32_x_1: 64; CHECK-2p2: // %bb.0: // %entry 65; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z0.s 66; CHECK-2p2-NEXT: ret 67entry: 68 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 69 ret <vscale x 4 x i32> %0 70} 71 72define <vscale x 4 x i32> @test_svextb_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 73; CHECK-LABEL: test_svextb_s32_x_2: 74; CHECK: // %bb.0: // %entry 75; CHECK-NEXT: movprfx z0, z1 76; CHECK-NEXT: sxtb z0.s, p0/m, z1.s 77; CHECK-NEXT: ret 78; 79; CHECK-2p2-LABEL: test_svextb_s32_x_2: 80; CHECK-2p2: // %bb.0: // %entry 81; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z1.s 82; CHECK-2p2-NEXT: ret 83entry: 84 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 85 ret <vscale x 4 x i32> %0 86} 87 88define <vscale x 4 x i32> @test_svextb_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 89; CHECK-LABEL: test_svextb_s32_z: 90; CHECK: // %bb.0: // %entry 91; CHECK-NEXT: mov z0.s, #0 // =0x0 92; CHECK-NEXT: sxtb z0.s, p0/m, z1.s 93; CHECK-NEXT: ret 94; 95; CHECK-2p2-LABEL: test_svextb_s32_z: 96; CHECK-2p2: // %bb.0: // %entry 97; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z1.s 98; CHECK-2p2-NEXT: ret 99entry: 100 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 101 ret <vscale x 4 x i32> %0 102} 103 104define <vscale x 2 x i64> @test_svextb_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) { 105; CHECK-LABEL: test_svextb_s64_x_1: 106; CHECK: // %bb.0: // %entry 107; CHECK-NEXT: sxtb z0.d, p0/m, z0.d 108; CHECK-NEXT: ret 109; 110; CHECK-2p2-LABEL: test_svextb_s64_x_1: 111; CHECK-2p2: // %bb.0: // %entry 112; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z0.d 113; CHECK-2p2-NEXT: ret 114entry: 115 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 116 ret <vscale x 2 x i64> %0 117} 118 119define <vscale x 2 x i64> @test_svextb_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 120; CHECK-LABEL: test_svextb_s64_x_2: 121; CHECK: // %bb.0: // %entry 122; CHECK-NEXT: movprfx z0, z1 123; CHECK-NEXT: sxtb z0.d, p0/m, z1.d 124; CHECK-NEXT: ret 125; 126; CHECK-2p2-LABEL: test_svextb_s64_x_2: 127; CHECK-2p2: // %bb.0: // %entry 128; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z1.d 129; CHECK-2p2-NEXT: ret 130entry: 131 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 132 ret <vscale x 2 x i64> %0 133} 134 135define <vscale x 2 x i64> @test_svextb_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 136; CHECK-LABEL: test_svextb_s64_z: 137; CHECK: // %bb.0: // %entry 138; CHECK-NEXT: mov z0.d, #0 // =0x0 139; CHECK-NEXT: sxtb z0.d, p0/m, z1.d 140; CHECK-NEXT: ret 141; 142; CHECK-2p2-LABEL: test_svextb_s64_z: 143; CHECK-2p2: // %bb.0: // %entry 144; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z1.d 145; CHECK-2p2-NEXT: ret 146entry: 147 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 148 ret <vscale x 2 x i64> %0 149} 150 151define <vscale x 8 x i16> @test_svextb_u16_x_1(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) { 152; CHECK-LABEL: test_svextb_u16_x_1: 153; CHECK: // %bb.0: // %entry 154; CHECK-NEXT: uxtb z0.h, p0/m, z0.h 155; CHECK-NEXT: ret 156; 157; CHECK-2p2-LABEL: test_svextb_u16_x_1: 158; CHECK-2p2: // %bb.0: // %entry 159; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z0.h 160; CHECK-2p2-NEXT: ret 161entry: 162 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 163 ret <vscale x 8 x i16> %0 164} 165 166define <vscale x 8 x i16> @test_svextb_u16_x_2(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) { 167; CHECK-LABEL: test_svextb_u16_x_2: 168; CHECK: // %bb.0: // %entry 169; CHECK-NEXT: movprfx z0, z1 170; CHECK-NEXT: uxtb z0.h, p0/m, z1.h 171; CHECK-NEXT: ret 172; 173; CHECK-2p2-LABEL: test_svextb_u16_x_2: 174; CHECK-2p2: // %bb.0: // %entry 175; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z1.h 176; CHECK-2p2-NEXT: ret 177entry: 178 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 179 ret <vscale x 8 x i16> %0 180} 181 182define <vscale x 8 x i16> @test_svextb_u16_z(<vscale x 8 x i1> %pg, double %z0, <vscale x 8 x i16> %x) { 183; CHECK-LABEL: test_svextb_u16_z: 184; CHECK: // %bb.0: // %entry 185; CHECK-NEXT: mov z0.h, #0 // =0x0 186; CHECK-NEXT: uxtb z0.h, p0/m, z1.h 187; CHECK-NEXT: ret 188; 189; CHECK-2p2-LABEL: test_svextb_u16_z: 190; CHECK-2p2: // %bb.0: // %entry 191; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z1.h 192; CHECK-2p2-NEXT: ret 193entry: 194 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> zeroinitializer, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 195 ret <vscale x 8 x i16> %0 196} 197 198define <vscale x 4 x i32> @test_svextb_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) { 199; CHECK-LABEL: test_svextb_u32_x_1: 200; CHECK: // %bb.0: // %entry 201; CHECK-NEXT: uxtb z0.s, p0/m, z0.s 202; CHECK-NEXT: ret 203; 204; CHECK-2p2-LABEL: test_svextb_u32_x_1: 205; CHECK-2p2: // %bb.0: // %entry 206; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z0.s 207; CHECK-2p2-NEXT: ret 208entry: 209 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 210 ret <vscale x 4 x i32> %0 211} 212 213define <vscale x 4 x i32> @test_svextb_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 214; CHECK-LABEL: test_svextb_u32_x_2: 215; CHECK: // %bb.0: // %entry 216; CHECK-NEXT: movprfx z0, z1 217; CHECK-NEXT: uxtb z0.s, p0/m, z1.s 218; CHECK-NEXT: ret 219; 220; CHECK-2p2-LABEL: test_svextb_u32_x_2: 221; CHECK-2p2: // %bb.0: // %entry 222; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z1.s 223; CHECK-2p2-NEXT: ret 224entry: 225 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 226 ret <vscale x 4 x i32> %0 227} 228 229define <vscale x 4 x i32> @test_svextb_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 230; CHECK-LABEL: test_svextb_u32_z: 231; CHECK: // %bb.0: // %entry 232; CHECK-NEXT: mov z0.s, #0 // =0x0 233; CHECK-NEXT: uxtb z0.s, p0/m, z1.s 234; CHECK-NEXT: ret 235; 236; CHECK-2p2-LABEL: test_svextb_u32_z: 237; CHECK-2p2: // %bb.0: // %entry 238; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z1.s 239; CHECK-2p2-NEXT: ret 240entry: 241 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 242 ret <vscale x 4 x i32> %0 243} 244 245define <vscale x 2 x i64> @test_svextb_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) { 246; CHECK-LABEL: test_svextb_u64_x_1: 247; CHECK: // %bb.0: // %entry 248; CHECK-NEXT: uxtb z0.d, p0/m, z0.d 249; CHECK-NEXT: ret 250; 251; CHECK-2p2-LABEL: test_svextb_u64_x_1: 252; CHECK-2p2: // %bb.0: // %entry 253; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z0.d 254; CHECK-2p2-NEXT: ret 255entry: 256 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 257 ret <vscale x 2 x i64> %0 258} 259 260define <vscale x 2 x i64> @test_svextb_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 261; CHECK-LABEL: test_svextb_u64_x_2: 262; CHECK: // %bb.0: // %entry 263; CHECK-NEXT: movprfx z0, z1 264; CHECK-NEXT: uxtb z0.d, p0/m, z1.d 265; CHECK-NEXT: ret 266; 267; CHECK-2p2-LABEL: test_svextb_u64_x_2: 268; CHECK-2p2: // %bb.0: // %entry 269; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z1.d 270; CHECK-2p2-NEXT: ret 271entry: 272 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 273 ret <vscale x 2 x i64> %0 274} 275 276define <vscale x 2 x i64> @test_svextb_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 277; CHECK-LABEL: test_svextb_u64_z: 278; CHECK: // %bb.0: // %entry 279; CHECK-NEXT: mov z0.d, #0 // =0x0 280; CHECK-NEXT: uxtb z0.d, p0/m, z1.d 281; CHECK-NEXT: ret 282; 283; CHECK-2p2-LABEL: test_svextb_u64_z: 284; CHECK-2p2: // %bb.0: // %entry 285; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z1.d 286; CHECK-2p2-NEXT: ret 287entry: 288 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 289 ret <vscale x 2 x i64> %0 290} 291 292define <vscale x 4 x i32> @test_svexth_s32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) { 293; CHECK-LABEL: test_svexth_s32_x_1: 294; CHECK: // %bb.0: // %entry 295; CHECK-NEXT: sxth z0.s, p0/m, z0.s 296; CHECK-NEXT: ret 297; 298; CHECK-2p2-LABEL: test_svexth_s32_x_1: 299; CHECK-2p2: // %bb.0: // %entry 300; CHECK-2p2-NEXT: sxth z0.s, p0/z, z0.s 301; CHECK-2p2-NEXT: ret 302entry: 303 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 304 ret <vscale x 4 x i32> %0 305} 306 307define <vscale x 4 x i32> @test_svexth_s32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 308; CHECK-LABEL: test_svexth_s32_x_2: 309; CHECK: // %bb.0: // %entry 310; CHECK-NEXT: movprfx z0, z1 311; CHECK-NEXT: sxth z0.s, p0/m, z1.s 312; CHECK-NEXT: ret 313; 314; CHECK-2p2-LABEL: test_svexth_s32_x_2: 315; CHECK-2p2: // %bb.0: // %entry 316; CHECK-2p2-NEXT: sxth z0.s, p0/z, z1.s 317; CHECK-2p2-NEXT: ret 318entry: 319 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 320 ret <vscale x 4 x i32> %0 321} 322 323define <vscale x 4 x i32> @test_svexth_s32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 324; CHECK-LABEL: test_svexth_s32_z: 325; CHECK: // %bb.0: // %entry 326; CHECK-NEXT: mov z0.s, #0 // =0x0 327; CHECK-NEXT: sxth z0.s, p0/m, z1.s 328; CHECK-NEXT: ret 329; 330; CHECK-2p2-LABEL: test_svexth_s32_z: 331; CHECK-2p2: // %bb.0: // %entry 332; CHECK-2p2-NEXT: sxth z0.s, p0/z, z1.s 333; CHECK-2p2-NEXT: ret 334entry: 335 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 336 ret <vscale x 4 x i32> %0 337} 338 339define <vscale x 2 x i64> @test_svexth_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) { 340; CHECK-LABEL: test_svexth_s64_x_1: 341; CHECK: // %bb.0: // %entry 342; CHECK-NEXT: sxth z0.d, p0/m, z0.d 343; CHECK-NEXT: ret 344; 345; CHECK-2p2-LABEL: test_svexth_s64_x_1: 346; CHECK-2p2: // %bb.0: // %entry 347; CHECK-2p2-NEXT: sxth z0.d, p0/z, z0.d 348; CHECK-2p2-NEXT: ret 349entry: 350 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 351 ret <vscale x 2 x i64> %0 352} 353 354define <vscale x 2 x i64> @test_svexth_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 355; CHECK-LABEL: test_svexth_s64_x_2: 356; CHECK: // %bb.0: // %entry 357; CHECK-NEXT: movprfx z0, z1 358; CHECK-NEXT: sxth z0.d, p0/m, z1.d 359; CHECK-NEXT: ret 360; 361; CHECK-2p2-LABEL: test_svexth_s64_x_2: 362; CHECK-2p2: // %bb.0: // %entry 363; CHECK-2p2-NEXT: sxth z0.d, p0/z, z1.d 364; CHECK-2p2-NEXT: ret 365entry: 366 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 367 ret <vscale x 2 x i64> %0 368} 369 370define <vscale x 2 x i64> @test_svexth_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 371; CHECK-LABEL: test_svexth_s64_z: 372; CHECK: // %bb.0: // %entry 373; CHECK-NEXT: mov z0.d, #0 // =0x0 374; CHECK-NEXT: sxth z0.d, p0/m, z1.d 375; CHECK-NEXT: ret 376; 377; CHECK-2p2-LABEL: test_svexth_s64_z: 378; CHECK-2p2: // %bb.0: // %entry 379; CHECK-2p2-NEXT: sxth z0.d, p0/z, z1.d 380; CHECK-2p2-NEXT: ret 381entry: 382 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 383 ret <vscale x 2 x i64> %0 384} 385 386define <vscale x 4 x i32> @test_svexth_u32_x_1(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) { 387; CHECK-LABEL: test_svexth_u32_x_1: 388; CHECK: // %bb.0: // %entry 389; CHECK-NEXT: uxth z0.s, p0/m, z0.s 390; CHECK-NEXT: ret 391; 392; CHECK-2p2-LABEL: test_svexth_u32_x_1: 393; CHECK-2p2: // %bb.0: // %entry 394; CHECK-2p2-NEXT: uxth z0.s, p0/z, z0.s 395; CHECK-2p2-NEXT: ret 396entry: 397 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 398 ret <vscale x 4 x i32> %0 399} 400 401define <vscale x 4 x i32> @test_svexth_u32_x_2(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 402; CHECK-LABEL: test_svexth_u32_x_2: 403; CHECK: // %bb.0: // %entry 404; CHECK-NEXT: movprfx z0, z1 405; CHECK-NEXT: uxth z0.s, p0/m, z1.s 406; CHECK-NEXT: ret 407; 408; CHECK-2p2-LABEL: test_svexth_u32_x_2: 409; CHECK-2p2: // %bb.0: // %entry 410; CHECK-2p2-NEXT: uxth z0.s, p0/z, z1.s 411; CHECK-2p2-NEXT: ret 412entry: 413 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 414 ret <vscale x 4 x i32> %0 415} 416 417define <vscale x 4 x i32> @test_svexth_u32_z(<vscale x 4 x i1> %pg, double %z0, <vscale x 4 x i32> %x) { 418; CHECK-LABEL: test_svexth_u32_z: 419; CHECK: // %bb.0: // %entry 420; CHECK-NEXT: mov z0.s, #0 // =0x0 421; CHECK-NEXT: uxth z0.s, p0/m, z1.s 422; CHECK-NEXT: ret 423; 424; CHECK-2p2-LABEL: test_svexth_u32_z: 425; CHECK-2p2: // %bb.0: // %entry 426; CHECK-2p2-NEXT: uxth z0.s, p0/z, z1.s 427; CHECK-2p2-NEXT: ret 428entry: 429 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> zeroinitializer, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 430 ret <vscale x 4 x i32> %0 431} 432 433define <vscale x 2 x i64> @test_svexth_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) { 434; CHECK-LABEL: test_svexth_u64_x_1: 435; CHECK: // %bb.0: // %entry 436; CHECK-NEXT: uxth z0.d, p0/m, z0.d 437; CHECK-NEXT: ret 438; 439; CHECK-2p2-LABEL: test_svexth_u64_x_1: 440; CHECK-2p2: // %bb.0: // %entry 441; CHECK-2p2-NEXT: uxth z0.d, p0/z, z0.d 442; CHECK-2p2-NEXT: ret 443entry: 444 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 445 ret <vscale x 2 x i64> %0 446} 447 448define <vscale x 2 x i64> @test_svexth_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 449; CHECK-LABEL: test_svexth_u64_x_2: 450; CHECK: // %bb.0: // %entry 451; CHECK-NEXT: movprfx z0, z1 452; CHECK-NEXT: uxth z0.d, p0/m, z1.d 453; CHECK-NEXT: ret 454; 455; CHECK-2p2-LABEL: test_svexth_u64_x_2: 456; CHECK-2p2: // %bb.0: // %entry 457; CHECK-2p2-NEXT: uxth z0.d, p0/z, z1.d 458; CHECK-2p2-NEXT: ret 459entry: 460 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 461 ret <vscale x 2 x i64> %0 462} 463 464define <vscale x 2 x i64> @test_svexth_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 465; CHECK-LABEL: test_svexth_u64_z: 466; CHECK: // %bb.0: // %entry 467; CHECK-NEXT: mov z0.d, #0 // =0x0 468; CHECK-NEXT: uxth z0.d, p0/m, z1.d 469; CHECK-NEXT: ret 470; 471; CHECK-2p2-LABEL: test_svexth_u64_z: 472; CHECK-2p2: // %bb.0: // %entry 473; CHECK-2p2-NEXT: uxth z0.d, p0/z, z1.d 474; CHECK-2p2-NEXT: ret 475entry: 476 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 477 ret <vscale x 2 x i64> %0 478} 479 480define <vscale x 2 x i64> @test_svextw_s64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) { 481; CHECK-LABEL: test_svextw_s64_x_1: 482; CHECK: // %bb.0: // %entry 483; CHECK-NEXT: sxtw z0.d, p0/m, z0.d 484; CHECK-NEXT: ret 485; 486; CHECK-2p2-LABEL: test_svextw_s64_x_1: 487; CHECK-2p2: // %bb.0: // %entry 488; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z0.d 489; CHECK-2p2-NEXT: ret 490entry: 491 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 492 ret <vscale x 2 x i64> %0 493} 494 495define <vscale x 2 x i64> @test_svextw_s64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 496; CHECK-LABEL: test_svextw_s64_x_2: 497; CHECK: // %bb.0: // %entry 498; CHECK-NEXT: movprfx z0, z1 499; CHECK-NEXT: sxtw z0.d, p0/m, z1.d 500; CHECK-NEXT: ret 501; 502; CHECK-2p2-LABEL: test_svextw_s64_x_2: 503; CHECK-2p2: // %bb.0: // %entry 504; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z1.d 505; CHECK-2p2-NEXT: ret 506entry: 507 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 508 ret <vscale x 2 x i64> %0 509} 510 511define <vscale x 2 x i64> @test_svextw_s64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 512; CHECK-LABEL: test_svextw_s64_z: 513; CHECK: // %bb.0: // %entry 514; CHECK-NEXT: mov z0.d, #0 // =0x0 515; CHECK-NEXT: sxtw z0.d, p0/m, z1.d 516; CHECK-NEXT: ret 517; 518; CHECK-2p2-LABEL: test_svextw_s64_z: 519; CHECK-2p2: // %bb.0: // %entry 520; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z1.d 521; CHECK-2p2-NEXT: ret 522entry: 523 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 524 ret <vscale x 2 x i64> %0 525} 526 527define <vscale x 2 x i64> @test_svextw_u64_x_1(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) { 528; CHECK-LABEL: test_svextw_u64_x_1: 529; CHECK: // %bb.0: // %entry 530; CHECK-NEXT: uxtw z0.d, p0/m, z0.d 531; CHECK-NEXT: ret 532; 533; CHECK-2p2-LABEL: test_svextw_u64_x_1: 534; CHECK-2p2: // %bb.0: // %entry 535; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z0.d 536; CHECK-2p2-NEXT: ret 537entry: 538 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 539 ret <vscale x 2 x i64> %0 540} 541 542define <vscale x 2 x i64> @test_svextw_u64_x_2(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 543; CHECK-LABEL: test_svextw_u64_x_2: 544; CHECK: // %bb.0: // %entry 545; CHECK-NEXT: movprfx z0, z1 546; CHECK-NEXT: uxtw z0.d, p0/m, z1.d 547; CHECK-NEXT: ret 548; 549; CHECK-2p2-LABEL: test_svextw_u64_x_2: 550; CHECK-2p2: // %bb.0: // %entry 551; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z1.d 552; CHECK-2p2-NEXT: ret 553entry: 554 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 555 ret <vscale x 2 x i64> %0 556} 557 558define <vscale x 2 x i64> @test_svextw_u64_z(<vscale x 2 x i1> %pg, double %z0, <vscale x 2 x i64> %x) { 559; CHECK-LABEL: test_svextw_u64_z: 560; CHECK: // %bb.0: // %entry 561; CHECK-NEXT: mov z0.d, #0 // =0x0 562; CHECK-NEXT: uxtw z0.d, p0/m, z1.d 563; CHECK-NEXT: ret 564; 565; CHECK-2p2-LABEL: test_svextw_u64_z: 566; CHECK-2p2: // %bb.0: // %entry 567; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z1.d 568; CHECK-2p2-NEXT: ret 569entry: 570 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> zeroinitializer, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 571 ret <vscale x 2 x i64> %0 572} 573 574define <vscale x 8 x i16> @test_svsxtb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) { 575; CHECK-LABEL: test_svsxtb_nxv8i16_ptrue_u: 576; CHECK: // %bb.0: // %entry 577; CHECK-NEXT: ptrue p0.h 578; CHECK-NEXT: movprfx z0, z1 579; CHECK-NEXT: sxtb z0.h, p0/m, z1.h 580; CHECK-NEXT: ret 581; 582; CHECK-2p2-LABEL: test_svsxtb_nxv8i16_ptrue_u: 583; CHECK-2p2: // %bb.0: // %entry 584; CHECK-2p2-NEXT: ptrue p0.h 585; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z1.h 586; CHECK-2p2-NEXT: ret 587entry: 588 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) 589 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 590 ret <vscale x 8 x i16> %0 591} 592 593define <vscale x 8 x i16> @test_svsxtb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) { 594; CHECK-LABEL: test_svsxtb_nxv8i16_ptrue: 595; CHECK: // %bb.0: // %entry 596; CHECK-NEXT: ptrue p0.h 597; CHECK-NEXT: movprfx z0, z2 598; CHECK-NEXT: sxtb z0.h, p0/m, z2.h 599; CHECK-NEXT: ret 600; 601; CHECK-2p2-LABEL: test_svsxtb_nxv8i16_ptrue: 602; CHECK-2p2: // %bb.0: // %entry 603; CHECK-2p2-NEXT: ptrue p0.h 604; CHECK-2p2-NEXT: sxtb z0.h, p0/z, z2.h 605; CHECK-2p2-NEXT: ret 606entry: 607 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) 608 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.sxtb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y) 609 ret <vscale x 8 x i16> %0 610} 611 612define <vscale x 4 x i32> @test_svsxtb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) { 613; CHECK-LABEL: test_svsxtb_nxv4i32_ptrue_u: 614; CHECK: // %bb.0: // %entry 615; CHECK-NEXT: ptrue p0.s 616; CHECK-NEXT: movprfx z0, z1 617; CHECK-NEXT: sxtb z0.s, p0/m, z1.s 618; CHECK-NEXT: ret 619; 620; CHECK-2p2-LABEL: test_svsxtb_nxv4i32_ptrue_u: 621; CHECK-2p2: // %bb.0: // %entry 622; CHECK-2p2-NEXT: ptrue p0.s 623; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z1.s 624; CHECK-2p2-NEXT: ret 625entry: 626 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 627 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 628 ret <vscale x 4 x i32> %0 629} 630 631define <vscale x 4 x i32> @test_svsxtb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) { 632; CHECK-LABEL: test_svsxtb_nxv4i32_ptrue: 633; CHECK: // %bb.0: // %entry 634; CHECK-NEXT: ptrue p0.s 635; CHECK-NEXT: movprfx z0, z2 636; CHECK-NEXT: sxtb z0.s, p0/m, z2.s 637; CHECK-NEXT: ret 638; 639; CHECK-2p2-LABEL: test_svsxtb_nxv4i32_ptrue: 640; CHECK-2p2: // %bb.0: // %entry 641; CHECK-2p2-NEXT: ptrue p0.s 642; CHECK-2p2-NEXT: sxtb z0.s, p0/z, z2.s 643; CHECK-2p2-NEXT: ret 644entry: 645 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 646 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxtb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y) 647 ret <vscale x 4 x i32> %0 648} 649 650define <vscale x 2 x i64> @test_svsxtb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) { 651; CHECK-LABEL: test_svsxtb_nxv2i64_ptrue_u: 652; CHECK: // %bb.0: // %entry 653; CHECK-NEXT: ptrue p0.d 654; CHECK-NEXT: movprfx z0, z1 655; CHECK-NEXT: sxtb z0.d, p0/m, z1.d 656; CHECK-NEXT: ret 657; 658; CHECK-2p2-LABEL: test_svsxtb_nxv2i64_ptrue_u: 659; CHECK-2p2: // %bb.0: // %entry 660; CHECK-2p2-NEXT: ptrue p0.d 661; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z1.d 662; CHECK-2p2-NEXT: ret 663entry: 664 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 665 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 666 ret <vscale x 2 x i64> %0 667} 668 669define <vscale x 2 x i64> @test_svsxtb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) { 670; CHECK-LABEL: test_svsxtb_nxv2i64_ptrue: 671; CHECK: // %bb.0: // %entry 672; CHECK-NEXT: ptrue p0.d 673; CHECK-NEXT: movprfx z0, z2 674; CHECK-NEXT: sxtb z0.d, p0/m, z2.d 675; CHECK-NEXT: ret 676; 677; CHECK-2p2-LABEL: test_svsxtb_nxv2i64_ptrue: 678; CHECK-2p2: // %bb.0: // %entry 679; CHECK-2p2-NEXT: ptrue p0.d 680; CHECK-2p2-NEXT: sxtb z0.d, p0/z, z2.d 681; CHECK-2p2-NEXT: ret 682entry: 683 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 684 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y) 685 ret <vscale x 2 x i64> %0 686} 687 688define <vscale x 8 x i16> @test_svuxtb_nxv8i16_ptrue_u(double %z0, <vscale x 8 x i16> %x) { 689; CHECK-LABEL: test_svuxtb_nxv8i16_ptrue_u: 690; CHECK: // %bb.0: // %entry 691; CHECK-NEXT: ptrue p0.h 692; CHECK-NEXT: movprfx z0, z1 693; CHECK-NEXT: uxtb z0.h, p0/m, z1.h 694; CHECK-NEXT: ret 695; 696; CHECK-2p2-LABEL: test_svuxtb_nxv8i16_ptrue_u: 697; CHECK-2p2: // %bb.0: // %entry 698; CHECK-2p2-NEXT: ptrue p0.h 699; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z1.h 700; CHECK-2p2-NEXT: ret 701entry: 702 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) 703 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> poison, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %x) 704 ret <vscale x 8 x i16> %0 705} 706 707define <vscale x 8 x i16> @test_svuxtb_nxv8i16_ptrue(double %z0, <vscale x 8 x i16> %x, <vscale x 8 x i16> %y) { 708; CHECK-LABEL: test_svuxtb_nxv8i16_ptrue: 709; CHECK: // %bb.0: // %entry 710; CHECK-NEXT: ptrue p0.h 711; CHECK-NEXT: movprfx z0, z2 712; CHECK-NEXT: uxtb z0.h, p0/m, z2.h 713; CHECK-NEXT: ret 714; 715; CHECK-2p2-LABEL: test_svuxtb_nxv8i16_ptrue: 716; CHECK-2p2: // %bb.0: // %entry 717; CHECK-2p2-NEXT: ptrue p0.h 718; CHECK-2p2-NEXT: uxtb z0.h, p0/z, z2.h 719; CHECK-2p2-NEXT: ret 720entry: 721 %pg = call <vscale x 8 x i1> @llvm.aarch64.sve.ptrue.nxv8i1(i32 31) 722 %0 = tail call <vscale x 8 x i16> @llvm.aarch64.sve.uxtb.nxv8i16(<vscale x 8 x i16> %x, <vscale x 8 x i1> %pg, <vscale x 8 x i16> %y) 723 ret <vscale x 8 x i16> %0 724} 725 726define <vscale x 4 x i32> @test_svuxtb_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) { 727; CHECK-LABEL: test_svuxtb_nxv4i32_ptrue_u: 728; CHECK: // %bb.0: // %entry 729; CHECK-NEXT: ptrue p0.s 730; CHECK-NEXT: movprfx z0, z1 731; CHECK-NEXT: uxtb z0.s, p0/m, z1.s 732; CHECK-NEXT: ret 733; 734; CHECK-2p2-LABEL: test_svuxtb_nxv4i32_ptrue_u: 735; CHECK-2p2: // %bb.0: // %entry 736; CHECK-2p2-NEXT: ptrue p0.s 737; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z1.s 738; CHECK-2p2-NEXT: ret 739entry: 740 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 741 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 742 ret <vscale x 4 x i32> %0 743} 744 745define <vscale x 4 x i32> @test_svuxtb_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) { 746; CHECK-LABEL: test_svuxtb_nxv4i32_ptrue: 747; CHECK: // %bb.0: // %entry 748; CHECK-NEXT: ptrue p0.s 749; CHECK-NEXT: movprfx z0, z2 750; CHECK-NEXT: uxtb z0.s, p0/m, z2.s 751; CHECK-NEXT: ret 752; 753; CHECK-2p2-LABEL: test_svuxtb_nxv4i32_ptrue: 754; CHECK-2p2: // %bb.0: // %entry 755; CHECK-2p2-NEXT: ptrue p0.s 756; CHECK-2p2-NEXT: uxtb z0.s, p0/z, z2.s 757; CHECK-2p2-NEXT: ret 758entry: 759 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 760 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxtb.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y) 761 ret <vscale x 4 x i32> %0 762} 763 764define <vscale x 2 x i64> @test_svuxtb_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) { 765; CHECK-LABEL: test_svuxtb_nxv2i64_ptrue_u: 766; CHECK: // %bb.0: // %entry 767; CHECK-NEXT: ptrue p0.d 768; CHECK-NEXT: movprfx z0, z1 769; CHECK-NEXT: uxtb z0.d, p0/m, z1.d 770; CHECK-NEXT: ret 771; 772; CHECK-2p2-LABEL: test_svuxtb_nxv2i64_ptrue_u: 773; CHECK-2p2: // %bb.0: // %entry 774; CHECK-2p2-NEXT: ptrue p0.d 775; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z1.d 776; CHECK-2p2-NEXT: ret 777entry: 778 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 779 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 780 ret <vscale x 2 x i64> %0 781} 782 783define <vscale x 2 x i64> @test_svuxtb_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) { 784; CHECK-LABEL: test_svuxtb_nxv2i64_ptrue: 785; CHECK: // %bb.0: // %entry 786; CHECK-NEXT: ptrue p0.d 787; CHECK-NEXT: movprfx z0, z2 788; CHECK-NEXT: uxtb z0.d, p0/m, z2.d 789; CHECK-NEXT: ret 790; 791; CHECK-2p2-LABEL: test_svuxtb_nxv2i64_ptrue: 792; CHECK-2p2: // %bb.0: // %entry 793; CHECK-2p2-NEXT: ptrue p0.d 794; CHECK-2p2-NEXT: uxtb z0.d, p0/z, z2.d 795; CHECK-2p2-NEXT: ret 796entry: 797 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 798 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtb.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y) 799 ret <vscale x 2 x i64> %0 800} 801 802define <vscale x 4 x i32> @test_svsxth_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) { 803; CHECK-LABEL: test_svsxth_nxv4i32_ptrue_u: 804; CHECK: // %bb.0: // %entry 805; CHECK-NEXT: ptrue p0.s 806; CHECK-NEXT: movprfx z0, z1 807; CHECK-NEXT: sxth z0.s, p0/m, z1.s 808; CHECK-NEXT: ret 809; 810; CHECK-2p2-LABEL: test_svsxth_nxv4i32_ptrue_u: 811; CHECK-2p2: // %bb.0: // %entry 812; CHECK-2p2-NEXT: ptrue p0.s 813; CHECK-2p2-NEXT: sxth z0.s, p0/z, z1.s 814; CHECK-2p2-NEXT: ret 815entry: 816 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 817 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 818 ret <vscale x 4 x i32> %0 819} 820 821define <vscale x 4 x i32> @test_svsxth_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) { 822; CHECK-LABEL: test_svsxth_nxv4i32_ptrue: 823; CHECK: // %bb.0: // %entry 824; CHECK-NEXT: ptrue p0.s 825; CHECK-NEXT: movprfx z0, z2 826; CHECK-NEXT: sxth z0.s, p0/m, z2.s 827; CHECK-NEXT: ret 828; 829; CHECK-2p2-LABEL: test_svsxth_nxv4i32_ptrue: 830; CHECK-2p2: // %bb.0: // %entry 831; CHECK-2p2-NEXT: ptrue p0.s 832; CHECK-2p2-NEXT: sxth z0.s, p0/z, z2.s 833; CHECK-2p2-NEXT: ret 834entry: 835 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 836 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.sxth.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y) 837 ret <vscale x 4 x i32> %0 838} 839 840define <vscale x 2 x i64> @test_svsxth_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) { 841; CHECK-LABEL: test_svsxth_nxv2i64_ptrue_u: 842; CHECK: // %bb.0: // %entry 843; CHECK-NEXT: ptrue p0.d 844; CHECK-NEXT: movprfx z0, z1 845; CHECK-NEXT: sxth z0.d, p0/m, z1.d 846; CHECK-NEXT: ret 847; 848; CHECK-2p2-LABEL: test_svsxth_nxv2i64_ptrue_u: 849; CHECK-2p2: // %bb.0: // %entry 850; CHECK-2p2-NEXT: ptrue p0.d 851; CHECK-2p2-NEXT: sxth z0.d, p0/z, z1.d 852; CHECK-2p2-NEXT: ret 853entry: 854 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 855 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 856 ret <vscale x 2 x i64> %0 857} 858 859define <vscale x 2 x i64> @test_svsxth_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) { 860; CHECK-LABEL: test_svsxth_nxv2i64_ptrue: 861; CHECK: // %bb.0: // %entry 862; CHECK-NEXT: ptrue p0.d 863; CHECK-NEXT: movprfx z0, z2 864; CHECK-NEXT: sxth z0.d, p0/m, z2.d 865; CHECK-NEXT: ret 866; 867; CHECK-2p2-LABEL: test_svsxth_nxv2i64_ptrue: 868; CHECK-2p2: // %bb.0: // %entry 869; CHECK-2p2-NEXT: ptrue p0.d 870; CHECK-2p2-NEXT: sxth z0.d, p0/z, z2.d 871; CHECK-2p2-NEXT: ret 872entry: 873 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 874 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxth.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y) 875 ret <vscale x 2 x i64> %0 876} 877 878define <vscale x 4 x i32> @test_svuxth_nxv4i32_ptrue_u(double %z0, <vscale x 4 x i32> %x) { 879; CHECK-LABEL: test_svuxth_nxv4i32_ptrue_u: 880; CHECK: // %bb.0: // %entry 881; CHECK-NEXT: ptrue p0.s 882; CHECK-NEXT: movprfx z0, z1 883; CHECK-NEXT: uxth z0.s, p0/m, z1.s 884; CHECK-NEXT: ret 885; 886; CHECK-2p2-LABEL: test_svuxth_nxv4i32_ptrue_u: 887; CHECK-2p2: // %bb.0: // %entry 888; CHECK-2p2-NEXT: ptrue p0.s 889; CHECK-2p2-NEXT: uxth z0.s, p0/z, z1.s 890; CHECK-2p2-NEXT: ret 891entry: 892 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 893 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> poison, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %x) 894 ret <vscale x 4 x i32> %0 895} 896 897define <vscale x 4 x i32> @test_svuxth_nxv4i32_ptrue(double %z0, <vscale x 4 x i32> %x, <vscale x 4 x i32> %y) { 898; CHECK-LABEL: test_svuxth_nxv4i32_ptrue: 899; CHECK: // %bb.0: // %entry 900; CHECK-NEXT: ptrue p0.s 901; CHECK-NEXT: movprfx z0, z2 902; CHECK-NEXT: uxth z0.s, p0/m, z2.s 903; CHECK-NEXT: ret 904; 905; CHECK-2p2-LABEL: test_svuxth_nxv4i32_ptrue: 906; CHECK-2p2: // %bb.0: // %entry 907; CHECK-2p2-NEXT: ptrue p0.s 908; CHECK-2p2-NEXT: uxth z0.s, p0/z, z2.s 909; CHECK-2p2-NEXT: ret 910entry: 911 %pg = call <vscale x 4 x i1> @llvm.aarch64.sve.ptrue.nxv4i1(i32 31) 912 %0 = tail call <vscale x 4 x i32> @llvm.aarch64.sve.uxth.nxv4i32(<vscale x 4 x i32> %x, <vscale x 4 x i1> %pg, <vscale x 4 x i32> %y) 913 ret <vscale x 4 x i32> %0 914} 915 916define <vscale x 2 x i64> @test_svuxth_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) { 917; CHECK-LABEL: test_svuxth_nxv2i64_ptrue_u: 918; CHECK: // %bb.0: // %entry 919; CHECK-NEXT: ptrue p0.d 920; CHECK-NEXT: movprfx z0, z1 921; CHECK-NEXT: uxth z0.d, p0/m, z1.d 922; CHECK-NEXT: ret 923; 924; CHECK-2p2-LABEL: test_svuxth_nxv2i64_ptrue_u: 925; CHECK-2p2: // %bb.0: // %entry 926; CHECK-2p2-NEXT: ptrue p0.d 927; CHECK-2p2-NEXT: uxth z0.d, p0/z, z1.d 928; CHECK-2p2-NEXT: ret 929entry: 930 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 931 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 932 ret <vscale x 2 x i64> %0 933} 934 935define <vscale x 2 x i64> @test_svuxth_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) { 936; CHECK-LABEL: test_svuxth_nxv2i64_ptrue: 937; CHECK: // %bb.0: // %entry 938; CHECK-NEXT: ptrue p0.d 939; CHECK-NEXT: movprfx z0, z2 940; CHECK-NEXT: uxth z0.d, p0/m, z2.d 941; CHECK-NEXT: ret 942; 943; CHECK-2p2-LABEL: test_svuxth_nxv2i64_ptrue: 944; CHECK-2p2: // %bb.0: // %entry 945; CHECK-2p2-NEXT: ptrue p0.d 946; CHECK-2p2-NEXT: uxth z0.d, p0/z, z2.d 947; CHECK-2p2-NEXT: ret 948entry: 949 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 950 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxth.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y) 951 ret <vscale x 2 x i64> %0 952} 953 954define <vscale x 2 x i64> @test_svsxtw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) { 955; CHECK-LABEL: test_svsxtw_nxv2i64_ptrue_u: 956; CHECK: // %bb.0: // %entry 957; CHECK-NEXT: ptrue p0.d 958; CHECK-NEXT: movprfx z0, z1 959; CHECK-NEXT: sxtw z0.d, p0/m, z1.d 960; CHECK-NEXT: ret 961; 962; CHECK-2p2-LABEL: test_svsxtw_nxv2i64_ptrue_u: 963; CHECK-2p2: // %bb.0: // %entry 964; CHECK-2p2-NEXT: ptrue p0.d 965; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z1.d 966; CHECK-2p2-NEXT: ret 967entry: 968 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 969 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 970 ret <vscale x 2 x i64> %0 971} 972 973define <vscale x 2 x i64> @test_svsxtw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) { 974; CHECK-LABEL: test_svsxtw_nxv2i64_ptrue: 975; CHECK: // %bb.0: // %entry 976; CHECK-NEXT: ptrue p0.d 977; CHECK-NEXT: movprfx z0, z2 978; CHECK-NEXT: sxtw z0.d, p0/m, z2.d 979; CHECK-NEXT: ret 980; 981; CHECK-2p2-LABEL: test_svsxtw_nxv2i64_ptrue: 982; CHECK-2p2: // %bb.0: // %entry 983; CHECK-2p2-NEXT: ptrue p0.d 984; CHECK-2p2-NEXT: sxtw z0.d, p0/z, z2.d 985; CHECK-2p2-NEXT: ret 986entry: 987 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 988 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.sxtw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y) 989 ret <vscale x 2 x i64> %0 990} 991 992define <vscale x 2 x i64> @test_svuxtw_nxv2i64_ptrue_u(double %z0, <vscale x 2 x i64> %x) { 993; CHECK-LABEL: test_svuxtw_nxv2i64_ptrue_u: 994; CHECK: // %bb.0: // %entry 995; CHECK-NEXT: ptrue p0.d 996; CHECK-NEXT: movprfx z0, z1 997; CHECK-NEXT: uxtw z0.d, p0/m, z1.d 998; CHECK-NEXT: ret 999; 1000; CHECK-2p2-LABEL: test_svuxtw_nxv2i64_ptrue_u: 1001; CHECK-2p2: // %bb.0: // %entry 1002; CHECK-2p2-NEXT: ptrue p0.d 1003; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z1.d 1004; CHECK-2p2-NEXT: ret 1005entry: 1006 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 1007 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> poison, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %x) 1008 ret <vscale x 2 x i64> %0 1009} 1010 1011define <vscale x 2 x i64> @test_svuxtw_nxv2i64_ptrue(double %z0, <vscale x 2 x i64> %x, <vscale x 2 x i64> %y) { 1012; CHECK-LABEL: test_svuxtw_nxv2i64_ptrue: 1013; CHECK: // %bb.0: // %entry 1014; CHECK-NEXT: ptrue p0.d 1015; CHECK-NEXT: movprfx z0, z2 1016; CHECK-NEXT: uxtw z0.d, p0/m, z2.d 1017; CHECK-NEXT: ret 1018; 1019; CHECK-2p2-LABEL: test_svuxtw_nxv2i64_ptrue: 1020; CHECK-2p2: // %bb.0: // %entry 1021; CHECK-2p2-NEXT: ptrue p0.d 1022; CHECK-2p2-NEXT: uxtw z0.d, p0/z, z2.d 1023; CHECK-2p2-NEXT: ret 1024entry: 1025 %pg = call <vscale x 2 x i1> @llvm.aarch64.sve.ptrue.nxv2i1(i32 31) 1026 %0 = tail call <vscale x 2 x i64> @llvm.aarch64.sve.uxtw.nxv2i64(<vscale x 2 x i64> %x, <vscale x 2 x i1> %pg, <vscale x 2 x i64> %y) 1027 ret <vscale x 2 x i64> %0 1028} 1029