brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.8 KiB · 0722e4c Raw
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