1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=instcombine -S < %s | FileCheck %s 3 4target datalayout = "p:64:64:64-i64:32:32" 5 6 7define ptr @test1(ptr %x) { 8; CHECK-LABEL: @test1( 9; CHECK-NEXT: entry: 10; CHECK-NEXT: [[B:%.*]] = load i64, ptr [[X:%.*]], align 4 11; CHECK-NEXT: [[C:%.*]] = inttoptr i64 [[B]] to ptr 12; CHECK-NEXT: ret ptr [[C]] 13; 14entry: 15 %b = load i64, ptr %x 16 %c = inttoptr i64 %b to ptr 17 18 ret ptr %c 19} 20 21define ptr @test2(ptr %x) { 22; CHECK-LABEL: @test2( 23; CHECK-NEXT: entry: 24; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[X:%.*]], align 4 25; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[B]] to i64 26; CHECK-NEXT: [[C:%.*]] = inttoptr i64 [[TMP0]] to ptr 27; CHECK-NEXT: ret ptr [[C]] 28; 29entry: 30 %b = load i32, ptr %x 31 %c = inttoptr i32 %b to ptr 32 33 ret ptr %c 34} 35 36define ptr @test3(ptr %x) { 37; CHECK-LABEL: @test3( 38; CHECK-NEXT: entry: 39; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[X:%.*]], align 4 40; CHECK-NEXT: [[TMP0:%.*]] = zext i32 [[B]] to i64 41; CHECK-NEXT: [[C:%.*]] = inttoptr i64 [[TMP0]] to ptr 42; CHECK-NEXT: ret ptr [[C]] 43; 44entry: 45 %b = load i32, ptr %x 46 %c = inttoptr i32 %b to ptr 47 48 ret ptr %c 49} 50 51define i64 @test4(ptr %x) { 52; CHECK-LABEL: @test4( 53; CHECK-NEXT: entry: 54; CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[X:%.*]], align 8 55; CHECK-NEXT: [[C:%.*]] = ptrtoint ptr [[B]] to i64 56; CHECK-NEXT: ret i64 [[C]] 57; 58entry: 59 %b = load ptr, ptr %x 60 %c = ptrtoint ptr %b to i64 61 62 ret i64 %c 63} 64 65define i32 @test5(ptr %x) { 66; CHECK-LABEL: @test5( 67; CHECK-NEXT: entry: 68; CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[X:%.*]], align 8 69; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[B]] to i64 70; CHECK-NEXT: [[C:%.*]] = trunc i64 [[TMP0]] to i32 71; CHECK-NEXT: ret i32 [[C]] 72; 73entry: 74 %b = load ptr, ptr %x 75 %c = ptrtoint ptr %b to i32 76 77 ret i32 %c 78} 79 80define i64 @test6(ptr %x) { 81; CHECK-LABEL: @test6( 82; CHECK-NEXT: entry: 83; CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[X:%.*]], align 8 84; CHECK-NEXT: [[C:%.*]] = ptrtoint ptr [[B]] to i64 85; CHECK-NEXT: ret i64 [[C]] 86; 87entry: 88 %b = load ptr, ptr %x 89 %c = ptrtoint ptr %b to i64 90 91 ret i64 %c 92} 93 94