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; ASR 6; 7 8define <vscale x 16 x i8> @asr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) { 9; CHECK-LABEL: asr_i8: 10; CHECK: // %bb.0: 11; CHECK-NEXT: asr z0.b, p0/m, z0.b, z1.b 12; CHECK-NEXT: ret 13 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.asr.nxv16i8(<vscale x 16 x i1> %pg, 14 <vscale x 16 x i8> %a, 15 <vscale x 16 x i8> %b) 16 ret <vscale x 16 x i8> %out 17} 18 19define <vscale x 8 x i16> @asr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) { 20; CHECK-LABEL: asr_i16: 21; CHECK: // %bb.0: 22; CHECK-NEXT: asr z0.h, p0/m, z0.h, z1.h 23; CHECK-NEXT: ret 24 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.asr.nxv8i16(<vscale x 8 x i1> %pg, 25 <vscale x 8 x i16> %a, 26 <vscale x 8 x i16> %b) 27 ret <vscale x 8 x i16> %out 28} 29 30define <vscale x 4 x i32> @asr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 31; CHECK-LABEL: asr_i32: 32; CHECK: // %bb.0: 33; CHECK-NEXT: asr z0.s, p0/m, z0.s, z1.s 34; CHECK-NEXT: ret 35 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.asr.nxv4i32(<vscale x 4 x i1> %pg, 36 <vscale x 4 x i32> %a, 37 <vscale x 4 x i32> %b) 38 ret <vscale x 4 x i32> %out 39} 40 41define <vscale x 2 x i64> @asr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 42; CHECK-LABEL: asr_i64: 43; CHECK: // %bb.0: 44; CHECK-NEXT: asr z0.d, p0/m, z0.d, z1.d 45; CHECK-NEXT: ret 46 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.asr.nxv2i64(<vscale x 2 x i1> %pg, 47 <vscale x 2 x i64> %a, 48 <vscale x 2 x i64> %b) 49 ret <vscale x 2 x i64> %out 50} 51 52define <vscale x 16 x i8> @asr_wide_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 2 x i64> %b) { 53; CHECK-LABEL: asr_wide_i8: 54; CHECK: // %bb.0: 55; CHECK-NEXT: asr z0.b, p0/m, z0.b, z1.d 56; CHECK-NEXT: ret 57 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.asr.wide.nxv16i8(<vscale x 16 x i1> %pg, 58 <vscale x 16 x i8> %a, 59 <vscale x 2 x i64> %b) 60 ret <vscale x 16 x i8> %out 61} 62 63define <vscale x 8 x i16> @asr_wide_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 2 x i64> %b) { 64; CHECK-LABEL: asr_wide_i16: 65; CHECK: // %bb.0: 66; CHECK-NEXT: asr z0.h, p0/m, z0.h, z1.d 67; CHECK-NEXT: ret 68 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.asr.wide.nxv8i16(<vscale x 8 x i1> %pg, 69 <vscale x 8 x i16> %a, 70 <vscale x 2 x i64> %b) 71 ret <vscale x 8 x i16> %out 72} 73 74define <vscale x 4 x i32> @asr_wide_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 2 x i64> %b) { 75; CHECK-LABEL: asr_wide_i32: 76; CHECK: // %bb.0: 77; CHECK-NEXT: asr z0.s, p0/m, z0.s, z1.d 78; CHECK-NEXT: ret 79 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.asr.wide.nxv4i32(<vscale x 4 x i1> %pg, 80 <vscale x 4 x i32> %a, 81 <vscale x 2 x i64> %b) 82 ret <vscale x 4 x i32> %out 83} 84 85; 86; ASRD 87; 88 89define <vscale x 16 x i8> @asrd_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a) { 90; CHECK-LABEL: asrd_i8: 91; CHECK: // %bb.0: 92; CHECK-NEXT: asrd z0.b, p0/m, z0.b, #1 93; CHECK-NEXT: ret 94 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.asrd.nxv16i8(<vscale x 16 x i1> %pg, 95 <vscale x 16 x i8> %a, 96 i32 1) 97 ret <vscale x 16 x i8> %out 98} 99 100define <vscale x 8 x i16> @asrd_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a) { 101; CHECK-LABEL: asrd_i16: 102; CHECK: // %bb.0: 103; CHECK-NEXT: asrd z0.h, p0/m, z0.h, #2 104; CHECK-NEXT: ret 105 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.asrd.nxv8i16(<vscale x 8 x i1> %pg, 106 <vscale x 8 x i16> %a, 107 i32 2) 108 ret <vscale x 8 x i16> %out 109} 110 111define <vscale x 4 x i32> @asrd_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a) { 112; CHECK-LABEL: asrd_i32: 113; CHECK: // %bb.0: 114; CHECK-NEXT: asrd z0.s, p0/m, z0.s, #31 115; CHECK-NEXT: ret 116 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.asrd.nxv4i32(<vscale x 4 x i1> %pg, 117 <vscale x 4 x i32> %a, 118 i32 31) 119 ret <vscale x 4 x i32> %out 120} 121 122define <vscale x 2 x i64> @asrd_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a) { 123; CHECK-LABEL: asrd_i64: 124; CHECK: // %bb.0: 125; CHECK-NEXT: asrd z0.d, p0/m, z0.d, #64 126; CHECK-NEXT: ret 127 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.asrd.nxv2i64(<vscale x 2 x i1> %pg, 128 <vscale x 2 x i64> %a, 129 i32 64) 130 ret <vscale x 2 x i64> %out 131} 132 133; 134; INSR 135; 136 137define <vscale x 16 x i8> @insr_i8(<vscale x 16 x i8> %a, i8 %b) { 138; CHECK-LABEL: insr_i8: 139; CHECK: // %bb.0: 140; CHECK-NEXT: insr z0.b, w0 141; CHECK-NEXT: ret 142 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.insr.nxv16i8(<vscale x 16 x i8> %a, i8 %b) 143 ret <vscale x 16 x i8> %out 144} 145 146define <vscale x 8 x i16> @insr_i16(<vscale x 8 x i16> %a, i16 %b) { 147; CHECK-LABEL: insr_i16: 148; CHECK: // %bb.0: 149; CHECK-NEXT: insr z0.h, w0 150; CHECK-NEXT: ret 151 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.insr.nxv8i16(<vscale x 8 x i16> %a, i16 %b) 152 ret <vscale x 8 x i16> %out 153} 154 155define <vscale x 4 x i32> @insr_i32(<vscale x 4 x i32> %a, i32 %b) { 156; CHECK-LABEL: insr_i32: 157; CHECK: // %bb.0: 158; CHECK-NEXT: insr z0.s, w0 159; CHECK-NEXT: ret 160 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.insr.nxv4i32(<vscale x 4 x i32> %a, i32 %b) 161 ret <vscale x 4 x i32> %out 162} 163 164define <vscale x 2 x i64> @insr_i64(<vscale x 2 x i64> %a, i64 %b) { 165; CHECK-LABEL: insr_i64: 166; CHECK: // %bb.0: 167; CHECK-NEXT: insr z0.d, x0 168; CHECK-NEXT: ret 169 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.insr.nxv2i64(<vscale x 2 x i64> %a, i64 %b) 170 ret <vscale x 2 x i64> %out 171} 172 173define <vscale x 8 x half> @insr_f16(<vscale x 8 x half> %a, half %b) { 174; CHECK-LABEL: insr_f16: 175; CHECK: // %bb.0: 176; CHECK-NEXT: // kill: def $h1 killed $h1 def $z1 177; CHECK-NEXT: insr z0.h, h1 178; CHECK-NEXT: ret 179 %out = call <vscale x 8 x half> @llvm.aarch64.sve.insr.nxv8f16(<vscale x 8 x half> %a, half %b) 180 ret <vscale x 8 x half> %out 181} 182 183define <vscale x 8 x bfloat> @insr_bf16(<vscale x 8 x bfloat> %a, bfloat %b) #0 { 184; CHECK-LABEL: insr_bf16: 185; CHECK: // %bb.0: 186; CHECK-NEXT: // kill: def $h1 killed $h1 def $z1 187; CHECK-NEXT: insr z0.h, h1 188; CHECK-NEXT: ret 189 %out = call <vscale x 8 x bfloat> @llvm.aarch64.sve.insr.nxv8bf16(<vscale x 8 x bfloat> %a, bfloat %b) 190 ret <vscale x 8 x bfloat> %out 191} 192 193define <vscale x 4 x float> @insr_f32(<vscale x 4 x float> %a, float %b) { 194; CHECK-LABEL: insr_f32: 195; CHECK: // %bb.0: 196; CHECK-NEXT: // kill: def $s1 killed $s1 def $z1 197; CHECK-NEXT: insr z0.s, s1 198; CHECK-NEXT: ret 199 %out = call <vscale x 4 x float> @llvm.aarch64.sve.insr.nxv4f32(<vscale x 4 x float> %a, float %b) 200 ret <vscale x 4 x float> %out 201} 202 203define <vscale x 2 x double> @insr_f64(<vscale x 2 x double> %a, double %b) { 204; CHECK-LABEL: insr_f64: 205; CHECK: // %bb.0: 206; CHECK-NEXT: // kill: def $d1 killed $d1 def $z1 207; CHECK-NEXT: insr z0.d, d1 208; CHECK-NEXT: ret 209 %out = call <vscale x 2 x double> @llvm.aarch64.sve.insr.nxv2f64(<vscale x 2 x double> %a, double %b) 210 ret <vscale x 2 x double> %out 211} 212 213; 214; LSL 215; 216 217define <vscale x 16 x i8> @lsl_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) { 218; CHECK-LABEL: lsl_i8: 219; CHECK: // %bb.0: 220; CHECK-NEXT: lsl z0.b, p0/m, z0.b, z1.b 221; CHECK-NEXT: ret 222 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.lsl.nxv16i8(<vscale x 16 x i1> %pg, 223 <vscale x 16 x i8> %a, 224 <vscale x 16 x i8> %b) 225 ret <vscale x 16 x i8> %out 226} 227 228define <vscale x 8 x i16> @lsl_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) { 229; CHECK-LABEL: lsl_i16: 230; CHECK: // %bb.0: 231; CHECK-NEXT: lsl z0.h, p0/m, z0.h, z1.h 232; CHECK-NEXT: ret 233 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.lsl.nxv8i16(<vscale x 8 x i1> %pg, 234 <vscale x 8 x i16> %a, 235 <vscale x 8 x i16> %b) 236 ret <vscale x 8 x i16> %out 237} 238 239define <vscale x 4 x i32> @lsl_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 240; CHECK-LABEL: lsl_i32: 241; CHECK: // %bb.0: 242; CHECK-NEXT: lsl z0.s, p0/m, z0.s, z1.s 243; CHECK-NEXT: ret 244 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.lsl.nxv4i32(<vscale x 4 x i1> %pg, 245 <vscale x 4 x i32> %a, 246 <vscale x 4 x i32> %b) 247 ret <vscale x 4 x i32> %out 248} 249 250define <vscale x 2 x i64> @lsl_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 251; CHECK-LABEL: lsl_i64: 252; CHECK: // %bb.0: 253; CHECK-NEXT: lsl z0.d, p0/m, z0.d, z1.d 254; CHECK-NEXT: ret 255 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.lsl.nxv2i64(<vscale x 2 x i1> %pg, 256 <vscale x 2 x i64> %a, 257 <vscale x 2 x i64> %b) 258 ret <vscale x 2 x i64> %out 259} 260 261define <vscale x 16 x i8> @lsl_wide_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 2 x i64> %b) { 262; CHECK-LABEL: lsl_wide_i8: 263; CHECK: // %bb.0: 264; CHECK-NEXT: lsl z0.b, p0/m, z0.b, z1.d 265; CHECK-NEXT: ret 266 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.lsl.wide.nxv16i8(<vscale x 16 x i1> %pg, 267 <vscale x 16 x i8> %a, 268 <vscale x 2 x i64> %b) 269 ret <vscale x 16 x i8> %out 270} 271 272define <vscale x 8 x i16> @lsl_wide_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 2 x i64> %b) { 273; CHECK-LABEL: lsl_wide_i16: 274; CHECK: // %bb.0: 275; CHECK-NEXT: lsl z0.h, p0/m, z0.h, z1.d 276; CHECK-NEXT: ret 277 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.lsl.wide.nxv8i16(<vscale x 8 x i1> %pg, 278 <vscale x 8 x i16> %a, 279 <vscale x 2 x i64> %b) 280 ret <vscale x 8 x i16> %out 281} 282 283define <vscale x 4 x i32> @lsl_wide_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 2 x i64> %b) { 284; CHECK-LABEL: lsl_wide_i32: 285; CHECK: // %bb.0: 286; CHECK-NEXT: lsl z0.s, p0/m, z0.s, z1.d 287; CHECK-NEXT: ret 288 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.lsl.wide.nxv4i32(<vscale x 4 x i1> %pg, 289 <vscale x 4 x i32> %a, 290 <vscale x 2 x i64> %b) 291 ret <vscale x 4 x i32> %out 292} 293 294; 295; LSR 296; 297 298define <vscale x 16 x i8> @lsr_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 16 x i8> %b) { 299; CHECK-LABEL: lsr_i8: 300; CHECK: // %bb.0: 301; CHECK-NEXT: lsr z0.b, p0/m, z0.b, z1.b 302; CHECK-NEXT: ret 303 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.lsr.nxv16i8(<vscale x 16 x i1> %pg, 304 <vscale x 16 x i8> %a, 305 <vscale x 16 x i8> %b) 306 ret <vscale x 16 x i8> %out 307} 308 309define <vscale x 8 x i16> @lsr_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 8 x i16> %b) { 310; CHECK-LABEL: lsr_i16: 311; CHECK: // %bb.0: 312; CHECK-NEXT: lsr z0.h, p0/m, z0.h, z1.h 313; CHECK-NEXT: ret 314 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.lsr.nxv8i16(<vscale x 8 x i1> %pg, 315 <vscale x 8 x i16> %a, 316 <vscale x 8 x i16> %b) 317 ret <vscale x 8 x i16> %out 318} 319 320define <vscale x 4 x i32> @lsr_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 4 x i32> %b) { 321; CHECK-LABEL: lsr_i32: 322; CHECK: // %bb.0: 323; CHECK-NEXT: lsr z0.s, p0/m, z0.s, z1.s 324; CHECK-NEXT: ret 325 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.lsr.nxv4i32(<vscale x 4 x i1> %pg, 326 <vscale x 4 x i32> %a, 327 <vscale x 4 x i32> %b) 328 ret <vscale x 4 x i32> %out 329} 330 331define <vscale x 2 x i64> @lsr_i64(<vscale x 2 x i1> %pg, <vscale x 2 x i64> %a, <vscale x 2 x i64> %b) { 332; CHECK-LABEL: lsr_i64: 333; CHECK: // %bb.0: 334; CHECK-NEXT: lsr z0.d, p0/m, z0.d, z1.d 335; CHECK-NEXT: ret 336 %out = call <vscale x 2 x i64> @llvm.aarch64.sve.lsr.nxv2i64(<vscale x 2 x i1> %pg, 337 <vscale x 2 x i64> %a, 338 <vscale x 2 x i64> %b) 339 ret <vscale x 2 x i64> %out 340} 341 342define <vscale x 16 x i8> @lsr_wide_i8(<vscale x 16 x i1> %pg, <vscale x 16 x i8> %a, <vscale x 2 x i64> %b) { 343; CHECK-LABEL: lsr_wide_i8: 344; CHECK: // %bb.0: 345; CHECK-NEXT: lsr z0.b, p0/m, z0.b, z1.d 346; CHECK-NEXT: ret 347 %out = call <vscale x 16 x i8> @llvm.aarch64.sve.lsr.wide.nxv16i8(<vscale x 16 x i1> %pg, 348 <vscale x 16 x i8> %a, 349 <vscale x 2 x i64> %b) 350 ret <vscale x 16 x i8> %out 351} 352 353define <vscale x 8 x i16> @lsr_wide_i16(<vscale x 8 x i1> %pg, <vscale x 8 x i16> %a, <vscale x 2 x i64> %b) { 354; CHECK-LABEL: lsr_wide_i16: 355; CHECK: // %bb.0: 356; CHECK-NEXT: lsr z0.h, p0/m, z0.h, z1.d 357; CHECK-NEXT: ret 358 %out = call <vscale x 8 x i16> @llvm.aarch64.sve.lsr.wide.nxv8i16(<vscale x 8 x i1> %pg, 359 <vscale x 8 x i16> %a, 360 <vscale x 2 x i64> %b) 361 ret <vscale x 8 x i16> %out 362} 363 364define <vscale x 4 x i32> @lsr_wide_i32(<vscale x 4 x i1> %pg, <vscale x 4 x i32> %a, <vscale x 2 x i64> %b) { 365; CHECK-LABEL: lsr_wide_i32: 366; CHECK: // %bb.0: 367; CHECK-NEXT: lsr z0.s, p0/m, z0.s, z1.d 368; CHECK-NEXT: ret 369 %out = call <vscale x 4 x i32> @llvm.aarch64.sve.lsr.wide.nxv4i32(<vscale x 4 x i1> %pg, 370 <vscale x 4 x i32> %a, 371 <vscale x 2 x i64> %b) 372 ret <vscale x 4 x i32> %out 373} 374 375declare <vscale x 16 x i8> @llvm.aarch64.sve.asr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>) 376declare <vscale x 8 x i16> @llvm.aarch64.sve.asr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>) 377declare <vscale x 4 x i32> @llvm.aarch64.sve.asr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>) 378declare <vscale x 2 x i64> @llvm.aarch64.sve.asr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>) 379 380declare <vscale x 16 x i8> @llvm.aarch64.sve.asr.wide.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 2 x i64>) 381declare <vscale x 8 x i16> @llvm.aarch64.sve.asr.wide.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 2 x i64>) 382declare <vscale x 4 x i32> @llvm.aarch64.sve.asr.wide.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 2 x i64>) 383 384declare <vscale x 16 x i8> @llvm.aarch64.sve.asrd.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, i32) 385declare <vscale x 8 x i16> @llvm.aarch64.sve.asrd.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, i32) 386declare <vscale x 4 x i32> @llvm.aarch64.sve.asrd.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, i32) 387declare <vscale x 2 x i64> @llvm.aarch64.sve.asrd.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, i32) 388 389declare <vscale x 16 x i8> @llvm.aarch64.sve.insr.nxv16i8(<vscale x 16 x i8>, i8) 390declare <vscale x 8 x i16> @llvm.aarch64.sve.insr.nxv8i16(<vscale x 8 x i16>, i16) 391declare <vscale x 4 x i32> @llvm.aarch64.sve.insr.nxv4i32(<vscale x 4 x i32>, i32) 392declare <vscale x 2 x i64> @llvm.aarch64.sve.insr.nxv2i64(<vscale x 2 x i64>, i64) 393declare <vscale x 8 x half> @llvm.aarch64.sve.insr.nxv8f16(<vscale x 8 x half>, half) 394declare <vscale x 8 x bfloat> @llvm.aarch64.sve.insr.nxv8bf16(<vscale x 8 x bfloat>, bfloat) 395declare <vscale x 4 x float> @llvm.aarch64.sve.insr.nxv4f32(<vscale x 4 x float>, float) 396declare <vscale x 2 x double> @llvm.aarch64.sve.insr.nxv2f64(<vscale x 2 x double>, double) 397 398declare <vscale x 16 x i8> @llvm.aarch64.sve.lsl.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>) 399declare <vscale x 8 x i16> @llvm.aarch64.sve.lsl.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>) 400declare <vscale x 4 x i32> @llvm.aarch64.sve.lsl.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>) 401declare <vscale x 2 x i64> @llvm.aarch64.sve.lsl.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>) 402 403declare <vscale x 16 x i8> @llvm.aarch64.sve.lsl.wide.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 2 x i64>) 404declare <vscale x 8 x i16> @llvm.aarch64.sve.lsl.wide.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 2 x i64>) 405declare <vscale x 4 x i32> @llvm.aarch64.sve.lsl.wide.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 2 x i64>) 406 407declare <vscale x 16 x i8> @llvm.aarch64.sve.lsr.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 16 x i8>) 408declare <vscale x 8 x i16> @llvm.aarch64.sve.lsr.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 8 x i16>) 409declare <vscale x 4 x i32> @llvm.aarch64.sve.lsr.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 4 x i32>) 410declare <vscale x 2 x i64> @llvm.aarch64.sve.lsr.nxv2i64(<vscale x 2 x i1>, <vscale x 2 x i64>, <vscale x 2 x i64>) 411 412declare <vscale x 16 x i8> @llvm.aarch64.sve.lsr.wide.nxv16i8(<vscale x 16 x i1>, <vscale x 16 x i8>, <vscale x 2 x i64>) 413declare <vscale x 8 x i16> @llvm.aarch64.sve.lsr.wide.nxv8i16(<vscale x 8 x i1>, <vscale x 8 x i16>, <vscale x 2 x i64>) 414declare <vscale x 4 x i32> @llvm.aarch64.sve.lsr.wide.nxv4i32(<vscale x 4 x i1>, <vscale x 4 x i32>, <vscale x 2 x i64>) 415 416; +bf16 is required for the bfloat version. 417attributes #0 = { "target-features"="+sve,+bf16" } 418