265 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4target triple = "aarch64-unknown-linux-gnu"5 6;7; CNTB8;9 10define i64 @cntb_vl1() {11; CHECK-LABEL: @cntb_vl1(12; CHECK-NEXT: ret i64 113;14 %out = call i64 @llvm.aarch64.sve.cntb(i32 1)15 ret i64 %out16}17 18define i64 @cntb_vl2() {19; CHECK-LABEL: @cntb_vl2(20; CHECK-NEXT: ret i64 221;22 %out = call i64 @llvm.aarch64.sve.cntb(i32 2)23 ret i64 %out24}25 26define i64 @cntb_vl4() {27; CHECK-LABEL: @cntb_vl4(28; CHECK-NEXT: ret i64 429;30 %out = call i64 @llvm.aarch64.sve.cntb(i32 4)31 ret i64 %out32}33 34define i64 @cntb_mul3() {35; CHECK-LABEL: @cntb_mul3(36; CHECK-NEXT: ret i64 2437;38 %cnt = call i64 @llvm.aarch64.sve.cntb(i32 8)39 %out = mul i64 %cnt, 340 ret i64 %out41}42 43define i64 @cntb_mul4() {44; CHECK-LABEL: @cntb_mul4(45; CHECK-NEXT: ret i64 6446;47 %cnt = call i64 @llvm.aarch64.sve.cntb(i32 9)48 %out = mul i64 %cnt, 449 ret i64 %out50}51 52define i64 @cntb_all() {53; CHECK-LABEL: @cntb_all(54; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()55; CHECK-NEXT: [[OUT:%.*]] = shl nuw i64 [[TMP1]], 456; CHECK-NEXT: ret i64 [[OUT]]57;58 %out = call i64 @llvm.aarch64.sve.cntb(i32 31)59 ret i64 %out60}61 62;63; CNTH64;65 66define i64 @cnth_vl1() {67; CHECK-LABEL: @cnth_vl1(68; CHECK-NEXT: ret i64 169;70 %out = call i64 @llvm.aarch64.sve.cnth(i32 1)71 ret i64 %out72}73 74define i64 @cnth_vl2() {75; CHECK-LABEL: @cnth_vl2(76; CHECK-NEXT: ret i64 277;78 %out = call i64 @llvm.aarch64.sve.cnth(i32 2)79 ret i64 %out80}81 82define i64 @cnth_vl4() {83; CHECK-LABEL: @cnth_vl4(84; CHECK-NEXT: ret i64 485;86 %out = call i64 @llvm.aarch64.sve.cnth(i32 4)87 ret i64 %out88}89 90define i64 @cnth_mul3() {91; CHECK-LABEL: @cnth_mul3(92; CHECK-NEXT: ret i64 2493;94 %cnt = call i64 @llvm.aarch64.sve.cnth(i32 8)95 %out = mul i64 %cnt, 396 ret i64 %out97}98 99define i64 @cnth_mul4() {100; CHECK-LABEL: @cnth_mul4(101; CHECK-NEXT: [[CNT:%.*]] = call i64 @llvm.aarch64.sve.cnth(i32 9)102; CHECK-NEXT: [[OUT:%.*]] = shl i64 [[CNT]], 2103; CHECK-NEXT: ret i64 [[OUT]]104;105 %cnt = call i64 @llvm.aarch64.sve.cnth(i32 9)106 %out = mul i64 %cnt, 4107 ret i64 %out108}109 110define i64 @cnth_all() {111; CHECK-LABEL: @cnth_all(112; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()113; CHECK-NEXT: [[OUT:%.*]] = shl nuw i64 [[TMP1]], 3114; CHECK-NEXT: ret i64 [[OUT]]115;116 %out = call i64 @llvm.aarch64.sve.cnth(i32 31)117 ret i64 %out118}119 120;121; CNTW122;123 124define i64 @cntw_vl1() {125; CHECK-LABEL: @cntw_vl1(126; CHECK-NEXT: ret i64 1127;128 %out = call i64 @llvm.aarch64.sve.cntw(i32 1)129 ret i64 %out130}131 132define i64 @cntw_vl2() {133; CHECK-LABEL: @cntw_vl2(134; CHECK-NEXT: ret i64 2135;136 %out = call i64 @llvm.aarch64.sve.cntw(i32 2)137 ret i64 %out138}139 140define i64 @cntw_vl4() {141; CHECK-LABEL: @cntw_vl4(142; CHECK-NEXT: ret i64 4143;144 %out = call i64 @llvm.aarch64.sve.cntw(i32 4)145 ret i64 %out146}147 148define i64 @cntw_mul3() {149; CHECK-LABEL: @cntw_mul3(150; CHECK-NEXT: [[CNT:%.*]] = call i64 @llvm.aarch64.sve.cntw(i32 8)151; CHECK-NEXT: [[OUT:%.*]] = mul i64 [[CNT]], 3152; CHECK-NEXT: ret i64 [[OUT]]153;154 %cnt = call i64 @llvm.aarch64.sve.cntw(i32 8)155 %out = mul i64 %cnt, 3156 ret i64 %out157}158 159define i64 @cntw_mul4() {160; CHECK-LABEL: @cntw_mul4(161; CHECK-NEXT: [[CNT:%.*]] = call i64 @llvm.aarch64.sve.cntw(i32 9)162; CHECK-NEXT: [[OUT:%.*]] = shl i64 [[CNT]], 2163; CHECK-NEXT: ret i64 [[OUT]]164;165 %cnt = call i64 @llvm.aarch64.sve.cntw(i32 9)166 %out = mul i64 %cnt, 4167 ret i64 %out168}169 170define i64 @cntw_all() {171; CHECK-LABEL: @cntw_all(172; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()173; CHECK-NEXT: [[OUT:%.*]] = shl nuw i64 [[TMP1]], 2174; CHECK-NEXT: ret i64 [[OUT]]175;176 %out = call i64 @llvm.aarch64.sve.cntw(i32 31)177 ret i64 %out178}179 180 181;182; CNTD183;184 185define i64 @cntd_vl1() {186; CHECK-LABEL: @cntd_vl1(187; CHECK-NEXT: ret i64 1188;189 %out = call i64 @llvm.aarch64.sve.cntd(i32 1)190 ret i64 %out191}192 193define i64 @cntd_vl2() {194; CHECK-LABEL: @cntd_vl2(195; CHECK-NEXT: ret i64 2196;197 %out = call i64 @llvm.aarch64.sve.cntd(i32 2)198 ret i64 %out199}200 201define i64 @cntd_vl4() {202; CHECK-LABEL: @cntd_vl4(203; CHECK-NEXT: [[OUT:%.*]] = call i64 @llvm.aarch64.sve.cntd(i32 4)204; CHECK-NEXT: ret i64 [[OUT]]205;206 %out = call i64 @llvm.aarch64.sve.cntd(i32 4)207 ret i64 %out208}209 210define i64 @cntd_mul3() {211; CHECK-LABEL: @cntd_mul3(212; CHECK-NEXT: [[CNT:%.*]] = call i64 @llvm.aarch64.sve.cntd(i32 8)213; CHECK-NEXT: [[OUT:%.*]] = mul i64 [[CNT]], 3214; CHECK-NEXT: ret i64 [[OUT]]215;216 %cnt = call i64 @llvm.aarch64.sve.cntd(i32 8)217 %out = mul i64 %cnt, 3218 ret i64 %out219}220 221define i64 @cntd_mul4() {222; CHECK-LABEL: @cntd_mul4(223; CHECK-NEXT: [[CNT:%.*]] = call i64 @llvm.aarch64.sve.cntd(i32 9)224; CHECK-NEXT: [[OUT:%.*]] = shl i64 [[CNT]], 2225; CHECK-NEXT: ret i64 [[OUT]]226;227 %cnt = call i64 @llvm.aarch64.sve.cntd(i32 9)228 %out = mul i64 %cnt, 4229 ret i64 %out230}231 232define i64 @cntd_all() {233; CHECK-LABEL: @cntd_all(234; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()235; CHECK-NEXT: [[OUT:%.*]] = shl nuw i64 [[TMP1]], 1236; CHECK-NEXT: ret i64 [[OUT]]237;238 %out = call i64 @llvm.aarch64.sve.cntd(i32 31)239 ret i64 %out240}241 242 243define i64 @udiv() vscale_range(1, 16) {244; CHECK-LABEL: @udiv(245; CHECK-NEXT: [[TMP1:%.*]] = call i64 @llvm.vscale.i64()246; CHECK-NEXT: [[A:%.*]] = shl nuw nsw i64 [[TMP1]], 4247; CHECK-NEXT: [[TMP2:%.*]] = call i64 @llvm.vscale.i64()248; CHECK-NEXT: [[B:%.*]] = shl nuw nsw i64 [[TMP2]], 2249; CHECK-NEXT: [[TMP3:%.*]] = call range(i64 2, 65) i64 @llvm.cttz.i64(i64 [[B]], i1 true)250; CHECK-NEXT: [[C1:%.*]] = lshr i64 [[A]], [[TMP3]]251; CHECK-NEXT: ret i64 [[C1]]252;253 %a = call i64 @llvm.aarch64.sve.cntb(i32 31)254 %b = call i64 @llvm.aarch64.sve.cntw(i32 31)255 %c = udiv i64 %a, %b256 ret i64 %c257}258 259 260declare i64 @llvm.aarch64.sve.cntb(i32 %pattern)261declare i64 @llvm.aarch64.sve.cnth(i32 %pattern)262declare i64 @llvm.aarch64.sve.cntw(i32 %pattern)263declare i64 @llvm.aarch64.sve.cntd(i32 %pattern)264 265