xref: /llvm-project/llvm/test/Transforms/InstCombine/load-bitcast32.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: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