xref: /llvm-project/llvm/test/Transforms/InstCombine/icmp-inttoptr.ll (revision 5cd0900ef6eb97d72803bdca7180538a40431722)
1*5cd0900eSMarina Taylor; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*5cd0900eSMarina Taylor; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3*5cd0900eSMarina Taylor
4*5cd0900eSMarina Taylordeclare void @use_ptr(ptr)
5*5cd0900eSMarina Taylor
6*5cd0900eSMarina Taylordefine i1 @inttoptr(i64 %x, i64 %y) {
7*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr(
8*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i64 [[X:%.*]], [[Y:%.*]]
9*5cd0900eSMarina Taylor; CHECK-NEXT:    ret i1 [[CMP]]
10*5cd0900eSMarina Taylor;
11*5cd0900eSMarina Taylor  %xptr = inttoptr i64 %x to ptr
12*5cd0900eSMarina Taylor  %yptr = inttoptr i64 %y to ptr
13*5cd0900eSMarina Taylor  %cmp = icmp eq ptr %xptr, %yptr
14*5cd0900eSMarina Taylor  ret i1 %cmp
15*5cd0900eSMarina Taylor}
16*5cd0900eSMarina Taylor
17*5cd0900eSMarina Taylordefine i1 @inttoptr_constant(i64 %x) {
18*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_constant(
19*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i64 [[X:%.*]], 42
20*5cd0900eSMarina Taylor; CHECK-NEXT:    ret i1 [[CMP]]
21*5cd0900eSMarina Taylor;
22*5cd0900eSMarina Taylor  %xptr = inttoptr i64 %x to ptr
23*5cd0900eSMarina Taylor  %cmp = icmp eq ptr %xptr, inttoptr (i64 42 to ptr)
24*5cd0900eSMarina Taylor  ret i1 %cmp
25*5cd0900eSMarina Taylor}
26*5cd0900eSMarina Taylor
27*5cd0900eSMarina Taylordefine <2 x i1> @inttoptr_vector(<2 x i64> %x, <2 x i64> %y) {
28*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_vector(
29*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq <2 x i64> [[X:%.*]], [[Y:%.*]]
30*5cd0900eSMarina Taylor; CHECK-NEXT:    ret <2 x i1> [[CMP]]
31*5cd0900eSMarina Taylor;
32*5cd0900eSMarina Taylor  %xptr = inttoptr <2 x i64> %x to <2 x ptr>
33*5cd0900eSMarina Taylor  %yptr = inttoptr <2 x i64> %y to <2 x ptr>
34*5cd0900eSMarina Taylor  %cmp = icmp eq <2 x ptr> %xptr, %yptr
35*5cd0900eSMarina Taylor  ret <2 x i1> %cmp
36*5cd0900eSMarina Taylor}
37*5cd0900eSMarina Taylor
38*5cd0900eSMarina Taylordefine <2 x i1> @inttoptr_vector_constant(<2 x i64> %x) {
39*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_vector_constant(
40*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq <2 x i64> [[X:%.*]], <i64 42, i64 123>
41*5cd0900eSMarina Taylor; CHECK-NEXT:    ret <2 x i1> [[CMP]]
42*5cd0900eSMarina Taylor;
43*5cd0900eSMarina Taylor  %xptr = inttoptr <2 x i64> %x to <2 x ptr>
44*5cd0900eSMarina Taylor  %cmp = icmp eq <2 x ptr> %xptr, inttoptr (<2 x i64> <i64 42, i64 123> to <2 x ptr>)
45*5cd0900eSMarina Taylor  ret <2 x i1> %cmp
46*5cd0900eSMarina Taylor}
47*5cd0900eSMarina Taylor
48*5cd0900eSMarina Taylordefine i1 @inttoptr_size_mismatch(i200 %x, i64 %y) {
49*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_size_mismatch(
50*5cd0900eSMarina Taylor; CHECK-NEXT:    [[TMP1:%.*]] = trunc i200 [[X:%.*]] to i64
51*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i64 [[Y:%.*]], [[TMP1]]
52*5cd0900eSMarina Taylor; CHECK-NEXT:    ret i1 [[CMP]]
53*5cd0900eSMarina Taylor;
54*5cd0900eSMarina Taylor  %xptr = inttoptr i200 %x to ptr
55*5cd0900eSMarina Taylor  %yptr = inttoptr i64 %y to ptr
56*5cd0900eSMarina Taylor  %cmp = icmp eq ptr %xptr, %yptr
57*5cd0900eSMarina Taylor  ret i1 %cmp
58*5cd0900eSMarina Taylor}
59*5cd0900eSMarina Taylor
60*5cd0900eSMarina Taylordefine <2 x i1> @inttoptr_vector_constant_size_mismatch(<2 x i64> %x) {
61*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_vector_constant_size_mismatch(
62*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq <2 x i64> [[X:%.*]], <i64 42, i64 123>
63*5cd0900eSMarina Taylor; CHECK-NEXT:    ret <2 x i1> [[CMP]]
64*5cd0900eSMarina Taylor;
65*5cd0900eSMarina Taylor  %xptr = inttoptr <2 x i64> %x to <2 x ptr>
66*5cd0900eSMarina Taylor  %cmp = icmp eq <2 x ptr> %xptr, inttoptr (<2x i9> <i9 42, i9 123> to <2 x ptr>)
67*5cd0900eSMarina Taylor  ret <2 x i1> %cmp
68*5cd0900eSMarina Taylor}
69*5cd0900eSMarina Taylor
70*5cd0900eSMarina Taylordefine i1 @inttoptr_oneside(i64 %x, ptr %y) {
71*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_oneside(
72*5cd0900eSMarina Taylor; CHECK-NEXT:    [[XPTR:%.*]] = inttoptr i64 [[X:%.*]] to ptr
73*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y:%.*]], [[XPTR]]
74*5cd0900eSMarina Taylor; CHECK-NEXT:    ret i1 [[CMP]]
75*5cd0900eSMarina Taylor;
76*5cd0900eSMarina Taylor  %xptr = inttoptr i64 %x to ptr
77*5cd0900eSMarina Taylor  %cmp = icmp eq ptr %xptr, %y
78*5cd0900eSMarina Taylor  ret i1 %cmp
79*5cd0900eSMarina Taylor}
80*5cd0900eSMarina Taylor
81*5cd0900eSMarina Taylordefine i1 @inttoptr_used(i64 %x, i64 %y) {
82*5cd0900eSMarina Taylor; CHECK-LABEL: @inttoptr_used(
83*5cd0900eSMarina Taylor; CHECK-NEXT:    [[XPTR:%.*]] = inttoptr i64 [[X:%.*]] to ptr
84*5cd0900eSMarina Taylor; CHECK-NEXT:    [[YPTR:%.*]] = inttoptr i64 [[Y:%.*]] to ptr
85*5cd0900eSMarina Taylor; CHECK-NEXT:    call void @use_ptr(ptr [[XPTR]])
86*5cd0900eSMarina Taylor; CHECK-NEXT:    call void @use_ptr(ptr [[YPTR]])
87*5cd0900eSMarina Taylor; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i64 [[X]], [[Y]]
88*5cd0900eSMarina Taylor; CHECK-NEXT:    ret i1 [[CMP]]
89*5cd0900eSMarina Taylor;
90*5cd0900eSMarina Taylor  %xptr = inttoptr i64 %x to ptr
91*5cd0900eSMarina Taylor  %yptr = inttoptr i64 %y to ptr
92*5cd0900eSMarina Taylor  call void @use_ptr(ptr %xptr)
93*5cd0900eSMarina Taylor  call void @use_ptr(ptr %yptr)
94*5cd0900eSMarina Taylor  %cmp = icmp ugt ptr %xptr, %yptr
95*5cd0900eSMarina Taylor  ret i1 %cmp
96*5cd0900eSMarina Taylor}
97*5cd0900eSMarina Taylor
98