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:32: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: [[TMP0:%.*]] = trunc i64 [[B]] to i32 12; CHECK-NEXT: [[C:%.*]] = inttoptr i32 [[TMP0]] to ptr 13; CHECK-NEXT: ret ptr [[C]] 14; 15entry: 16 %b = load i64, ptr %x 17 %c = inttoptr i64 %b to ptr 18 19 ret ptr %c 20} 21 22define ptr @test2(ptr %x) { 23; CHECK-LABEL: @test2( 24; CHECK-NEXT: entry: 25; CHECK-NEXT: [[B:%.*]] = load i32, ptr [[X:%.*]], align 4 26; CHECK-NEXT: [[C:%.*]] = inttoptr i32 [[B]] 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: [[C:%.*]] = inttoptr i32 [[B]] to ptr 41; CHECK-NEXT: ret ptr [[C]] 42; 43entry: 44 %b = load i32, ptr %x 45 %c = inttoptr i32 %b to ptr 46 47 ret ptr %c 48} 49 50define i64 @test4(ptr %x) { 51; CHECK-LABEL: @test4( 52; CHECK-NEXT: entry: 53; CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[X:%.*]], align 4 54; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[B]] to i32 55; CHECK-NEXT: [[C:%.*]] = zext i32 [[TMP0]] 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 4 69; CHECK-NEXT: [[C:%.*]] = ptrtoint ptr [[B]] to i32 70; CHECK-NEXT: ret i32 [[C]] 71; 72entry: 73 %b = load ptr, ptr %x 74 %c = ptrtoint ptr %b to i32 75 76 ret i32 %c 77} 78 79define i64 @test6(ptr %x) { 80; CHECK-LABEL: @test6( 81; CHECK-NEXT: entry: 82; CHECK-NEXT: [[B:%.*]] = load ptr, ptr [[X:%.*]], align 4 83; CHECK-NEXT: [[TMP0:%.*]] = ptrtoint ptr [[B]] to i32 84; CHECK-NEXT: [[C:%.*]] = zext i32 [[TMP0]] 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