brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · eec7806 Raw
114 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=instcombine -S -disable-i2p-p2i-opt < %s | FileCheck %s3 4target datalayout = "e-p:64:64-p1:16:16-p2:32:32:32-p3:64:64:64"5target triple = "x86_64-unknown-linux-gnu"6 7; icmp (inttoptr (ptrtoint p1)), p2 --> icmp p1, p2.8 9define i1 @func(ptr %X, ptr %Y) {10; CHECK-LABEL: @func(11; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y:%.*]], [[X:%.*]]12; CHECK-NEXT:    ret i1 [[CMP]]13;14  %i = ptrtoint ptr %X to i6415  %p = inttoptr i64 %i to ptr16  %cmp = icmp eq ptr %p, %Y17  ret i1 %cmp18}19 20define <2 x i1> @func_vec(<2 x ptr> %X, <2 x ptr> %Y) {21; CHECK-LABEL: @func_vec(22; CHECK-NEXT:    [[CMP:%.*]] = icmp eq <2 x ptr> [[Y:%.*]], [[X:%.*]]23; CHECK-NEXT:    ret <2 x i1> [[CMP]]24;25  %i = ptrtoint <2 x ptr> %X to <2 x i64>26  %p = inttoptr <2 x i64> %i to <2 x ptr>27  %cmp = icmp eq <2 x ptr> %p, %Y28  ret <2 x i1> %cmp29}30 31define <vscale x 2 x i1> @func_svec(<vscale x 2 x ptr> %X, <vscale x 2 x ptr> %Y) {32; CHECK-LABEL: @func_svec(33; CHECK-NEXT:    [[CMP:%.*]] = icmp eq <vscale x 2 x ptr> [[Y:%.*]], [[X:%.*]]34; CHECK-NEXT:    ret <vscale x 2 x i1> [[CMP]]35;36  %i = ptrtoint <vscale x 2 x ptr> %X to <vscale x 2 x i64>37  %p = inttoptr <vscale x 2 x i64> %i to <vscale x 2 x ptr>38  %cmp = icmp eq <vscale x 2 x ptr> %p, %Y39  ret <vscale x 2 x i1> %cmp40}41 42define i1 @func_pointer_different_types(ptr %X, ptr %Y) {43; CHECK-LABEL: @func_pointer_different_types(44; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y:%.*]], [[X:%.*]]45; CHECK-NEXT:    ret i1 [[CMP]]46;47  %i = ptrtoint ptr %X to i6448  %p = inttoptr i64 %i to ptr49  %cmp = icmp eq ptr %p, %Y50  ret i1 %cmp51}52 53declare ptr @gen8ptr()54 55define i1 @func_commutative(ptr %X) {56; CHECK-LABEL: @func_commutative(57; CHECK-NEXT:    [[Y:%.*]] = call ptr @gen8ptr()58; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y]], [[X:%.*]]59; CHECK-NEXT:    ret i1 [[CMP]]60;61  %Y = call ptr @gen8ptr() ; thwart complexity-based canonicalization62  %i = ptrtoint ptr %X to i6463  %p = inttoptr i64 %i to ptr64  %cmp = icmp eq ptr %Y, %p65  ret i1 %cmp66}67 68; Negative test - Wrong Integer type.69 70define i1 @func_integer_type_too_small(ptr %X, ptr %Y) {71; CHECK-LABEL: @func_integer_type_too_small(72; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr [[X:%.*]] to i6473; CHECK-NEXT:    [[TMP2:%.*]] = and i64 [[TMP1]], 429496729574; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[TMP2]] to ptr75; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y:%.*]], [[P]]76; CHECK-NEXT:    ret i1 [[CMP]]77;78  %i = ptrtoint ptr %X to i3279  %p = inttoptr i32 %i to ptr80  %cmp = icmp eq ptr %Y, %p81  ret i1 %cmp82}83 84; Negative test - Pointers in different address space85 86define i1 @func_ptr_different_addrspace(ptr %X, ptr addrspace(3) %Y){87; CHECK-LABEL: @func_ptr_different_addrspace(88; CHECK-NEXT:    [[I:%.*]] = ptrtoint ptr [[X:%.*]] to i6489; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[I]] to ptr addrspace(3)90; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr addrspace(3) [[Y:%.*]], [[P]]91; CHECK-NEXT:    ret i1 [[CMP]]92;93  %i = ptrtoint ptr %X to i6494  %p = inttoptr i64 %i to ptr addrspace(3)95  %cmp = icmp eq ptr addrspace(3) %Y, %p96  ret i1 %cmp97}98 99; Negative test - Pointers in different address space100 101define i1 @func_ptr_different_addrspace1(ptr addrspace(2) %X, ptr %Y){102; CHECK-LABEL: @func_ptr_different_addrspace1(103; CHECK-NEXT:    [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[X:%.*]] to i32104; CHECK-NEXT:    [[I:%.*]] = zext i32 [[TMP1]] to i64105; CHECK-NEXT:    [[P:%.*]] = inttoptr i64 [[I]] to ptr106; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[Y:%.*]], [[P]]107; CHECK-NEXT:    ret i1 [[CMP]]108;109  %i = ptrtoint ptr addrspace(2) %X to i64110  %p = inttoptr i64 %i to ptr111  %cmp = icmp eq ptr %Y, %p112  ret i1 %cmp113}114