Skip to content

Commit e0c47d5

Browse files
committed
[InstSimplify] Add test for ptr diff without inbounds (NFC)
Also regenerate the test in current format.
1 parent 17fe934 commit e0c47d5

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

llvm/test/Transforms/InstSimplify/ptr_diff.ll

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
; NOTE: Assertions have been autogenerated by update_test_checks.py
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
22
; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
33
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
44
target triple = "x86_64-unknown-linux-gnu"
55

66
define i64 @ptrdiff1(ptr %ptr) {
77
; CHECK-LABEL: @ptrdiff1(
8-
; CHECK: ret i64 42
8+
; CHECK-NEXT: ret i64 42
99
;
1010
%last = getelementptr inbounds i8, ptr %ptr, i32 42
1111
%first.int = ptrtoint ptr %ptr to i64
@@ -14,9 +14,24 @@ define i64 @ptrdiff1(ptr %ptr) {
1414
ret i64 %diff
1515
}
1616

17+
define i64 @ptrdiff_no_inbounds(ptr %ptr) {
18+
; CHECK-LABEL: @ptrdiff_no_inbounds(
19+
; CHECK-NEXT: [[LAST:%.*]] = getelementptr i8, ptr [[PTR:%.*]], i32 42
20+
; CHECK-NEXT: [[FIRST_INT:%.*]] = ptrtoint ptr [[PTR]] to i64
21+
; CHECK-NEXT: [[LAST_INT:%.*]] = ptrtoint ptr [[LAST]] to i64
22+
; CHECK-NEXT: [[DIFF:%.*]] = sub i64 [[LAST_INT]], [[FIRST_INT]]
23+
; CHECK-NEXT: ret i64 [[DIFF]]
24+
;
25+
%last = getelementptr i8, ptr %ptr, i32 42
26+
%first.int = ptrtoint ptr %ptr to i64
27+
%last.int = ptrtoint ptr %last to i64
28+
%diff = sub i64 %last.int, %first.int
29+
ret i64 %diff
30+
}
31+
1732
define i64 @ptrdiff2(ptr %ptr) {
1833
; CHECK-LABEL: @ptrdiff2(
19-
; CHECK: ret i64 42
34+
; CHECK-NEXT: ret i64 42
2035
;
2136
%first2 = getelementptr inbounds i8, ptr %ptr, i32 1
2237
%first3 = getelementptr inbounds i8, ptr %first2, i32 2
@@ -34,10 +49,10 @@ define i64 @ptrdiff2(ptr %ptr) {
3449
define i64 @ptrdiff3(ptr %ptr) {
3550
; Don't bother with non-inbounds GEPs.
3651
; CHECK-LABEL: @ptrdiff3(
37-
; CHECK: [[LAST:%.*]] = getelementptr i8, ptr %ptr, i32 42
38-
; CHECK-NEXT: [[FIRST_INT:%.*]] = ptrtoint ptr %ptr to i64
52+
; CHECK-NEXT: [[LAST1:%.*]] = getelementptr i8, ptr [[LAST:%.*]], i32 42
3953
; CHECK-NEXT: [[LAST_INT:%.*]] = ptrtoint ptr [[LAST]] to i64
40-
; CHECK-NEXT: [[DIFF:%.*]] = sub i64 [[LAST_INT]], [[FIRST_INT]]
54+
; CHECK-NEXT: [[LAST_INT1:%.*]] = ptrtoint ptr [[LAST1]] to i64
55+
; CHECK-NEXT: [[DIFF:%.*]] = sub i64 [[LAST_INT1]], [[LAST_INT]]
4156
; CHECK-NEXT: ret i64 [[DIFF]]
4257
;
4358
%last = getelementptr i8, ptr %ptr, i32 42
@@ -50,7 +65,7 @@ define i64 @ptrdiff3(ptr %ptr) {
5065
define <4 x i32> @ptrdiff4(<4 x ptr> %arg) nounwind {
5166
; Handle simple cases of vectors of pointers.
5267
; CHECK-LABEL: @ptrdiff4(
53-
; CHECK: ret <4 x i32> zeroinitializer
68+
; CHECK-NEXT: ret <4 x i32> zeroinitializer
5469
;
5570
%p1 = ptrtoint <4 x ptr> %arg to <4 x i32>
5671
%bc = bitcast <4 x ptr> %arg to <4 x ptr>
@@ -65,7 +80,7 @@ define <4 x i32> @ptrdiff4(<4 x ptr> %arg) nounwind {
6580

6681
define i32 @ptrdiff5() nounwind {
6782
; CHECK-LABEL: @ptrdiff5(
68-
; CHECK: bb:
83+
; CHECK-NEXT: bb:
6984
; CHECK-NEXT: ret i32 0
7085
;
7186
bb:

0 commit comments

Comments
 (0)