[llvm] 2bd3174 - [SCCP] Add tests for gep nuw inference (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 5 07:10:29 PST 2024


Author: Nikita Popov
Date: 2024-12-05T16:10:13+01:00
New Revision: 2bd3174226958a5a646ea4bc69a6afa21f1e6262

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

LOG: [SCCP] Add tests for gep nuw inference (NFC)

Added: 
    llvm/test/Transforms/SCCP/gep-nuw.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SCCP/gep-nuw.ll b/llvm/test/Transforms/SCCP/gep-nuw.ll
new file mode 100644
index 00000000000000..298c14adc92a45
--- /dev/null
+++ b/llvm/test/Transforms/SCCP/gep-nuw.ll
@@ -0,0 +1,56 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -S -passes=sccp < %s | FileCheck %s
+
+define ptr @gep_nusw_nneg(ptr %p, i32 %x, i32 %y) {
+; CHECK-LABEL: define ptr @gep_nusw_nneg(
+; CHECK-SAME: ptr [[P:%.*]], i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:    [[X_EXT:%.*]] = zext i32 [[X]] to i64
+; CHECK-NEXT:    [[Y_EXT:%.*]] = zext i32 [[Y]] to i64
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr nusw [1 x i8], ptr [[P]], i64 [[X_EXT]], i64 [[Y_EXT]]
+; CHECK-NEXT:    ret ptr [[GEP]]
+;
+  %x.ext = zext i32 %x to i64
+  %y.ext = zext i32 %y to i64
+  %gep = getelementptr nusw [1 x i8], ptr %p, i64 %x.ext, i64 %y.ext
+  ret ptr %gep
+}
+
+define ptr @gep_inbounds_nneg(ptr %p, i32 %x, i32 %y) {
+; CHECK-LABEL: define ptr @gep_inbounds_nneg(
+; CHECK-SAME: ptr [[P:%.*]], i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:    [[X_EXT:%.*]] = zext i32 [[X]] to i64
+; CHECK-NEXT:    [[Y_EXT:%.*]] = zext i32 [[Y]] to i64
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr inbounds [1 x i8], ptr [[P]], i64 [[X_EXT]], i64 [[Y_EXT]]
+; CHECK-NEXT:    ret ptr [[GEP]]
+;
+  %x.ext = zext i32 %x to i64
+  %y.ext = zext i32 %y to i64
+  %gep = getelementptr inbounds [1 x i8], ptr %p, i64 %x.ext, i64 %y.ext
+  ret ptr %gep
+}
+
+define ptr @gep_nothin_nneg(ptr %p, i32 %x, i32 %y) {
+; CHECK-LABEL: define ptr @gep_nothin_nneg(
+; CHECK-SAME: ptr [[P:%.*]], i32 [[X:%.*]], i32 [[Y:%.*]]) {
+; CHECK-NEXT:    [[X_EXT:%.*]] = zext i32 [[X]] to i64
+; CHECK-NEXT:    [[Y_EXT:%.*]] = zext i32 [[Y]] to i64
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr [1 x i8], ptr [[P]], i64 [[X_EXT]], i64 [[Y_EXT]]
+; CHECK-NEXT:    ret ptr [[GEP]]
+;
+  %x.ext = zext i32 %x to i64
+  %y.ext = zext i32 %y to i64
+  %gep = getelementptr [1 x i8], ptr %p, i64 %x.ext, i64 %y.ext
+  ret ptr %gep
+}
+
+define ptr @gep_nusw_not_nneg(ptr %p, i32 %x, i64 %y) {
+; CHECK-LABEL: define ptr @gep_nusw_not_nneg(
+; CHECK-SAME: ptr [[P:%.*]], i32 [[X:%.*]], i64 [[Y:%.*]]) {
+; CHECK-NEXT:    [[X_EXT:%.*]] = zext i32 [[X]] to i64
+; CHECK-NEXT:    [[GEP:%.*]] = getelementptr nusw [1 x i8], ptr [[P]], i64 [[X_EXT]], i64 [[Y]]
+; CHECK-NEXT:    ret ptr [[GEP]]
+;
+  %x.ext = zext i32 %x to i64
+  %gep = getelementptr nusw [1 x i8], ptr %p, i64 %x.ext, i64 %y
+  ret ptr %gep
+}


        


More information about the llvm-commits mailing list