[llvm] aa88df8 - [InstCombine] Add tests for folding `@llvm.ptrmask` with itself; NFC

Noah Goldstein via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 27 15:43:24 PDT 2023


Author: Noah Goldstein
Date: 2023-07-27T17:43:08-05:00
New Revision: aa88df8521e3d0f258b2aac2f3e74a7ddf561dc6

URL: https://github.com/llvm/llvm-project/commit/aa88df8521e3d0f258b2aac2f3e74a7ddf561dc6
DIFF: https://github.com/llvm/llvm-project/commit/aa88df8521e3d0f258b2aac2f3e74a7ddf561dc6.diff

LOG: [InstCombine] Add tests for folding `@llvm.ptrmask` with itself; NFC

Differential Revision: https://reviews.llvm.org/D154005

Added: 
    llvm/test/Transforms/InstCombine/consecutive-ptrmask.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/consecutive-ptrmask.ll b/llvm/test/Transforms/InstCombine/consecutive-ptrmask.ll
new file mode 100644
index 00000000000000..97d9bf2f25782e
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/consecutive-ptrmask.ll
@@ -0,0 +1,67 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
+; RUN: opt < %s -passes=instcombine -S | FileCheck %s
+
+declare ptr @llvm.ptrmask.p0.i64(ptr, i64)
+declare ptr @llvm.ptrmask.p0.i32(ptr, i32)
+declare void @use.ptr(ptr)
+define ptr @fold_2x(ptr %p, i64 %m0, i64 %m1) {
+; CHECK-LABEL: define ptr @fold_2x
+; CHECK-SAME: (ptr [[P:%.*]], i64 [[M0:%.*]], i64 [[M1:%.*]]) {
+; CHECK-NEXT:    [[P0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 [[M0]])
+; CHECK-NEXT:    [[P1:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P0]], i64 [[M1]])
+; CHECK-NEXT:    ret ptr [[P1]]
+;
+  %p0 = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m0)
+  %p1 = call ptr @llvm.ptrmask.p0.i64(ptr %p0, i64 %m1)
+  ret ptr %p1
+}
+
+define ptr @fold_2x_i32(ptr %p, i32 %m0, i32 %m1) {
+; CHECK-LABEL: define ptr @fold_2x_i32
+; CHECK-SAME: (ptr [[P:%.*]], i32 [[M0:%.*]], i32 [[M1:%.*]]) {
+; CHECK-NEXT:    [[P0:%.*]] = call ptr @llvm.ptrmask.p0.i32(ptr [[P]], i32 [[M0]])
+; CHECK-NEXT:    [[P1:%.*]] = call ptr @llvm.ptrmask.p0.i32(ptr [[P0]], i32 [[M1]])
+; CHECK-NEXT:    ret ptr [[P1]]
+;
+  %p0 = call ptr @llvm.ptrmask.p0.i32(ptr %p, i32 %m0)
+  %p1 = call ptr @llvm.ptrmask.p0.i32(ptr %p0, i32 %m1)
+  ret ptr %p1
+}
+
+define ptr @fold_2x_fail_multiuse(ptr %p, i64 %m0, i64 %m1) {
+; CHECK-LABEL: define ptr @fold_2x_fail_multiuse
+; CHECK-SAME: (ptr [[P:%.*]], i64 [[M0:%.*]], i64 [[M1:%.*]]) {
+; CHECK-NEXT:    [[P0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 [[M0]])
+; CHECK-NEXT:    call void @use.ptr(ptr [[P0]])
+; CHECK-NEXT:    [[P1:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P0]], i64 [[M1]])
+; CHECK-NEXT:    ret ptr [[P1]]
+;
+  %p0 = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m0)
+  call void @use.ptr(ptr %p0)
+  %p1 = call ptr @llvm.ptrmask.p0.i64(ptr %p0, i64 %m1)
+  ret ptr %p1
+}
+
+define ptr @fold_2x_fail_type_mismatch(ptr %p, i32 %m0, i64 %m1) {
+; CHECK-LABEL: define ptr @fold_2x_fail_type_mismatch
+; CHECK-SAME: (ptr [[P:%.*]], i32 [[M0:%.*]], i64 [[M1:%.*]]) {
+; CHECK-NEXT:    [[P0:%.*]] = call ptr @llvm.ptrmask.p0.i32(ptr [[P]], i32 [[M0]])
+; CHECK-NEXT:    [[P1:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P0]], i64 [[M1]])
+; CHECK-NEXT:    ret ptr [[P1]]
+;
+  %p0 = call ptr @llvm.ptrmask.p0.i32(ptr %p, i32 %m0)
+  %p1 = call ptr @llvm.ptrmask.p0.i64(ptr %p0, i64 %m1)
+  ret ptr %p1
+}
+
+define ptr @fold_2x_fail_type_mismatch2(ptr %p, i64 %m0, i32 %m1) {
+; CHECK-LABEL: define ptr @fold_2x_fail_type_mismatch2
+; CHECK-SAME: (ptr [[P:%.*]], i64 [[M0:%.*]], i32 [[M1:%.*]]) {
+; CHECK-NEXT:    [[P0:%.*]] = call ptr @llvm.ptrmask.p0.i64(ptr [[P]], i64 [[M0]])
+; CHECK-NEXT:    [[P1:%.*]] = call ptr @llvm.ptrmask.p0.i32(ptr [[P0]], i32 [[M1]])
+; CHECK-NEXT:    ret ptr [[P1]]
+;
+  %p0 = call ptr @llvm.ptrmask.p0.i64(ptr %p, i64 %m0)
+  %p1 = call ptr @llvm.ptrmask.p0.i32(ptr %p0, i32 %m1)
+  ret ptr %p1
+}


        


More information about the llvm-commits mailing list