[llvm] c6ec77a - [test] Precommit test for D153815

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 27 09:16:06 PDT 2023


Author: Arthur Eubanks
Date: 2023-06-27T09:12:54-07:00
New Revision: c6ec77a05457e617abc2e427df0ebbb7446fcf50

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

LOG: [test] Precommit test for D153815

Added: 
    llvm/test/Transforms/InstCombine/inbounds-gep.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/inbounds-gep.ll b/llvm/test/Transforms/InstCombine/inbounds-gep.ll
new file mode 100644
index 0000000000000..4c2cb177340ad
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/inbounds-gep.ll
@@ -0,0 +1,92 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
+; RUN: opt -passes=instcombine -S < %s | FileCheck %s
+
+declare ptr @g()
+declare ptr @use(ptr)
+
+define void @call1() {
+; CHECK-LABEL: define void @call1() {
+; CHECK-NEXT:    [[A:%.*]] = call ptr @g()
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr [[B]])
+; CHECK-NEXT:    ret void
+;
+  %a = call ptr @g()
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}
+define void @call2() {
+; CHECK-LABEL: define void @call2() {
+; CHECK-NEXT:    [[A:%.*]] = call dereferenceable(8) ptr @g()
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr [[B]])
+; CHECK-NEXT:    ret void
+;
+  %a = call dereferenceable(8) ptr @g()
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}
+
+define void @call3() {
+; CHECK-LABEL: define void @call3() {
+; CHECK-NEXT:    [[A:%.*]] = call dereferenceable_or_null(8) ptr @g()
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr [[B]])
+; CHECK-NEXT:    ret void
+;
+  %a = call dereferenceable_or_null(8) ptr @g()
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}
+
+define void @alloca() {
+; CHECK-LABEL: define void @alloca() {
+; CHECK-NEXT:    [[A:%.*]] = alloca i64, align 8
+; CHECK-NEXT:    [[B:%.*]] = getelementptr inbounds i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr nonnull [[B]])
+; CHECK-NEXT:    ret void
+;
+  %a = alloca i64
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}
+
+define void @arg1(ptr %a) {
+; CHECK-LABEL: define void @arg1
+; CHECK-SAME: (ptr [[A:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr [[B]])
+; CHECK-NEXT:    ret void
+;
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}
+
+define void @arg2(ptr dereferenceable(8) %a) {
+; CHECK-LABEL: define void @arg2
+; CHECK-SAME: (ptr dereferenceable(8) [[A:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr [[B]])
+; CHECK-NEXT:    ret void
+;
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}
+
+define void @arg3(ptr dereferenceable_or_null(8) %a) {
+; CHECK-LABEL: define void @arg3
+; CHECK-SAME: (ptr dereferenceable_or_null(8) [[A:%.*]]) {
+; CHECK-NEXT:    [[B:%.*]] = getelementptr i8, ptr [[A]], i64 4
+; CHECK-NEXT:    call void @use(ptr [[B]])
+; CHECK-NEXT:    ret void
+;
+  %b = getelementptr i8, ptr %a, i64 4
+  call void @use(ptr %b)
+  ret void
+}


        


More information about the llvm-commits mailing list