xref: /llvm-project/llvm/test/Transforms/InstCombine/load-bitcast64.ll (revision 4ab40eca080965c65802710e39adbb78c4ce7bde)
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