[llvm] 005cf3e - [InstCombine] Add test coverage for llvm.pdep/pext intrinsics (#204179)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jun 16 08:37:18 PDT 2026
Author: Simon Pilgrim
Date: 2026-06-16T15:37:12Z
New Revision: 005cf3e9c4d900e044440b5ece225c2467e82200
URL: https://github.com/llvm/llvm-project/commit/005cf3e9c4d900e044440b5ece225c2467e82200
DIFF: https://github.com/llvm/llvm-project/commit/005cf3e9c4d900e044440b5ece225c2467e82200.diff
LOG: [InstCombine] Add test coverage for llvm.pdep/pext intrinsics (#204179)
Branched from existing x86 bmi test coverage
Prep work for #204144
Added:
llvm/test/Transforms/InstCombine/pdep.ll
llvm/test/Transforms/InstCombine/pext.ll
Modified:
Removed:
################################################################################
diff --git a/llvm/test/Transforms/InstCombine/pdep.ll b/llvm/test/Transforms/InstCombine/pdep.ll
new file mode 100644
index 0000000000000..ceb4d1f97b6b0
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/pdep.ll
@@ -0,0 +1,92 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -passes=instcombine -S | FileCheck %s
+
+define i32 @test_pdep_32_zero_mask(i32 %x) nounwind readnone {
+; CHECK-LABEL: @test_pdep_32_zero_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pdep.i32(i32 [[X:%.*]], i32 0)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pdep.i32(i32 %x, i32 0)
+ ret i32 %1
+}
+
+define i64 @test_pdep_64_zero_mask(i64 %x) nounwind readnone {
+; CHECK-LABEL: @test_pdep_64_zero_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pdep.i64(i64 [[X:%.*]], i64 0)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pdep.i64(i64 %x, i64 0)
+ ret i64 %1
+}
+
+define i32 @test_pdep_32_allones_mask(i32 %x) nounwind readnone {
+; CHECK-LABEL: @test_pdep_32_allones_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pdep.i32(i32 [[X:%.*]], i32 -1)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pdep.i32(i32 %x, i32 -1)
+ ret i32 %1
+}
+
+define i64 @test_pdep_64_allones_mask(i64 %x) nounwind readnone {
+; CHECK-LABEL: @test_pdep_64_allones_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pdep.i64(i64 [[X:%.*]], i64 -1)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pdep.i64(i64 %x, i64 -1)
+ ret i64 %1
+}
+
+define i32 @test_pdep_32_shifted_mask(i32 %x) nounwind readnone {
+; CHECK-LABEL: @test_pdep_32_shifted_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pdep.i32(i32 [[X:%.*]], i32 12)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pdep.i32(i32 %x, i32 12)
+ ret i32 %1
+}
+
+define i64 @test_pdep_64_shifted_mask(i64 %x) nounwind readnone {
+; CHECK-LABEL: @test_pdep_64_shifted_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pdep.i64(i64 [[X:%.*]], i64 12)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pdep.i64(i64 %x, i64 12)
+ ret i64 %1
+}
+
+define i32 @test_pdep_32_constant_fold() nounwind readnone {
+; CHECK-LABEL: @test_pdep_32_constant_fold(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pdep.i32(i32 1985229328, i32 -252645136)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pdep.i32(i32 1985229328, i32 4042322160)
+ ret i32 %1
+}
+
+define i64 @test_pdep_64_constant_fold() nounwind readnone {
+; CHECK-LABEL: @test_pdep_64_constant_fold(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pdep.i64(i64 8526495043095935640, i64 -1085102592571150096)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pdep.i64(i64 8526495043095935640, i64 -1085102592571150096)
+ ret i64 %1
+}
+
+define i32 @test_pdep_32_constant_fold_2() nounwind readnone {
+; CHECK-LABEL: @test_pdep_32_constant_fold_2(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pdep.i32(i32 1985229328, i32 -16776961)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pdep.i32(i32 1985229328, i32 4278190335)
+ ret i32 %1
+}
+
+define i64 @test_pdep_64_constant_fold_2() nounwind readnone {
+; CHECK-LABEL: @test_pdep_64_constant_fold_2(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pdep.i64(i64 8526495043095935640, i64 -72056498804490496)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pdep.i64(i64 8526495043095935640, i64 -72056498804490496)
+ ret i64 %1
+}
diff --git a/llvm/test/Transforms/InstCombine/pext.ll b/llvm/test/Transforms/InstCombine/pext.ll
new file mode 100644
index 0000000000000..52baa9a171c62
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/pext.ll
@@ -0,0 +1,94 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -passes=instcombine -S | FileCheck %s
+
+define i32 @test_pext_32_zero_mask(i32 %x) nounwind readnone {
+; CHECK-LABEL: @test_pext_32_zero_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pext.i32(i32 [[X:%.*]], i32 0)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pext.i32(i32 %x, i32 0)
+ ret i32 %1
+}
+
+define i64 @test_pext_64_zero_mask(i64 %x) nounwind readnone {
+; CHECK-LABEL: @test_pext_64_zero_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pext.i64(i64 [[X:%.*]], i64 0)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pext.i64(i64 %x, i64 0)
+ ret i64 %1
+}
+
+define i32 @test_pext_32_allones_mask(i32 %x) nounwind readnone {
+; CHECK-LABEL: @test_pext_32_allones_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pext.i32(i32 [[X:%.*]], i32 -1)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pext.i32(i32 %x, i32 -1)
+ ret i32 %1
+}
+
+define i64 @test_pext_64_allones_mask(i64 %x) nounwind readnone {
+; CHECK-LABEL: @test_pext_64_allones_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pext.i64(i64 [[X:%.*]], i64 -1)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pext.i64(i64 %x, i64 -1)
+ ret i64 %1
+}
+
+define i32 @test_pext_32_shifted_mask(i32 %x) nounwind readnone {
+; CHECK-LABEL: @test_pext_32_shifted_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pext.i32(i32 [[X:%.*]], i32 6)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pext.i32(i32 %x, i32 6)
+ ret i32 %1
+}
+
+define i64 @test_pext_64_shifted_mask(i64 %x) nounwind readnone {
+; CHECK-LABEL: @test_pext_64_shifted_mask(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pext.i64(i64 [[X:%.*]], i64 6)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pext.i64(i64 %x, i64 6)
+ ret i64 %1
+}
+
+
+define i32 @test_pext_32_constant_fold() nounwind readnone {
+; CHECK-LABEL: @test_pext_32_constant_fold(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pext.i32(i32 1985229328, i32 -252645136)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pext.i32(i32 1985229328, i32 4042322160)
+ ret i32 %1
+}
+
+define i64 @test_pext_64_constant_fold() nounwind readnone {
+; CHECK-LABEL: @test_pext_64_constant_fold(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pext.i64(i64 8526495043095935640, i64 -1085102592571150096)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pext.i64(i64 8526495043095935640, i64 -1085102592571150096)
+ ret i64 %1
+}
+
+define i32 @test_pext_32_constant_fold_2() nounwind readnone {
+; CHECK-LABEL: @test_pext_32_constant_fold_2(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i32 @llvm.pext.i32(i32 1985229328, i32 -16776961)
+; CHECK-NEXT: ret i32 [[TMP1]]
+;
+ %1 = tail call i32 @llvm.pext.i32(i32 1985229328, i32 4278190335)
+ ret i32 %1
+}
+
+define i64 @test_pext_64_constant_fold_2() nounwind readnone {
+; CHECK-LABEL: @test_pext_64_constant_fold_2(
+; CHECK-NEXT: [[TMP1:%.*]] = tail call i64 @llvm.pext.i64(i64 8526495043095935640, i64 -72056498804490496)
+; CHECK-NEXT: ret i64 [[TMP1]]
+;
+ %1 = tail call i64 @llvm.pext.i64(i64 8526495043095935640, i64 -72056498804490496)
+ ret i64 %1
+}
+
More information about the llvm-commits
mailing list