1arch_cfgs:2 - arch_name: aarch643 target_feature: [sve]4 llvm_prefix: llvm.aarch64.sve56uses_neon_types: true7auto_llvm_sign_conversion: true8generate_load_store_tests: true910# `#[unstable(feature = "stdarch_aarch64_sve", issue = "145052")]`11sve-unstable: &sve-unstable12 FnCall: [unstable, ['feature = "stdarch_aarch64_sve"', 'issue= "145052"']]1314intrinsics:15 - name: svacge[{_n}_{type}]16 attr: [*sve-unstable]17 doc: Absolute compare greater than or equal to18 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]19 return_type: "{predicate}"20 types: [f32, f64]21 assert_instr: [facge]22 n_variant_op: op223 compose:24 - LLVMLink: { name: "facge.{sve_type}" }2526 - name: svacgt[{_n}_{type}]27 attr: [*sve-unstable]28 doc: Absolute compare greater than29 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]30 return_type: "{predicate}"31 types: [f32, f64]32 assert_instr: [facgt]33 n_variant_op: op234 compose:35 - LLVMLink: { name: "facgt.{sve_type}" }3637 - name: svacle[{_n}_{type}]38 attr: [*sve-unstable]39 doc: Absolute compare less than or equal to40 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]41 return_type: "{predicate}"42 types: [f32, f64]43 assert_instr: [facge]44 n_variant_op: op245 compose:46 - FnCall: ["svacge_{type}", [$pg, $op2, $op1]]4748 - name: svaclt[{_n}_{type}]49 attr: [*sve-unstable]50 doc: Absolute compare less than51 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]52 return_type: "{predicate}"53 types: [f32, f64]54 assert_instr: [facgt]55 n_variant_op: op256 compose:57 - FnCall: ["svacgt_{type}", [$pg, $op2, $op1]]5859 - name: svcadd[_{type}]{_mxz}60 attr: [*sve-unstable]61 doc: Complex add with rotate62 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]63 return_type: "{sve_type}"64 types: [f32, f64]65 static_defs: ["const IMM_ROTATION: i32"]66 constraints: [{ variable: IMM_ROTATION, any_values: [90, 270] }]67 assert_instr: [[fcadd, "IMM_ROTATION = 90"]]68 zeroing_method: { select: op1 }69 compose:70 - LLVMLink:71 name: fcadd.{sve_type}72 arguments:73 - "pg: {predicate}"74 - "op1: {sve_type}"75 - "op2: {sve_type}"76 - "imm_rotation: i32"77 - FnCall: ["{llvm_link}", [$pg, $op1, $op2, $IMM_ROTATION]]7879 - name: svcmla[_{type}]{_mxz}80 attr: [*sve-unstable]81 doc: Complex multiply-add with rotate82 arguments:83 - "pg: {predicate}"84 - "op1: {sve_type}"85 - "op2: {sve_type}"86 - "op3: {sve_type}"87 return_type: "{sve_type}"88 types: [f32, f64]89 static_defs: ["const IMM_ROTATION: i32"]90 constraints: [{ variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }]91 assert_instr: [[fcmla, "IMM_ROTATION = 90"]]92 zeroing_method: { select: op1 }93 compose:94 - LLVMLink:95 name: fcmla.{sve_type}96 arguments:97 - "pg: {predicate}"98 - "op1: {sve_type}"99 - "op2: {sve_type}"100 - "op3: {sve_type}"101 - "imm_rotation: i32"102 - FnCall: ["{llvm_link}", [$pg, $op1, $op2, $op3, $IMM_ROTATION]]103104 - name: svcmla_lane[_{type}]105 attr: [*sve-unstable]106 doc: Complex multiply-add with rotate107 arguments: ["op1: {sve_type}", "op2: {sve_type}", "op3: {sve_type}"]108 return_type: "{sve_type}"109 types: [f32]110 static_defs: ["const IMM_INDEX: i32", "const IMM_ROTATION: i32"]111 constraints:112 - variable: IMM_INDEX113 range: { match_size: "{type}", default: [0, 1], halfword: [0, 3] }114 - { variable: IMM_ROTATION, any_values: [0, 90, 180, 270] }115 assert_instr: [[fcmla, "IMM_INDEX = 0, IMM_ROTATION = 90"]]116 compose:117 - LLVMLink:118 name: fcmla.lane.x.{sve_type}119 arguments:120 - "op1: {sve_type}"121 - "op2: {sve_type}"122 - "op3: {sve_type}"123 - "imm_index: i32"124 - "imm_rotation: i32"125 - FnCall: ["{llvm_link}", [$op1, $op2, $op3, $IMM_INDEX, $IMM_ROTATION]]126127 - name: svadd[{_n}_{type}]{_mxz}128 attr: [*sve-unstable]129 doc: Add130 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]131 return_type: "{sve_type}"132 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]133 zeroing_method: { select: op1 }134 assert_instr: ["{type_kind.f}add"]135 n_variant_op: op2136 compose:137 - LLVMLink: { name: "{type_kind.f}add.{sve_type}" }138139 - name: svqsub[{_n}_{type}]140 attr: [*sve-unstable]141 doc: Saturating subtract142 arguments: ["op1: {sve_type}", "op2: {sve_type}"]143 return_type: "{sve_type}"144 types: [i8, i16, i32, i64, u8, u16, u32, u64]145 assert_instr: ["{type_kind.su}qsub"]146 n_variant_op: op2147 compose:148 - LLVMLink: { name: "{type_kind.su}qsub.x.{sve_type}" }149150 - name: svcnt[_{type[0]}]{_mxz}151 attr: [*sve-unstable]152 doc: Count nonzero bits153 arguments:154 ["inactive: {sve_type[1]}", "pg: {predicate[0]}", "op: {sve_type[0]}"]155 return_type: "{sve_type[1]}"156 types:157 - [f32, u32]158 - [f64, u64]159 - [i8, u8]160 - [i16, u16]161 - [i32, u32]162 - [i64, u64]163 - [u8, u8]164 - [u16, u16]165 - [u32, u32]166 - [u64, u64]167 zeroing_method: { drop: inactive }168 assert_instr: [cnt]169 compose:170 - LLVMLink: { name: "cnt.{sve_type[0]}" }171172 - name: svcls[_{type[0]}]{_mxz}173 attr: [*sve-unstable]174 doc: Count leading sign bits175 arguments:176 ["inactive: {sve_type[1]}", "pg: {predicate[0]}", "op: {sve_type[0]}"]177 return_type: "{sve_type[1]}"178 types: [[i8, u8], [i16, u16], [i32, u32], [i64, u64]]179 zeroing_method: { drop: inactive }180 assert_instr: [cls]181 compose:182 - LLVMLink: { name: "cls.{sve_type[0]}" }183184 - name: svclz[_{type[0]}]{_mxz}185 attr: [*sve-unstable]186 doc: Count leading zero bits187 arguments:188 ["inactive: {sve_type[1]}", "pg: {predicate[0]}", "op: {sve_type[0]}"]189 return_type: "{sve_type[1]}"190 types:191 - [i8, u8]192 - [i16, u16]193 - [i32, u32]194 - [i64, u64]195 - [u8, u8]196 - [u16, u16]197 - [u32, u32]198 - [u64, u64]199 zeroing_method: { drop: inactive }200 assert_instr: [clz]201 compose:202 - LLVMLink: { name: "clz.{sve_type[0]}" }203204 - name: svext{size_literal[1]}[_{type[0]}]{_mxz}205 attr: [*sve-unstable]206 substitutions:207 sign_or_zero:208 match_kind: "{type[0]}"209 default: Sign210 unsigned: Zero211 kind_literal: { match_kind: "{type[0]}", default: s, unsigned: u }212 doc: "{sign_or_zero}-extend the low {size[1]} bits"213 arguments:214 ["inactive: {sve_type[0]}", "pg: {predicate[0]}", "op: {sve_type[0]}"]215 return_type: "{sve_type[0]}"216 types:217 - [[i16, i32, i64, u16, u32, u64], i8]218 - [[i32, i64, u32, u64], i16]219 - [[i64, u64], i32]220 zeroing_method: { drop: inactive }221 assert_instr: ["{type_kind[0].su}xt{size_literal[1]}"]222 compose:223 - LLVMLink:224 name: "{type_kind[0].su}xt{size_literal[1]}.{sve_type[0]}"225226 - name: svsqrt[_{type}]{_mxz}227 attr: [*sve-unstable]228 doc: Square root229 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {sve_type}"]230 return_type: "{sve_type}"231 types: [f32, f64]232 zeroing_method: { drop: inactive }233 assert_instr: [fsqrt]234 compose:235 - LLVMLink: { name: "fsqrt.{sve_type}" }236237 - name: svcmpeq[{_n}_{type}]238 attr: [*sve-unstable]239 doc: Compare equal to240 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]241 return_type: "{predicate}"242 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]243 assert_instr: [{ float: fcmeq, default: cmpeq }]244 n_variant_op: op2245 compose:246 - LLVMLink: { name: "{type_kind.f}cmpeq.{sve_type}" }247248 - name: svcmpeq_wide[{_n}_{type[0]}]249 attr: [*sve-unstable]250 doc: Compare equal to251 arguments:252 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]253 return_type: "{predicate[0]}"254 types:255 - [[i8, i16, i32], i64]256 assert_instr: [cmpeq]257 n_variant_op: op2258 compose:259 - LLVMLink: { name: "cmpeq.wide.{sve_type[0]}" }260261 - name: svcmpge[{_n}_{type}]262 attr: [*sve-unstable]263 doc: Compare greater than or equal to264 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]265 return_type: "{predicate}"266 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]267 assert_instr: [{ float: fcmge, default: cmpge, unsigned: cmphs }]268 n_variant_op: op2269 compose:270 - MatchKind:271 - "{type}"272 - default:273 LLVMLink: { name: "{type_kind.f}cmpge.{sve_type}" }274 unsigned:275 LLVMLink: { name: "cmphs.{sve_type}" }276277 - name: svcmpge_wide[{_n}_{type[0]}]278 attr: [*sve-unstable]279 doc: Compare greater than or equal to280 arguments:281 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]282 return_type: "{predicate[0]}"283 n_variant_op: op2284 types:285 - [[i8, i16, i32], i64]286 - [[u8, u16, u32], u64]287 assert_instr: [{ default: cmpge, unsigned: cmphs }]288 compose:289 - MatchKind:290 - "{type[0]}"291 - default:292 LLVMLink: { name: "cmpge.wide.{sve_type[0]}" }293 unsigned:294 LLVMLink: { name: "cmphs.wide.{sve_type[0]}" }295296 - name: svcmpgt[{_n}_{type}]297 attr: [*sve-unstable]298 doc: Compare greater than299 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]300 return_type: "{predicate}"301 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]302 assert_instr: [{ float: fcmgt, default: cmpgt, unsigned: cmphi }]303 n_variant_op: op2304 compose:305 - MatchKind:306 - "{type}"307 - default:308 LLVMLink: { name: "{type_kind.f}cmpgt.{sve_type}" }309 unsigned:310 LLVMLink: { name: "cmphi.{sve_type}" }311312 - name: svcmpgt_wide[{_n}_{type[0]}]313 attr: [*sve-unstable]314 doc: Compare greater than315 arguments:316 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]317 return_type: "{predicate[0]}"318 types:319 - [[i8, i16, i32], i64]320 - [[u8, u16, u32], u64]321 assert_instr: [{ default: cmpgt, unsigned: cmphi }]322 n_variant_op: op2323 compose:324 - MatchKind:325 - "{type[0]}"326 - default:327 LLVMLink: { name: "cmpgt.wide.{sve_type[0]}" }328 unsigned:329 LLVMLink: { name: "cmphi.wide.{sve_type[0]}" }330331 - name: svcmple[{_n}_{type}]332 attr: [*sve-unstable]333 doc: Compare less than or equal to334 arguments: ["pg: svbool_t", "op1: {sve_type}", "op2: {sve_type}"]335 return_type: "svbool_t"336 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]337 assert_instr: [{ float: fcmge, default: cmpge, unsigned: cmphs }]338 n_variant_op: op2339 compose:340 - FnCall: ["svcmpge_{type}", [$pg, $op2, $op1]]341342 - name: svcmple_wide[{_n}_{type[0]}]343 attr: [*sve-unstable]344 doc: Compare less than or equal to345 arguments:346 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]347 return_type: "{predicate[0]}"348 types:349 - [[i8, i16, i32], i64]350 - [[u8, u16, u32], u64]351 assert_instr: [{ default: cmple, unsigned: cmpls }]352 n_variant_op: op2353 compose:354 - MatchKind:355 - "{type[0]}"356 - default:357 LLVMLink: { name: "cmple.wide.{sve_type[0]}" }358 unsigned:359 LLVMLink: { name: "cmpls.wide.{sve_type[0]}" }360361 - name: svcmplt[{_n}_{type}]362 attr: [*sve-unstable]363 doc: Compare less than364 arguments: ["pg: svbool_t", "op1: {sve_type}", "op2: {sve_type}"]365 return_type: "svbool_t"366 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]367 assert_instr: [{ float: fcmgt, default: cmpgt, unsigned: cmphi }]368 n_variant_op: op2369 compose:370 - FnCall: ["svcmpgt_{type}", [$pg, $op2, $op1]]371372 - name: svcmplt_wide[{_n}_{type[0]}]373 attr: [*sve-unstable]374 doc: Compare less than375 arguments:376 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]377 return_type: "{predicate[0]}"378 types:379 - [[i8, i16, i32], i64]380 - [[u8, u16, u32], u64]381 assert_instr: [{ default: cmplt, unsigned: cmplo }]382 n_variant_op: op2383 compose:384 - MatchKind:385 - "{type[0]}"386 - default:387 LLVMLink: { name: "cmplt.wide.{sve_type[0]}" }388 unsigned:389 LLVMLink: { name: "cmplo.wide.{sve_type[0]}" }390391 - name: svcmpne[{_n}_{type}]392 attr: [*sve-unstable]393 doc: Compare not equal to394 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]395 return_type: "{predicate}"396 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]397 assert_instr: [{ float: fcmne, default: cmpne }]398 n_variant_op: op2399 compose:400 - LLVMLink: { name: "{type_kind.f}cmpne.{sve_type}" }401402 - name: svcmpne_wide[{_n}_{type[0]}]403 attr: [*sve-unstable]404 doc: Compare not equal to405 arguments:406 ["pg: {predicate[0]}", "op1: {sve_type[0]}", "op2: {sve_type[1]}"]407 return_type: "{predicate[0]}"408 types: [[[i8, i16, i32], i64]]409 assert_instr: [cmpne]410 n_variant_op: op2411 compose:412 - LLVMLink: { name: "cmpne.wide.{sve_type[0]}" }413414 - name: svcmpuo[{_n}_{type}]415 attr: [*sve-unstable]416 doc: Compare unordered with417 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]418 return_type: "{predicate}"419 types: [f32, f64]420 assert_instr: [fcmuo]421 n_variant_op: op2422 compose:423 - LLVMLink: { name: "fcmpuo.{sve_type}" }424425 - name: svcnt{size_literal}426 attr: [*sve-unstable]427 doc: Count the number of {size}-bit elements in a vector428 arguments: []429 return_type: u64430 types: [i8, i16, i32, i64]431 assert_instr:432 - default: { byte: rdvl, halfword: cnth, default: cntw, doubleword: cntd }433 compose:434 - FnCall: ["svcnt{size_literal}_pat", [], ["{{ svpattern::SV_ALL }}"]]435436 - name: svcnt{size_literal}_pat437 attr: [*sve-unstable]438 doc: Count the number of {size}-bit elements in a vector439 arguments: []440 static_defs: ["const PATTERN: svpattern"]441 return_type: u64442 assert_instr:443 - [rdvl, "PATTERN = {{ svpattern::SV_ALL }}"]444 - ["cnt{size_literal}", "PATTERN = {{ svpattern::SV_MUL4 }}"]445 types: [i8]446 compose:447 - LLVMLink:448 name: cnt{size_literal}449 arguments: ["pattern: svpattern"]450 - FnCall: ["{llvm_link}", [$PATTERN]]451452 - name: svcnt{size_literal}_pat453 attr: [*sve-unstable]454 doc: Count the number of {size}-bit elements in a vector455 arguments: []456 static_defs: ["const PATTERN: svpattern"]457 return_type: u64458 assert_instr: [["cnt{size_literal}", "PATTERN = {{ svpattern::SV_ALL }}"]]459 types: [i16, i32, i64]460 compose:461 - LLVMLink:462 name: cnt{size_literal}463 arguments: ["pattern: svpattern"]464 - FnCall: ["{llvm_link}", [$PATTERN]]465466 - name: svlen[_{type}]467 attr: [*sve-unstable]468 doc: Count the number of elements in a full vector469 arguments: ["_op: {sve_type}"]470 return_type: "u64"471 types: [i8, u8, i16, u16, i32, u32, f32, i64, u64, f64]472 assert_instr: [{ default: { default: "cnt{size_literal}", byte: rdvl } }]473 compose:474 - FnCall: ["svcnt{size_literal}", []]475476 - name: svdup[_n]_{type}477 attr: [*sve-unstable]478 doc: Broadcast a scalar value479 arguments: ["op: {type}"]480 return_type: "{sve_type}"481 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]482 assert_instr: [mov]483 compose:484 - LLVMLink: { name: "dup.x.{sve_type}" }485486 - name: svdup[_n]_{type}{_mxz}487 attr: [*sve-unstable]488 doc: Broadcast a scalar value489 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {type}"]490 return_type: "{sve_type}"491 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]492 zeroing_method: { drop: inactive }493 assert_instr: [mov]494 compose:495 - LLVMLink: { name: "dup.{sve_type}" }496497 - name: svdup[_n]_{type}498 attr: [*sve-unstable]499 doc: Broadcast a scalar value500 arguments: ["op: bool"]501 return_type: "{predicate}"502 types: [b8, b16, b32, b64]503 assert_instr: [sbfx, whilelo]504 compose:505 - LLVMLink: { name: "dup.x.{sve_type}" }506507 - name: svdup_lane[_{type[0]}]508 attr: [*sve-unstable]509 doc: Broadcast a scalar value510 arguments: ["data: {sve_type[0]}", "index: {type[1]}"]511 return_type: "{sve_type[0]}"512 types:513 - [f32, u32]514 - [f64, u64]515 - [i8, u8]516 - [i16, u16]517 - [i32, u32]518 - [i64, u64]519 - [u8, u8]520 - [u16, u16]521 - [u32, u32]522 - [u64, u64]523 assert_instr: [tbl]524 compose:525 - FnCall:526 - svtbl_{type[0]}527 - - $data528 - FnCall: ["svdup_n_{type[1]}", [$index]]529530 - name: svdupq_lane[_{type}]531 attr: [*sve-unstable]532 doc: Broadcast a quadword of scalars533 arguments: ["data: {sve_type}", "index: u64"]534 return_type: "{sve_type}"535 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]536 assert_instr: [tbl]537 compose:538 - LLVMLink: { name: "dupq.lane.{sve_type}" }539540 - name: svdupq[_n]_{type}541 attr: [*sve-unstable]542 doc: Broadcast a quadword of scalars543 arguments:544 - "x0: {type}"545 - "x1: {type}"546 - "x2: {type}"547 - "x3: {type}"548 - "x4: {type}"549 - "x5: {type}"550 - "x6: {type}"551 - "x7: {type}"552 - "x8: {type}"553 - "x9: {type}"554 - "x10: {type}"555 - "x11: {type}"556 - "x12: {type}"557 - "x13: {type}"558 - "x14: {type}"559 - "x15: {type}"560 return_type: "{sve_type}"561 types: [i8, u8]562 assert_instr: []563 compose:564 - LLVMLink:565 name: llvm.experimental.vector.insert.{sve_type}.{neon_type}566 arguments: ["op0: {sve_type}", "op1: {neon_type}", "idx: i64"]567 - Let:568 - op569 - FnCall:570 - "{llvm_link}"571 - - FnCall: ["svundef_{type}", [], [], true]572 - FnCall:573 - "crate::mem::transmute"574 - - - $x0575 - $x1576 - $x2577 - $x3578 - $x4579 - $x5580 - $x6581 - $x7582 - $x8583 - $x9584 - $x10585 - $x11586 - $x12587 - $x13588 - $x14589 - $x15590 - 0591 - FnCall: ["svdupq_lane_{type}", [$op, 0]]592593 - name: svdupq[_n]_{type}594 attr: [*sve-unstable]595 doc: Broadcast a quadword of scalars596 types: [b8]597 arguments:598 - "x0: bool"599 - "x1: bool"600 - "x2: bool"601 - "x3: bool"602 - "x4: bool"603 - "x5: bool"604 - "x6: bool"605 - "x7: bool"606 - "x8: bool"607 - "x9: bool"608 - "x10: bool"609 - "x11: bool"610 - "x12: bool"611 - "x13: bool"612 - "x14: bool"613 - "x15: bool"614 return_type: "svbool_t"615 assert_instr: []616 compose:617 - Let:618 - op1619 - FnCall:620 - svdupq_n_s8621 - - CastAs: [$x0, i8]622 - CastAs: [$x1, i8]623 - CastAs: [$x2, i8]624 - CastAs: [$x3, i8]625 - CastAs: [$x4, i8]626 - CastAs: [$x5, i8]627 - CastAs: [$x6, i8]628 - CastAs: [$x7, i8]629 - CastAs: [$x8, i8]630 - CastAs: [$x9, i8]631 - CastAs: [$x10, i8]632 - CastAs: [$x11, i8]633 - CastAs: [$x12, i8]634 - CastAs: [$x13, i8]635 - CastAs: [$x14, i8]636 - CastAs: [$x15, i8]637 - FnCall:638 - svcmpne_wide_s8639 - - FnCall: [svptrue_b8, []]640 - $op1641 - FnCall: [svdup_n_s64, [0]]642643 - name: svdupq[_n]_{type}644 attr: [*sve-unstable]645 doc: Broadcast a quadword of scalars646 arguments:647 - "x0: {type}"648 - "x1: {type}"649 - "x2: {type}"650 - "x3: {type}"651 - "x4: {type}"652 - "x5: {type}"653 - "x6: {type}"654 - "x7: {type}"655 return_type: "{sve_type}"656 types: [i16, u16]657 assert_instr: []658 compose:659 - LLVMLink:660 name: llvm.experimental.vector.insert.{sve_type}.{neon_type}661 arguments: ["op0: {sve_type}", "op1: {neon_type}", "idx: i64"]662 - Let:663 - op664 - FnCall:665 - "{llvm_link}"666 - - FnCall: ["svundef_{type}", [], [], true]667 - FnCall:668 - "crate::mem::transmute"669 - - [$x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7]670 - 0671 - FnCall: ["svdupq_lane_{type}", [$op, 0]]672673 - name: svdupq[_n]_{type}674 attr: [*sve-unstable]675 doc: Broadcast a quadword of scalars676 types: [b16]677 arguments:678 - "x0: bool"679 - "x1: bool"680 - "x2: bool"681 - "x3: bool"682 - "x4: bool"683 - "x5: bool"684 - "x6: bool"685 - "x7: bool"686 return_type: svbool_t687 assert_instr: []688 compose:689 - Let:690 - op1691 - FnCall:692 - svdupq_n_s16693 - - CastAs: [$x0, i16]694 - CastAs: [$x1, i16]695 - CastAs: [$x2, i16]696 - CastAs: [$x3, i16]697 - CastAs: [$x4, i16]698 - CastAs: [$x5, i16]699 - CastAs: [$x6, i16]700 - CastAs: [$x7, i16]701 - FnCall:702 - svcmpne_wide_s16703 - - FnCall: [svptrue_b16, []]704 - $op1705 - FnCall: [svdup_n_s64, [0]]706707 - name: svdupq[_n]_{type}708 attr: [*sve-unstable]709 doc: Broadcast a quadword of scalars710 arguments: ["x0: {type}", "x1: {type}", "x2: {type}", "x3: {type}"]711 return_type: "{sve_type}"712 types: [f32, i32, u32]713 assert_instr: []714 compose:715 - LLVMLink:716 name: llvm.experimental.vector.insert.{sve_type}.{neon_type}717 arguments: ["op0: {sve_type}", "op1: {neon_type}", "idx: i64"]718 - Let:719 - op720 - FnCall:721 - "{llvm_link}"722 - - FnCall: ["svundef_{type}", [], [], true]723 - FnCall: ["crate::mem::transmute", [[$x0, $x1, $x2, $x3]]]724 - 0725 - FnCall: ["svdupq_lane_{type}", [$op, 0]]726727 - name: svdupq[_n]_{type}728 attr: [*sve-unstable]729 doc: Broadcast a quadword of scalars730 types: [b32]731 arguments: ["x0: bool", "x1: bool", "x2: bool", "x3: bool"]732 return_type: "svbool_t"733 assert_instr: []734 compose:735 - Let:736 - op1737 - FnCall:738 - svdupq_n_s32739 - - CastAs: [$x0, i32]740 - CastAs: [$x1, i32]741 - CastAs: [$x2, i32]742 - CastAs: [$x3, i32]743 - FnCall:744 - svcmpne_wide_s32745 - - FnCall: [svptrue_b32, []]746 - $op1747 - FnCall: [svdup_n_s64, [0]]748749 - name: svdupq[_n]_{type}750 attr: [*sve-unstable]751 doc: Broadcast a quadword of scalars752 arguments: ["x0: {type}", "x1: {type}"]753 return_type: "{sve_type}"754 types: [f64, i64, u64]755 assert_instr: []756 compose:757 - LLVMLink:758 name: llvm.experimental.vector.insert.{sve_type}.{neon_type}759 arguments: ["op0: {sve_type}", "op1: {neon_type}", "idx: i64"]760 - Let:761 - op762 - FnCall:763 - "{llvm_link}"764 - - FnCall: ["svundef_{type}", [], [], true]765 - FnCall: ["crate::mem::transmute", [[$x0, $x1]]]766 - 0767 - FnCall: ["svdupq_lane_{type}", [$op, 0]]768769 - name: svdupq[_n]_{type}770 attr: [*sve-unstable]771 doc: Broadcast a quadword of scalars772 types: [b64]773 arguments: ["x0: bool", "x1: bool"]774 return_type: "svbool_t"775 assert_instr: []776 compose:777 - Let:778 - op1779 - FnCall: [svdupq_n_s64, [CastAs: [$x0, i64], CastAs: [$x1, i64]]]780 - FnCall:781 - svcmpne_s64782 - - FnCall: [svptrue_b64, []]783 - $op1784 - FnCall: [svdup_n_s64, [0]]785786 - name: svcreate2[_{type}]787 attr: [*sve-unstable]788 doc: Create a tuple of two vectors789 arguments: ["x0: {sve_type}", "x1: {sve_type}"]790 return_type: "{sve_type_x2}"791 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]792 assert_instr: []793 compose:794 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_create2", [$x0, $x1], [], true]795796 - name: svcreate3[_{type}]797 attr: [*sve-unstable]798 doc: Create a tuple of three vectors799 arguments: ["x0: {sve_type}", "x1: {sve_type}", "x2: {sve_type}"]800 return_type: "{sve_type_x3}"801 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]802 assert_instr: []803 compose:804 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_create3", [$x0, $x1, $x2], [], true]805806 - name: svcreate4[_{type}]807 attr: [*sve-unstable]808 doc: Create a tuple of four vectors809 arguments:810 ["x0: {sve_type}", "x1: {sve_type}", "x2: {sve_type}", "x3: {sve_type}"]811 return_type: "{sve_type_x4}"812 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]813 assert_instr: []814 compose:815 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_create4", [$x0, $x1, $x2, $x3], [], true]816817 - name: svundef_{type}818 attr: [*sve-unstable]819 safety:820 unsafe: [uninitialized]821 doc: Create an uninitialized vector822 arguments: []823 return_type: "{sve_type}"824 types: [i8, i16, i32, i64, u8, u16, u32, u64]825 assert_instr: []826 compose:827 - FnCall: ["svdup_n_{type}", ["0"]]828829 - name: svundef_{type}830 attr: [*sve-unstable]831 safety:832 unsafe: [uninitialized]833 doc: Create an uninitialized vector834 arguments: []835 return_type: "{sve_type}"836 types: [f32, f64]837 assert_instr: []838 compose:839 - FnCall: ["svdup_n_{type}", ["0{type}"]]840841 - name: svundef2_{type}842 attr: [*sve-unstable]843 safety:844 unsafe: [uninitialized]845 doc: Create an uninitialized tuple of two vectors846 arguments: []847 return_type: "{sve_type_x2}"848 types: [i8, i16, i32, i64, u8, u16, u32, u64]849 assert_instr: []850 compose:851 - FnCall:852 - "svcreate2_{type}"853 - - FnCall: ["svdup_n_{type}", ["0"]]854 - FnCall: ["svdup_n_{type}", ["0"]]855856 - name: svundef2_{type}857 attr: [*sve-unstable]858 safety:859 unsafe: [uninitialized]860 doc: Create an uninitialized tuple of two vectors861 arguments: []862 return_type: "{sve_type_x2}"863 types: [f32, f64]864 assert_instr: []865 compose:866 - FnCall:867 - "svcreate2_{type}"868 - - FnCall: ["svdup_n_{type}", ["0{type}"]]869 - FnCall: ["svdup_n_{type}", ["0{type}"]]870871 - name: svundef3_{type}872 attr: [*sve-unstable]873 safety:874 unsafe: [uninitialized]875 doc: Create an uninitialized tuple of three vectors876 arguments: []877 return_type: "{sve_type_x3}"878 types: [i8, i16, i32, i64, u8, u16, u32, u64]879 assert_instr: []880 compose:881 - FnCall:882 - "svcreate3_{type}"883 - - FnCall: ["svdup_n_{type}", ["0"]]884 - FnCall: ["svdup_n_{type}", ["0"]]885 - FnCall: ["svdup_n_{type}", ["0"]]886887 - name: svundef3_{type}888 attr: [*sve-unstable]889 safety:890 unsafe: [uninitialized]891 doc: Create an uninitialized tuple of three vectors892 arguments: []893 return_type: "{sve_type_x3}"894 types: [f32, f64]895 assert_instr: []896 compose:897 - FnCall:898 - "svcreate3_{type}"899 - - FnCall: ["svdup_n_{type}", ["0{type}"]]900 - FnCall: ["svdup_n_{type}", ["0{type}"]]901 - FnCall: ["svdup_n_{type}", ["0{type}"]]902903 - name: svundef4_{type}904 attr: [*sve-unstable]905 safety:906 unsafe: [uninitialized]907 doc: Create an uninitialized tuple of four vectors908 arguments: []909 return_type: "{sve_type_x4}"910 types: [i8, i16, i32, i64, u8, u16, u32, u64]911 assert_instr: []912 compose:913 - FnCall:914 - "svcreate4_{type}"915 - - FnCall: ["svdup_n_{type}", ["0"]]916 - FnCall: ["svdup_n_{type}", ["0"]]917 - FnCall: ["svdup_n_{type}", ["0"]]918 - FnCall: ["svdup_n_{type}", ["0"]]919920 - name: svundef4_{type}921 attr: [*sve-unstable]922 safety:923 unsafe: [uninitialized]924 doc: Create an uninitialized tuple of four vectors925 arguments: []926 return_type: "{sve_type_x4}"927 types: [f32, f64]928 assert_instr: []929 compose:930 - FnCall:931 - "svcreate4_{type}"932 - - FnCall: ["svdup_n_{type}", ["0{type}"]]933 - FnCall: ["svdup_n_{type}", ["0{type}"]]934 - FnCall: ["svdup_n_{type}", ["0{type}"]]935 - FnCall: ["svdup_n_{type}", ["0{type}"]]936937 - name: svindex_{type}938 attr: [*sve-unstable]939 doc: Create linear series940 arguments: ["base: {type}", "step: {type}"]941 return_type: "{sve_type}"942 types: [i8, i16, i32, i64, u8, u16, u32, u64]943 assert_instr: [index]944 compose:945 - LLVMLink: { name: "index.{sve_type}" }946947 - name: svget2[_{type}]948 attr: [*sve-unstable]949 doc: Extract one vector from a tuple of two vectors950 arguments: ["tuple: {sve_type_x2}"]951 static_defs: ["const IMM_INDEX: i32"]952 constraints: [{ variable: IMM_INDEX, range: [0, 1] }]953 return_type: "{sve_type}"954 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]955 assert_instr: []956 compose:957 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_get", [$tuple], ["_", "_", "{{IMM_INDEX}}"], true]958959 - name: svget3[_{type}]960 attr: [*sve-unstable]961 doc: Extract one vector from a tuple of three vectors962 arguments: ["tuple: {sve_type_x3}"]963 static_defs: ["const IMM_INDEX: i32"]964 constraints: [{ variable: IMM_INDEX, range: [0, 2] }]965 return_type: "{sve_type}"966 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]967 assert_instr: []968 compose:969 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_get", [$tuple], ["_", "_", "{{IMM_INDEX}}"], true]970971 - name: svget4[_{type}]972 attr: [*sve-unstable]973 doc: Extract one vector from a tuple of four vectors974 arguments: ["tuple: {sve_type_x4}"]975 static_defs: ["const IMM_INDEX: i32"]976 constraints: [{ variable: IMM_INDEX, range: [0, 3] }]977 return_type: "{sve_type}"978 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]979 assert_instr: []980 compose:981 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_get", [$tuple], ["_", "_", "{{IMM_INDEX}}"], true]982983 - name: svset2[_{type}]984 attr: [*sve-unstable]985 doc: Change one vector in a tuple of two vectors986 arguments: ["tuple: {sve_type_x2}", "x: {sve_type}"]987 static_defs: ["const IMM_INDEX: i32"]988 constraints: [{ variable: IMM_INDEX, range: [0, 1] }]989 return_type: "{sve_type_x2}"990 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]991 assert_instr: []992 compose:993 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_set", [$tuple, $x], ["_", "_", "{{IMM_INDEX}}"], true]994995 - name: svset3[_{type}]996 attr: [*sve-unstable]997 doc: Change one vector in a tuple of three vectors998 arguments: ["tuple: {sve_type_x3}", "x: {sve_type}"]999 static_defs: ["const IMM_INDEX: i32"]1000 constraints: [{ variable: IMM_INDEX, range: [0, 2] }]1001 return_type: "{sve_type_x3}"1002 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1003 assert_instr: []1004 compose:1005 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_set", [$tuple, $x], ["_", "_", "{{IMM_INDEX}}"], true]10061007 - name: svset4[_{type}]1008 attr: [*sve-unstable]1009 doc: Change one vector in a tuple of four vectors1010 arguments: ["tuple: {sve_type_x4}", "x: {sve_type}"]1011 static_defs: ["const IMM_INDEX: i32"]1012 constraints: [{ variable: IMM_INDEX, range: [0, 3] }]1013 return_type: "{sve_type_x4}"1014 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1015 assert_instr: []1016 compose:1017 - FnCall: ["crate::intrinsics::simd::scalable::sve_tuple_set", [$tuple, $x], ["_", "_", "{{IMM_INDEX}}"], true]10181019 - name: svzip1[_{type}]1020 attr: [*sve-unstable]1021 doc: Interleave elements from low halves of two inputs1022 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1023 return_type: "{sve_type}"1024 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1025 assert_instr: [zip1]1026 compose:1027 - LLVMLink: { name: "zip1.{sve_type}" }10281029 - name: svzip1_{type}1030 attr: [*sve-unstable]1031 doc: Interleave elements from low halves of two inputs1032 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1033 return_type: "{sve_type}"1034 types: [b8, b16, b32, b64]1035 assert_instr: [zip1]1036 compose:1037 - LLVMLink: { name: "zip1.{sve_type}" }10381039 - name: svzip1q[_{type}]1040 attr: [*sve-unstable]1041 doc: Interleave quadwords from low halves of two inputs1042 target_features: [f64mm]1043 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1044 return_type: "{sve_type}"1045 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1046 assert_instr: [zip1]1047 compose:1048 - LLVMLink: { name: "zip1q.{sve_type}" }10491050 - name: svzip2[_{type}]1051 attr: [*sve-unstable]1052 doc: Interleave elements from high halves of two inputs1053 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1054 return_type: "{sve_type}"1055 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1056 assert_instr: [zip2]1057 compose:1058 - LLVMLink: { name: "zip2.{sve_type}" }10591060 - name: svzip2_{type}1061 attr: [*sve-unstable]1062 doc: Interleave elements from high halves of two inputs1063 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1064 return_type: "{sve_type}"1065 types: [b8, b16, b32, b64]1066 assert_instr: [zip2]1067 compose:1068 - LLVMLink: { name: "zip2.{sve_type}" }10691070 - name: svzip2q[_{type}]1071 attr: [*sve-unstable]1072 doc: Interleave quadwords from high halves of two inputs1073 target_features: [f64mm]1074 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1075 return_type: "{sve_type}"1076 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1077 assert_instr: [zip2]1078 compose:1079 - LLVMLink: { name: "zip2q.{sve_type}" }10801081 - name: svuzp1[_{type}]1082 attr: [*sve-unstable]1083 doc: Concatenate even elements from two inputs1084 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1085 return_type: "{sve_type}"1086 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1087 assert_instr: [uzp1]1088 compose:1089 - LLVMLink: { name: "uzp1.{sve_type}" }10901091 - name: svuzp1_{type}1092 attr: [*sve-unstable]1093 doc: Concatenate even elements from two inputs1094 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1095 return_type: "{sve_type}"1096 types: [b8, b16, b32, b64]1097 assert_instr: [uzp1]1098 compose:1099 - LLVMLink: { name: "uzp1.{sve_type}" }11001101 - name: svuzp1q[_{type}]1102 attr: [*sve-unstable]1103 doc: Concatenate even quadwords from two inputs1104 target_features: [f64mm]1105 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1106 return_type: "{sve_type}"1107 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1108 assert_instr: [uzp1]1109 compose:1110 - LLVMLink: { name: "uzp1q.{sve_type}" }11111112 - name: svuzp2[_{type}]1113 attr: [*sve-unstable]1114 doc: Concatenate odd elements from two inputs1115 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1116 return_type: "{sve_type}"1117 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1118 assert_instr: [uzp2]1119 compose:1120 - LLVMLink: { name: "uzp2.{sve_type}" }11211122 - name: svuzp2_{type}1123 attr: [*sve-unstable]1124 doc: Concatenate odd elements from two inputs1125 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1126 return_type: "{sve_type}"1127 types: [b8, b16, b32, b64]1128 assert_instr: [uzp2]1129 compose:1130 - LLVMLink: { name: "uzp2.{sve_type}" }11311132 - name: svuzp2q[_{type}]1133 attr: [*sve-unstable]1134 doc: Concatenate odd quadwords from two inputs1135 target_features: [f64mm]1136 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1137 return_type: "{sve_type}"1138 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1139 assert_instr: [uzp2]1140 compose:1141 - LLVMLink: { name: "uzp2q.{sve_type}" }11421143 - name: svtrn1[_{type}]1144 attr: [*sve-unstable]1145 doc: Interleave even elements from two inputs1146 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1147 return_type: "{sve_type}"1148 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1149 assert_instr: [trn1]1150 compose:1151 - LLVMLink: { name: "trn1.{sve_type}" }11521153 - name: svtrn1_{type}1154 attr: [*sve-unstable]1155 doc: Interleave even elements from two inputs1156 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1157 return_type: "{sve_type}"1158 types: [b8, b16, b32, b64]1159 assert_instr: [trn1]1160 compose:1161 - LLVMLink: { name: "trn1.{sve_type}" }11621163 - name: svtrn1q[_{type}]1164 attr: [*sve-unstable]1165 doc: Interleave even quadwords from two inputs1166 target_features: [f64mm]1167 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1168 return_type: "{sve_type}"1169 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1170 assert_instr: [trn1]1171 compose:1172 - LLVMLink: { name: "trn1q.{sve_type}" }11731174 - name: svtrn2[_{type}]1175 attr: [*sve-unstable]1176 doc: Interleave odd elements from two inputs1177 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1178 return_type: "{sve_type}"1179 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1180 assert_instr: [trn2]1181 compose:1182 - LLVMLink: { name: "trn2.{sve_type}" }11831184 - name: svtrn2_{type}1185 attr: [*sve-unstable]1186 doc: Interleave odd elements from two inputs1187 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1188 return_type: "{sve_type}"1189 types: [b8, b16, b32, b64]1190 assert_instr: [trn2]1191 compose:1192 - LLVMLink: { name: "trn2.{sve_type}" }11931194 - name: svtrn2q[_{type}]1195 attr: [*sve-unstable]1196 doc: Interleave odd quadwords from two inputs1197 target_features: [f64mm]1198 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1199 return_type: "{sve_type}"1200 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1201 assert_instr: [trn2]1202 compose:1203 - LLVMLink: { name: "trn2q.{sve_type}" }12041205 - name: svrev[_{type}]1206 attr: [*sve-unstable]1207 doc: Reverse all elements1208 arguments: ["op: {sve_type}"]1209 return_type: "{sve_type}"1210 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1211 assert_instr: [rev]1212 compose:1213 - LLVMLink: { name: "rev.{sve_type}" }12141215 - name: svrev_{type}1216 attr: [*sve-unstable]1217 doc: Reverse all elements1218 arguments: ["op: {sve_type}"]1219 return_type: "{sve_type}"1220 types: [b8, b16, b32, b64]1221 assert_instr: [rev]1222 compose:1223 - LLVMLink: { name: "rev.{sve_type}" }12241225 - name: svrevb[_{type}]{_mxz}1226 attr: [*sve-unstable]1227 doc: Reverse bytes within elements1228 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {sve_type}"]1229 return_type: "{sve_type}"1230 types: [i16, i32, i64, u16, u32, u64]1231 zeroing_method: { drop: "inactive" }1232 assert_instr: [revb]1233 compose:1234 - LLVMLink: { name: "revb.{sve_type}" }12351236 - name: svrevh[_{type}]{_mxz}1237 attr: [*sve-unstable]1238 doc: Reverse halfwords within elements1239 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {sve_type}"]1240 return_type: "{sve_type}"1241 types: [i32, i64, u32, u64]1242 zeroing_method: { drop: "inactive" }1243 assert_instr: [revh]1244 compose:1245 - LLVMLink: { name: "revh.{sve_type}" }12461247 - name: svrevw[_{type}]{_mxz}1248 attr: [*sve-unstable]1249 doc: Reverse words within elements1250 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {sve_type}"]1251 return_type: "{sve_type}"1252 types: [i64, u64]1253 zeroing_method: { drop: "inactive" }1254 assert_instr: [revw]1255 compose:1256 - LLVMLink: { name: "revw.{sve_type}" }12571258 - name: svrbit[_{type}]{_mxz}1259 attr: [*sve-unstable]1260 doc: Reverse bits1261 arguments: ["inactive: {sve_type}", "pg: {predicate}", "op: {sve_type}"]1262 return_type: "{sve_type}"1263 types: [i8, i16, i32, i64, u8, u16, u32, u64]1264 zeroing_method: { drop: "inactive" }1265 assert_instr: [rbit]1266 compose:1267 - LLVMLink: { name: "rbit.{sve_type}" }12681269 - name: svext[_{type}]1270 attr: [*sve-unstable]1271 doc: Extract vector from pair of vectors1272 arguments: ["op1: {sve_type}", "op2: {sve_type}"]1273 return_type: "{sve_type}"1274 static_defs: ["const IMM3: i32"]1275 constraints: [{ variable: IMM3, sve_max_elems_type: "{type}" }]1276 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1277 assert_instr: [[ext, "IMM3 = 1"]]1278 compose:1279 - LLVMLink:1280 name: ext.{sve_type}1281 arguments: ["op1: {sve_type}", "op2: {sve_type}", "imm3: i32"]1282 - FnCall: ["{llvm_link}", [$op1, $op2, $IMM3]]12831284 - name: svsplice[_{type}]1285 attr: [*sve-unstable]1286 doc: Splice two vectors under predicate control1287 arguments: ["pg: {predicate}", "op1: {sve_type}", "op2: {sve_type}"]1288 return_type: "{sve_type}"1289 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1290 assert_instr: [splice]1291 compose:1292 - LLVMLink: { name: "splice.{sve_type}" }12931294 - name: svinsr[_n_{type}]1295 attr: [*sve-unstable]1296 doc: Insert scalar in shifted vector1297 arguments: ["op1: {sve_type}", "op2: {type}"]1298 return_type: "{sve_type}"1299 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1300 assert_instr: [insr]1301 compose:1302 - LLVMLink: { name: "insr.{sve_type}" }13031304 - name: svld1[_{type}]1305 attr: [*sve-unstable]1306 doc: Unextended load1307 safety:1308 unsafe:1309 - pointer_offset: predicated1310 - dereference: predicated1311 arguments: ["pg: {predicate}", "base: *{type}"]1312 return_type: "{sve_type}"1313 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1314 assert_instr: ["ld1{size_literal}"]1315 test: { load: 0 }1316 compose:1317 - LLVMLink: { name: "ld1.{sve_type}" }13181319 - name: svld1_vnum[_{type}]1320 attr: [*sve-unstable]1321 doc: Unextended load1322 safety:1323 unsafe:1324 - pointer_offset_vnum: predicated1325 - dereference: predicated1326 arguments: ["pg: {predicate}", "base: *{type}", "vnum: i64"]1327 return_type: "{sve_type}"1328 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1329 assert_instr: ["ld1{size_literal}"]1330 test: { load: 0 }1331 compose:1332 - FnCall:1333 - "svld1_{type}"1334 - - $pg1335 - MethodCall:1336 - $base1337 - offset1338 - - Multiply:1339 - CastAs: [{ FnCall: ["svcnt{size_literal}", []] }, isize]1340 - CastAs: [$vnum, isize]13411342 - name: svld1_gather_[{type[0]}]index[_{type[1]}]1343 attr: [*sve-unstable]1344 doc: Unextended load1345 safety:1346 unsafe:1347 - pointer_offset: predicated1348 - dereference: predicated1349 arguments:1350 ["pg: {predicate[0]}", "base: *{type[1]}", "indices: {sve_type[0]}"]1351 return_type: "{sve_type[1]}"1352 types:1353 - [[i32, u32], [f32, i32, u32]]1354 - [[i64, u64], [f64, i64, u64]]1355 assert_instr: ["ld1{size_literal[0]}"]1356 test: { load: 1 }1357 compose:1358 - MatchSize:1359 - "{type[0]}"1360 - default:1361 LLVMLink:1362 name: "ld1.gather.{type_kind[0].su}xtw.index.{sve_type[1]}"1363 doubleword:1364 LLVMLink:1365 name: "ld1.gather.index.{sve_type[1]}"13661367 - name: svld1_gather_[{type[0]}]offset[_{type[1]}]1368 attr: [*sve-unstable]1369 doc: Unextended load1370 safety:1371 unsafe:1372 - pointer_offset: predicated1373 - dereference: predicated1374 arguments:1375 ["pg: {predicate[0]}", "base: *{type[1]}", "offsets: {sve_type[0]}"]1376 return_type: "{sve_type[1]}"1377 types:1378 - [[i32, u32], [f32, i32, u32]]1379 - [[i64, u64], [f64, i64, u64]]1380 assert_instr: ["ld1{size_literal[0]}"]1381 test: { load: 1 }1382 compose:1383 - MatchSize:1384 - "{type[0]}"1385 - default:1386 LLVMLink:1387 name: "ld1.gather.{type_kind[0].su}xtw.{sve_type[1]}"1388 doubleword:1389 LLVMLink:1390 name: "ld1.gather.{sve_type[1]}"13911392 - name: svld1_gather[_{type[0]}base]_offset_{type[1]}1393 attr: [*sve-unstable]1394 doc: Unextended load1395 safety:1396 unsafe:1397 - pointer_offset: predicated1398 - dereference: predicated1399 - no_provenance: bases1400 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "offset: i64"]1401 return_type: "{sve_type[1]}"1402 types:1403 - [u32, [f32, i32, u32]]1404 - [u64, [f64, i64, u64]]1405 assert_instr: ["ld1{size_literal[0]}"]1406 test: { load: 1 }1407 compose:1408 - LLVMLink:1409 name: "ld1.gather.scalar.offset.{sve_type[1]}.{sve_type[0]}"14101411 - name: svld1_gather[_{type[0]}base]_{type[1]}1412 attr: [*sve-unstable]1413 doc: Unextended load1414 safety:1415 unsafe:1416 - pointer_offset: predicated1417 - dereference: predicated1418 - no_provenance: bases1419 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}"]1420 return_type: "{sve_type[1]}"1421 types:1422 - [u32, [f32, i32, u32]]1423 - [u64, [f64, i64, u64]]1424 assert_instr: ["ld1{size_literal[0]}"]1425 test: { load: 1 }1426 compose:1427 - FnCall:1428 - "svld1_gather_{type[0]}base_offset_{type[1]}"1429 - - $pg1430 - $bases1431 - 014321433 - name: svld1_gather[_{type[0]}base]_index_{type[1]}1434 attr: [*sve-unstable]1435 doc: Unextended load1436 safety:1437 unsafe:1438 - pointer_offset: predicated1439 - dereference: predicated1440 - no_provenance: bases1441 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "index: i64"]1442 return_type: "{sve_type[1]}"1443 types:1444 - [u32, [f32, i32, u32]]1445 - [u64, [f64, i64, u64]]1446 assert_instr: ["ld1{size_literal[0]}"]1447 test: { load: 1 }1448 compose:1449 - FnCall:1450 - "svld1_gather_{type[0]}base_offset_{type[1]}"1451 - - $pg1452 - $bases1453 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[0]}"]]14541455 - name: svld1s{size_literal[2]}_gather_[{type[0]}]index_{type[1]}1456 attr: [*sve-unstable]1457 doc: Load {size[2]}-bit data and sign-extend1458 safety:1459 unsafe:1460 - pointer_offset: predicated1461 - dereference: predicated1462 arguments:1463 ["pg: {predicate[0]}", "base: *{type[2]}", "indices: {sve_type[0]}"]1464 return_type: "{sve_type[1]}"1465 types:1466 - [[i32, u32], [i32, u32], i16]1467 - [[i64, u64], [i64, u64], [i16, i32]]1468 assert_instr: ["ld1s{size_literal[2]}"]1469 test: { load: 2 }1470 compose:1471 - MatchSize:1472 - "{type[0]}"1473 - default:1474 LLVMLink:1475 name: "ld1.gather.{type_kind[0].su}xtw.index.{sve_type[1] as {type[2]}}"1476 return_type: "{sve_type[1] as {type[2]}}"1477 doubleword:1478 LLVMLink:1479 name: "ld1.gather.index.{sve_type[1] as {type[2]}}"1480 return_type: "{sve_type[1] as {type[2]}}"1481 - FnCall:1482 - crate::intrinsics::simd::simd_cast1483 - - FnCall: ["{llvm_link}", [$pg, $base, $indices]]14841485 - name: svld1u{size_literal[2]}_gather_[{type[0]}]index_{type[1]}1486 attr: [*sve-unstable]1487 doc: Load {size[2]}-bit data and zero-extend1488 safety:1489 unsafe:1490 - pointer_offset: predicated1491 - dereference: predicated1492 arguments:1493 ["pg: {predicate[0]}", "base: *{type[2]}", "indices: {sve_type[0]}"]1494 return_type: "{sve_type[1]}"1495 types:1496 - [[i32, u32], [u32, i32], u16]1497 - [[i64, u64], [u64, i64], [u16, u32]]1498 assert_instr: ["ld1{size_literal[2]}"]1499 test: { load: 2 }1500 compose:1501 - MatchSize:1502 - "{type[0]}"1503 - default:1504 LLVMLink:1505 name: "ld1.gather.{type_kind[0].su}xtw.index.{sve_type[1] as {type[2]}}"1506 return_type: "{sve_type[1] as {type[2]}}"1507 doubleword:1508 LLVMLink:1509 name: "ld1.gather.index.{sve_type[1] as {type[2]}}"1510 return_type: "{sve_type[1] as {type[2]}}"1511 - FnCall:1512 - crate::intrinsics::simd::simd_cast1513 - - FnCall: ["{llvm_link}", [$pg, $base, $indices]]1514 - - Type: "{sve_type[1] as {type[2]}}"1515 - _15161517 - name: svld1s{size_literal[2]}_gather_[{type[0]}]offset_{type[1]}1518 attr: [*sve-unstable]1519 doc: Load {size[2]}-bit data and sign-extend1520 safety:1521 unsafe:1522 - pointer_offset: predicated1523 - dereference: predicated1524 arguments:1525 ["pg: {predicate[0]}", "base: *{type[2]}", "offsets: {sve_type[0]}"]1526 return_type: "{sve_type[1]}"1527 types:1528 - [[i32, u32], [i32, u32], [i8, i16]]1529 - [[i64, u64], [i64, u64], [i8, i16, i32]]1530 assert_instr: ["ld1s{size_literal[2]}"]1531 test: { load: 2 }1532 compose:1533 - MatchSize:1534 - "{type[0]}"1535 - default:1536 LLVMLink:1537 name: "ld1.gather.{type_kind[0].su}xtw.{sve_type[1] as {type[2]}}"1538 return_type: "{sve_type[1] as {type[2]}}"1539 doubleword:1540 LLVMLink:1541 name: "ld1.gather.{sve_type[1] as {type[2]}}"1542 return_type: "{sve_type[1] as {type[2]}}"1543 - FnCall:1544 - crate::intrinsics::simd::simd_cast1545 - - FnCall: ["{llvm_link}", [$pg, $base, $offsets]]15461547 - name: svld1u{size_literal[2]}_gather_[{type[0]}]offset_{type[1]}1548 attr: [*sve-unstable]1549 doc: Load {size[2]}-bit data and zero-extend1550 safety:1551 unsafe:1552 - pointer_offset: predicated1553 - dereference: predicated1554 arguments:1555 ["pg: {predicate[0]}", "base: *{type[2]}", "offsets: {sve_type[0]}"]1556 return_type: "{sve_type[1]}"1557 types:1558 - [[i32, u32], [u32, i32], [u8, u16]]1559 - [[i64, u64], [u64, i64], [u8, u16, u32]]1560 assert_instr: ["ld1{size_literal[2]}"]1561 test: { load: 2 }1562 compose:1563 - MatchSize:1564 - "{type[0]}"1565 - default:1566 LLVMLink:1567 name: "ld1.gather.{type_kind[0].su}xtw.{sve_type[1] as {type[2]}}"1568 return_type: "{sve_type[1] as {type[2]}}"1569 doubleword:1570 LLVMLink:1571 name: "ld1.gather.{sve_type[1] as {type[2]}}"1572 return_type: "{sve_type[1] as {type[2]}}"1573 - FnCall:1574 - crate::intrinsics::simd::simd_cast1575 - - FnCall: ["{llvm_link}", [$pg, $base, $offsets]]1576 - - Type: "{sve_type[1] as {type[2]}}"1577 - _15781579 - name: svld1s{size_literal[2]}_gather[_{type[0]}base]_offset_{type[1]}1580 attr: [*sve-unstable]1581 doc: Load {size[2]}-bit data and sign-extend1582 safety:1583 unsafe:1584 - pointer_offset: predicated1585 - dereference: predicated1586 - no_provenance: bases1587 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "offset: i64"]1588 return_type: "{sve_type[1]}"1589 types:1590 - [u32, [i32, u32], [i8, i16]]1591 - [u64, [i64, u64], [i8, i16, i32]]1592 assert_instr: ["ld1s{size_literal[2]}"]1593 test: { load: 2 }1594 compose:1595 - LLVMLink:1596 name: "ld1.gather.scalar.offset.{sve_type[1] as {type[2]}}.{sve_type[0]}"1597 return_type: "{sve_type[1] as {type[2]}}"1598 - FnCall:1599 - crate::intrinsics::simd::simd_cast1600 - - FnCall: ["{llvm_link}", [$pg, $bases, $offset]]16011602 - name: svld1u{size_literal[2]}_gather[_{type[0]}base]_offset_{type[1]}1603 attr: [*sve-unstable]1604 doc: Load {size[2]}-bit data and zero-extend1605 safety:1606 unsafe:1607 - pointer_offset: predicated1608 - dereference: predicated1609 - no_provenance: bases1610 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "offset: i64"]1611 return_type: "{sve_type[1]}"1612 types:1613 - [u32, [u32, i32], [u8, u16]]1614 - [u64, [u64, i64], [u8, u16, u32]]1615 assert_instr: ["ld1{size_literal[2]}"]1616 test: { load: 2 }1617 compose:1618 - LLVMLink:1619 name: "ld1.gather.scalar.offset.{sve_type[1] as {type[2]}}.{sve_type[0]}"1620 return_type: "{sve_type[1] as {type[2]}}"1621 - FnCall:1622 - crate::intrinsics::simd::simd_cast1623 - - FnCall: ["{llvm_link}", [$pg, $bases, $offset]]1624 - - Type: "{sve_type[1] as {type[2]}}"1625 - _16261627 - name: svld1s{size_literal[2]}_gather[_{type[0]}base]_{type[1]}1628 attr: [*sve-unstable]1629 doc: Load {size[2]}-bit data and sign-extend1630 safety:1631 unsafe:1632 - pointer_offset: predicated1633 - dereference: predicated1634 - no_provenance: bases1635 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}"]1636 return_type: "{sve_type[1]}"1637 types:1638 - [u32, [i32, u32], [i8, i16]]1639 - [u64, [i64, u64], [i8, i16, i32]]1640 assert_instr: ["ld1s{size_literal[2]}"]1641 test: { load: 2 }1642 compose:1643 - FnCall:1644 - "svld1s{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1645 - - $pg1646 - $bases1647 - 016481649 - name: svld1u{size_literal[2]}_gather[_{type[0]}base]_{type[1]}1650 attr: [*sve-unstable]1651 doc: Load {size[2]}-bit data and zero-extend1652 safety:1653 unsafe:1654 - pointer_offset: predicated1655 - dereference: predicated1656 - no_provenance: bases1657 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}"]1658 return_type: "{sve_type[1]}"1659 types:1660 - [u32, [i32, u32], [u8, u16]]1661 - [u64, [i64, u64], [u8, u16, u32]]1662 assert_instr: ["ld1{size_literal[2]}"]1663 test: { load: 2 }1664 compose:1665 - FnCall:1666 - "svld1u{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1667 - - $pg1668 - $bases1669 - 016701671 - name: svld1s{size_literal[2]}_gather[_{type[0]}base]_index_{type[1]}1672 attr: [*sve-unstable]1673 doc: Load {size[2]}-bit data and sign-extend1674 safety:1675 unsafe:1676 - pointer_offset: predicated1677 - dereference: predicated1678 - no_provenance: bases1679 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "index: i64"]1680 return_type: "{sve_type[1]}"1681 types:1682 - [u32, [i32, u32], i16]1683 - [u64, [i64, u64], [i16, i32]]1684 assert_instr: ["ld1s{size_literal[2]}"]1685 test: { load: 2 }1686 compose:1687 - FnCall:1688 - "svld1s{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1689 - - $pg1690 - $bases1691 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[2]}"]]16921693 - name: svld1u{size_literal[2]}_gather[_{type[0]}base]_index_{type[1]}1694 attr: [*sve-unstable]1695 doc: Load {size[2]}-bit data and zero-extend1696 safety:1697 unsafe:1698 - pointer_offset: predicated1699 - dereference: predicated1700 - no_provenance: bases1701 arguments: ["pg: {predicate[0]}", "bases: {sve_type[0]}", "index: i64"]1702 return_type: "{sve_type[1]}"1703 types:1704 - [u32, [i32, u32], u16]1705 - [u64, [i64, u64], [u16, u32]]1706 assert_instr: ["ld1{size_literal[2]}"]1707 test: { load: 2 }1708 compose:1709 - FnCall:1710 - "svld1u{size_literal[2]}_gather_{type[0]}base_offset_{type[1]}"1711 - - $pg1712 - $bases1713 - MethodCall: [$index, unchecked_shl, ["{size_in_bytes_log2[2]}"]]17141715 - name: svldnt1[_{type}]1716 attr: [*sve-unstable]1717 doc: Unextended load, non-temporal1718 safety:1719 unsafe:1720 - pointer_offset: predicated1721 - dereference: predicated1722 - non_temporal1723 arguments: ["pg: {predicate}", "base: *{type}"]1724 return_type: "{sve_type}"1725 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1726 assert_instr: ["ldnt1{size_literal}"]1727 test: { load: 0 }1728 compose:1729 - LLVMLink: { name: "ldnt1.{sve_type}" }17301731 - name: svldnt1_vnum[_{type}]1732 attr: [*sve-unstable]1733 doc: Unextended load, non-temporal1734 safety:1735 unsafe:1736 - pointer_offset_vnum: predicated1737 - dereference: predicated1738 - non_temporal1739 arguments: ["pg: {predicate}", "base: *{type}", "vnum: i64"]1740 return_type: "{sve_type}"1741 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1742 assert_instr: ["ldnt1{size_literal}"]1743 test: { load: 0 }1744 compose:1745 - FnCall:1746 - "svldnt1_{type}"1747 - - $pg1748 - MethodCall:1749 - $base1750 - offset1751 - - Multiply:1752 - CastAs: [{ FnCall: ["svcnt{size_literal}", []] }, isize]1753 - CastAs: [$vnum, isize]17541755 - name: svld1s{size_literal[1]}_{type[0]}1756 attr: [*sve-unstable]1757 doc: Load {size[1]}-bit data and sign-extend1758 safety:1759 unsafe:1760 - pointer_offset: predicated1761 - dereference: predicated1762 arguments: ["pg: {predicate[0]}", "base: *{type[1]}"]1763 return_type: "{sve_type[0]}"1764 types:1765 - [[i16, i32, i64, u16, u32, u64], i8]1766 - [[i32, i64, u32, u64], i16]1767 - [[i64, u64], i32]1768 assert_instr: ["ld1s{size_literal[1]}"]1769 test: { load: 1 }1770 compose:1771 - LLVMLink:1772 name: "ld1.{sve_type[0] as {type[1]}}"1773 arguments: ["pg: {predicate[0]}", "base: *{type[1]}"]1774 return_type: "{sve_type[0] as {type[1]}}"1775 - FnCall:1776 - "crate::intrinsics::simd::simd_cast"1777 - - FnCall: ["{llvm_link}", [$pg, $base]]17781779 - name: svld1u{size_literal[1]}_{type[0]}1780 attr: [*sve-unstable]1781 doc: Load {size[1]}-bit data and zero-extend1782 safety:1783 unsafe:1784 - pointer_offset: predicated1785 - dereference: predicated1786 arguments: ["pg: {predicate[0]}", "base: *{type[1]}"]1787 return_type: "{sve_type[0]}"1788 types:1789 - [[i16, i32, i64, u16, u32, u64], u8]1790 - [[i32, i64, u32, u64], u16]1791 - [[i64, u64], u32]1792 assert_instr: ["ld1{size_literal[1]}"]1793 test: { load: 1 }1794 compose:1795 - LLVMLink:1796 name: "ld1.{sve_type[0] as {type[1]}}"1797 arguments: ["pg: {predicate[0]}", "base: *{type[1]}"]1798 return_type: "{sve_type[0] as {type[1]}}"1799 - FnCall:1800 - "crate::intrinsics::simd::simd_cast"1801 - - FnCall: ["{llvm_link}", [$pg, $base]]1802 - [Type: "{sve_type[0] as {type[1]}}", _]18031804 - name: svld1s{size_literal[1]}_vnum_{type[0]}1805 attr: [*sve-unstable]1806 doc: Load {size[1]}-bit data and sign-extend1807 safety:1808 unsafe:1809 - pointer_offset_vnum: predicated1810 - dereference: predicated1811 arguments: ["pg: {predicate[0]}", "base: *{type[1]}", "vnum: i64"]1812 return_type: "{sve_type[0]}"1813 types:1814 - [[i16, i32, i64, u16, u32, u64], i8]1815 - [[i32, i64, u32, u64], i16]1816 - [[i64, u64], i32]1817 assert_instr: ["ld1s{size_literal[1]}"]1818 test: { load: 1 }1819 compose:1820 - FnCall:1821 - "svld1s{size_literal[1]}_{type[0]}"1822 - - $pg1823 - MethodCall:1824 - $base1825 - offset1826 - - Multiply:1827 - CastAs:1828 [{ FnCall: ["svcnt{size_literal[0]}", []] }, isize]1829 - CastAs: [$vnum, isize]18301831 - name: svld1u{size_literal[1]}_vnum_{type[0]}1832 attr: [*sve-unstable]1833 doc: Load {size[1]}-bit data and zero-extend1834 safety:1835 unsafe:1836 - pointer_offset_vnum: predicated1837 - dereference: predicated1838 arguments: ["pg: {predicate[0]}", "base: *{type[1]}", "vnum: i64"]1839 return_type: "{sve_type[0]}"1840 types:1841 - [[i16, i32, i64, u16, u32, u64], u8]1842 - [[i32, i64, u32, u64], u16]1843 - [[i64, u64], u32]1844 assert_instr: ["ld1{size_literal[1]}"]1845 test: { load: 1 }1846 compose:1847 - FnCall:1848 - "svld1u{size_literal[1]}_{type[0]}"1849 - - $pg1850 - MethodCall:1851 - $base1852 - offset1853 - - Multiply:1854 - CastAs:1855 [{ FnCall: ["svcnt{size_literal[0]}", []] }, isize]1856 - CastAs: [$vnum, isize]18571858 - name: svld2[_{type}]1859 attr: [*sve-unstable]1860 doc: Load two-element tuples into two vectors1861 safety:1862 unsafe:1863 - pointer_offset: predicated1864 - dereference: predicated1865 arguments: ["pg: {predicate}", "base: *{type}"]1866 return_type: "{sve_type_x2}"1867 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1868 assert_instr: ["ld2{size_literal}"]1869 test: { load: 0 }1870 compose:1871 - LLVMLink: { name: "ld2.sret.{sve_type}" }18721873 - name: svld2_vnum[_{type}]1874 attr: [*sve-unstable]1875 doc: Load two-element tuples into two vectors1876 safety:1877 unsafe:1878 - pointer_offset: predicated1879 - dereference: predicated1880 arguments: ["pg: {predicate}", "base: *{type}", "vnum: i64"]1881 return_type: "{sve_type_x2}"1882 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1883 assert_instr: ["ld2{size_literal}"]1884 test: { load: 0 }1885 compose:1886 - FnCall:1887 - "svld2_{type}"1888 - - $pg1889 - MethodCall:1890 - $base1891 - offset1892 - - Multiply:1893 - CastAs: [{ FnCall: ["svcnt{size_literal}", []] }, isize]1894 - CastAs: [$vnum, isize]18951896 - name: svld3[_{type}]1897 attr: [*sve-unstable]1898 doc: Load three-element tuples into three vectors1899 safety:1900 unsafe:1901 - pointer_offset: predicated1902 - dereference: predicated1903 arguments: ["pg: {predicate}", "base: *{type}"]1904 return_type: "{sve_type_x3}"1905 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1906 assert_instr: ["ld3{size_literal}"]1907 test: { load: 0 }1908 compose:1909 - LLVMLink: { name: "ld3.sret.{sve_type}" }19101911 - name: svld3_vnum[_{type}]1912 attr: [*sve-unstable]1913 doc: Load three-element tuples into three vectors1914 safety:1915 unsafe:1916 - pointer_offset: predicated1917 - dereference: predicated1918 arguments: ["pg: {predicate}", "base: *{type}", "vnum: i64"]1919 return_type: "{sve_type_x3}"1920 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1921 assert_instr: ["ld3{size_literal}"]1922 test: { load: 0 }1923 compose:1924 - FnCall:1925 - "svld3_{type}"1926 - - $pg1927 - MethodCall:1928 - $base1929 - offset1930 - - Multiply:1931 - CastAs: [{ FnCall: ["svcnt{size_literal}", []] }, isize]1932 - CastAs: [$vnum, isize]19331934 - name: svld4[_{type}]1935 attr: [*sve-unstable]1936 doc: Load four-element tuples into four vectors1937 safety:1938 unsafe:1939 - pointer_offset: predicated1940 - dereference: predicated1941 arguments: ["pg: {predicate}", "base: *{type}"]1942 return_type: "{sve_type_x4}"1943 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1944 assert_instr: ["ld4{size_literal}"]1945 test: { load: 0 }1946 compose:1947 - LLVMLink: { name: "ld4.sret.{sve_type}" }19481949 - name: svld4_vnum[_{type}]1950 attr: [*sve-unstable]1951 doc: Load four-element tuples into four vectors1952 safety:1953 unsafe:1954 - pointer_offset_vnum: predicated1955 - dereference: predicated1956 arguments: ["pg: {predicate}", "base: *{type}", "vnum: i64"]1957 return_type: "{sve_type_x4}"1958 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1959 assert_instr: ["ld4{size_literal}"]1960 test: { load: 0 }1961 compose:1962 - FnCall:1963 - "svld4_{type}"1964 - - $pg1965 - MethodCall:1966 - $base1967 - offset1968 - - Multiply:1969 - CastAs: [{ FnCall: ["svcnt{size_literal}", []] }, isize]1970 - CastAs: [$vnum, isize]19711972 - name: svld1rq[_{type}]1973 attr: [*sve-unstable]1974 doc: Load and replicate 128 bits of data1975 safety:1976 unsafe:1977 - pointer_offset: predicated1978 - dereference: predicated1979 arguments: ["pg: {predicate}", "base: *{type}"]1980 return_type: "{sve_type}"1981 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1982 assert_instr: ["ld1rq{size_literal}"]1983 test: { load: 0 }1984 compose:1985 - LLVMLink: { name: "ld1rq.{sve_type}" }19861987 - name: svld1ro[_{type}]1988 attr: [*sve-unstable]1989 doc: Load and replicate 256 bits of data1990 safety:1991 unsafe:1992 - pointer_offset: predicated1993 - dereference: predicated1994 target_features: [f64mm]1995 arguments: ["pg: {predicate}", "base: *{type}"]1996 return_type: "{sve_type}"1997 types: [f32, f64, i8, i16, i32, i64, u8, u16, u32, u64]1998 assert_instr: ["ld1ro{size_literal}"]1999 test: { load: 0 }2000 compose:
Findings
✓ No findings reported for this file.