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