; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 ; RUN: opt -S -passes=instcombine < %s | FileCheck %s target triple = "aarch64-unknown-linux-gnu" define @whilelo_nxv2i1.i32(i32 %a, i32 %b) { ; CHECK-LABEL: define @whilelo_nxv2i1.i32( ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv2i1.i32(i32 [[A]], i32 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv2i1.i32(i32 %a, i32 %b) ret %mask } define @whilelo_nxv4i1.i32(i32 %a, i32 %b) { ; CHECK-LABEL: define @whilelo_nxv4i1.i32( ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv4i1.i32(i32 [[A]], i32 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv4i1.i32(i32 %a, i32 %b) ret %mask } define @whilelo_nxv8i1.i32(i32 %a, i32 %b) { ; CHECK-LABEL: define @whilelo_nxv8i1.i32( ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv8i1.i32(i32 [[A]], i32 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv8i1.i32(i32 %a, i32 %b) ret %mask } define @whilelo_nxv16i1.i32(i32 %a, i32 %b) { ; CHECK-LABEL: define @whilelo_nxv16i1.i32( ; CHECK-SAME: i32 [[A:%.*]], i32 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv16i1.i32(i32 [[A]], i32 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 %a, i32 %b) ret %mask } define @whilelo_nxv2i1.i64(i64 %a, i64 %b) { ; CHECK-LABEL: define @whilelo_nxv2i1.i64( ; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv2i1.i64(i64 [[A]], i64 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv2i1.i64(i64 %a, i64 %b) ret %mask } define @whilelo_nxv4i1.i64(i64 %a, i64 %b) { ; CHECK-LABEL: define @whilelo_nxv4i1.i64( ; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv4i1.i64(i64 [[A]], i64 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv4i1.i64(i64 %a, i64 %b) ret %mask } define @whilelo_nxv8i1.i64(i64 %a, i64 %b) { ; CHECK-LABEL: define @whilelo_nxv8i1.i64( ; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv8i1.i64(i64 [[A]], i64 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv8i1.i64(i64 %a, i64 %b) ret %mask } define @whilelo_nxv16i1.i64(i64 %a, i64 %b) { ; CHECK-LABEL: define @whilelo_nxv16i1.i64( ; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv16i1.i64(i64 [[A]], i64 [[B]]) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 %a, i64 %b) ret %mask } define @whilelo_nxv16i1.i64_const() { ; CHECK-LABEL: define @whilelo_nxv16i1.i64_const() { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv16i1.i64(i64 0, i64 16) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv16i1.i64(i64 0, i64 16) ret %mask } define @whilelo_nxv16i1.i32_const() { ; CHECK-LABEL: define @whilelo_nxv16i1.i32_const() { ; CHECK-NEXT: [[MASK:%.*]] = call @llvm.get.active.lane.mask.nxv16i1.i32(i32 0, i32 16) ; CHECK-NEXT: ret [[MASK]] ; %mask = tail call @llvm.aarch64.sve.whilelo.nxv16i1.i32(i32 0, i32 16) ret %mask }