- Notifications
You must be signed in to change notification settings - Fork 15.3k
CostModel/RISCV: tweak test for ctpop, with/without ZVBB #67013
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
| @llvm/pr-subscribers-backend-risc-v @llvm/pr-subscribers-llvm-analysis ChangesVector ctpop only exists under ZVBB, but ZVBB is unaccounted for in the cost-model of ctpop. Document this defect with a test, showing identical costs with/without ZVBB. A follow-up patch could fix this defect. Full diff: https://github.com/llvm/llvm-project/pull/67013.diff 1 Files Affected:
diff --git a/llvm/test/Analysis/CostModel/RISCV/ctpop.ll b/llvm/test/Analysis/CostModel/RISCV/ctpop.ll new file mode 100644 index 000000000000000..871d5f2e4ca1cbe --- /dev/null +++ b/llvm/test/Analysis/CostModel/RISCV/ctpop.ll @@ -0,0 +1,95 @@ +; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py +; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v,+experimental-zvbb -riscv-v-vector-bits-min=-1 | FileCheck %s --check-prefix=ZVBB +; Vector ctpop only exists under zvbb +; RUN: opt < %s -passes="print<cost-model>" 2>&1 -disable-output -S -mtriple=riscv64 -mattr=+v -riscv-v-vector-bits-min=-1 | FileCheck %s --check-prefix=NOZVBB + +define void @ctpop() { +; ZVBB-LABEL: 'ctpop' +; ZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %1 = call i8 @llvm.ctpop.i8(i8 undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %2 = call <2 x i8> @llvm.ctpop.v2i8(<2 x i8> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %3 = call <4 x i8> @llvm.ctpop.v4i8(<4 x i8> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %4 = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %5 = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %6 = call i16 @llvm.ctpop.i16(i16 undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %7 = call <2 x i16> @llvm.ctpop.v2i16(<2 x i16> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %8 = call <4 x i16> @llvm.ctpop.v4i16(<4 x i16> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %9 = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %10 = call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %11 = call i32 @llvm.ctpop.i32(i32 undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %12 = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %13 = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %14 = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %15 = call <16 x i32> @llvm.ctpop.v16i32(<16 x i32> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %16 = call i64 @llvm.ctpop.i64(i64 undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %17 = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %18 = call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %19 = call <8 x i64> @llvm.ctpop.v8i64(<8 x i64> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %20 = call <16 x i64> @llvm.ctpop.v16i64(<16 x i64> undef) +; ZVBB-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; +; NOZVBB-LABEL: 'ctpop' +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %1 = call i8 @llvm.ctpop.i8(i8 undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %2 = call <2 x i8> @llvm.ctpop.v2i8(<2 x i8> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %3 = call <4 x i8> @llvm.ctpop.v4i8(<4 x i8> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %4 = call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 12 for instruction: %5 = call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %6 = call i16 @llvm.ctpop.i16(i16 undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %7 = call <2 x i16> @llvm.ctpop.v2i16(<2 x i16> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %8 = call <4 x i16> @llvm.ctpop.v4i16(<4 x i16> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %9 = call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 19 for instruction: %10 = call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %11 = call i32 @llvm.ctpop.i32(i32 undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %12 = call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %13 = call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %14 = call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 20 for instruction: %15 = call <16 x i32> @llvm.ctpop.v16i32(<16 x i32> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %16 = call i64 @llvm.ctpop.i64(i64 undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %17 = call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %18 = call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %19 = call <8 x i64> @llvm.ctpop.v8i64(<8 x i64> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 21 for instruction: %20 = call <16 x i64> @llvm.ctpop.v16i64(<16 x i64> undef) +; NOZVBB-NEXT: Cost Model: Found an estimated cost of 1 for instruction: ret void +; + call i8 @llvm.ctpop.i8(i8 undef) + call <2 x i8> @llvm.ctpop.v2i8(<2 x i8> undef) + call <4 x i8> @llvm.ctpop.v4i8(<4 x i8> undef) + call <8 x i8> @llvm.ctpop.v8i8(<8 x i8> undef) + call <16 x i8> @llvm.ctpop.v16i8(<16 x i8> undef) + call i16 @llvm.ctpop.i16(i16 undef) + call <2 x i16> @llvm.ctpop.v2i16(<2 x i16> undef) + call <4 x i16> @llvm.ctpop.v4i16(<4 x i16> undef) + call <8 x i16> @llvm.ctpop.v8i16(<8 x i16> undef) + call <16 x i16> @llvm.ctpop.v16i16(<16 x i16> undef) + call i32 @llvm.ctpop.i32(i32 undef) + call <2 x i32> @llvm.ctpop.v2i32(<2 x i32> undef) + call <4 x i32> @llvm.ctpop.v4i32(<4 x i32> undef) + call <8 x i32> @llvm.ctpop.v8i32(<8 x i32> undef) + call <16 x i32> @llvm.ctpop.v16i32(<16 x i32> undef) + call i64 @llvm.ctpop.i64(i64 undef) + call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> undef) + call <4 x i64> @llvm.ctpop.v4i64(<4 x i64> undef) + call <8 x i64> @llvm.ctpop.v8i64(<8 x i64> undef) + call <16 x i64> @llvm.ctpop.v16i64(<16 x i64> undef) + ret void +} + +declare i8 @llvm.ctpop.i8(i8) +declare <2 x i8> @llvm.ctpop.v2i8(<2 x i8>) +declare <4 x i8> @llvm.ctpop.v4i8(<4 x i8>) +declare <8 x i8> @llvm.ctpop.v8i8(<8 x i8>) +declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>) +declare i16 @llvm.ctpop.i16(i16) +declare <2 x i16> @llvm.ctpop.v2i16(<2 x i16>) +declare <4 x i16> @llvm.ctpop.v4i16(<4 x i16>) +declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>) +declare <16 x i16> @llvm.ctpop.v16i16(<16 x i16>) +declare i32 @llvm.ctpop.i32(i32) +declare <2 x i32> @llvm.ctpop.v2i32(<2 x i32>) +declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>) +declare <8 x i32> @llvm.ctpop.v8i32(<8 x i32>) +declare <16 x i32> @llvm.ctpop.v16i32(<16 x i32>) +declare i64 @llvm.ctpop.i64(i64) +declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>) +declare <4 x i64> @llvm.ctpop.v4i64(<4 x i64>) +declare <8 x i64> @llvm.ctpop.v8i64(<8 x i64>) +declare <16 x i64> @llvm.ctpop.v16i64(<16 x i64>) |
| We already have coverage for ctpop in test/Analysis/CostModel/RISCV/int-bit-manip.ll. You don't need to duplicate coverage. You should add an extract check line and appropriate prefixes to highlight the ZVBB differences. |
cde0720 to e32999b Compare | @preames Fixed, thanks. |
Vector ctpop only exists under ZVBB, but ZVBB is unaccounted for in the cost-model of ctpop. Document this defect with an additional RUN line in the test for ctpop, showing identical costs with/without ZVBB. A follow-up patch could fix this defect.
e32999b to 54ba640 Compare Vector ctpop only exists under ZVBB, but ZVBB is unaccounted for in the cost-model of ctpop. Document this defect with an additional RUN line in the test for ctpop, showing identical costs with/without ZVBB. A follow-up patch could fix this defect.
Vector ctpop only exists under ZVBB, but ZVBB is unaccounted for in the cost-model of ctpop. Document this defect with an additional RUN line in the test for ctpop, showing identical costs with/without ZVBB. A follow-up patch could fix this defect.