xref: /llvm-project/llvm/test/Transforms/InstSimplify/opaque-ptr.ll (revision edb2fc6dab2cf04779959829434e9e8572d48a26)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=instsimplify < %s | FileCheck %s
3
4define ptr @gep_zero_indices(ptr %p) {
5; CHECK-LABEL: @gep_zero_indices(
6; CHECK-NEXT:    ret ptr [[P:%.*]]
7;
8  %p2 = getelementptr { i64, i64 }, ptr %p, i64 0, i32 0
9  ret ptr %p2
10}
11
12define ptr @gep_non_zero_indices1(ptr %p) {
13; CHECK-LABEL: @gep_non_zero_indices1(
14; CHECK-NEXT:    [[P2:%.*]] = getelementptr { i64, i64 }, ptr [[P:%.*]], i64 0, i32 1
15; CHECK-NEXT:    ret ptr [[P2]]
16;
17  %p2 = getelementptr { i64, i64 }, ptr %p, i64 0, i32 1
18  ret ptr %p2
19}
20
21define ptr @gep_non_zero_indices2(ptr %p) {
22; CHECK-LABEL: @gep_non_zero_indices2(
23; CHECK-NEXT:    [[P2:%.*]] = getelementptr { i64, i64 }, ptr [[P:%.*]], i64 1, i32 0
24; CHECK-NEXT:    ret ptr [[P2]]
25;
26  %p2 = getelementptr { i64, i64 }, ptr %p, i64 1, i32 0
27  ret ptr %p2
28}
29
30define <2 x ptr> @scalar_base_vector_index(ptr %p) {
31; CHECK-LABEL: @scalar_base_vector_index(
32; CHECK-NEXT:    [[G:%.*]] = getelementptr { i64, i64 }, ptr [[P:%.*]], <2 x i64> zeroinitializer, i32 0
33; CHECK-NEXT:    ret <2 x ptr> [[G]]
34;
35  %g = getelementptr { i64, i64 }, ptr %p, <2 x i64> zeroinitializer, i32 0
36  ret <2 x ptr> %g
37}
38
39define <2 x ptr> @vector_base_vector_index(<2 x ptr> %p) {
40; CHECK-LABEL: @vector_base_vector_index(
41; CHECK-NEXT:    ret <2 x ptr> [[P:%.*]]
42;
43  %g = getelementptr { i64, i64 }, <2 x ptr> %p, <2 x i64> zeroinitializer, i32 0
44  ret <2 x ptr> %g
45}
46
47define <2 x ptr> @vector_base_scalar_index(<2 x ptr> %p) {
48; CHECK-LABEL: @vector_base_scalar_index(
49; CHECK-NEXT:    ret <2 x ptr> [[P:%.*]]
50;
51  %g = getelementptr { i64, i64 }, <2 x ptr> %p, i64 0, i32 0
52  ret <2 x ptr> %g
53}
54
55@g = external global [2 x i32]
56
57define ptr @constexpr_zero_gep_scalar_base_scalar_index() {
58; CHECK-LABEL: @constexpr_zero_gep_scalar_base_scalar_index(
59; CHECK-NEXT:    ret ptr @g
60;
61  ret ptr @g
62}
63
64define <2 x ptr> @constexpr_zero_gep_vector_base_scalar_index() {
65; CHECK-LABEL: @constexpr_zero_gep_vector_base_scalar_index(
66; CHECK-NEXT:    ret <2 x ptr> <ptr @g, ptr @g>
67;
68  ret <2 x ptr> getelementptr ([2 x i32], <2 x ptr> <ptr @g, ptr @g>, i64 0, i64 0)
69}
70
71define <2 x ptr> @constexpr_zero_gep_scalar_base_vector_index() {
72; CHECK-LABEL: @constexpr_zero_gep_scalar_base_vector_index(
73; CHECK-NEXT:    ret <2 x ptr> <ptr @g, ptr @g>
74;
75  ret <2 x ptr> getelementptr ([2 x i32], ptr @g, <2 x i64> zeroinitializer, i64 0)
76}
77
78define <2 x ptr> @constexpr_zero_gep_vector_base_vector_index() {
79; CHECK-LABEL: @constexpr_zero_gep_vector_base_vector_index(
80; CHECK-NEXT:    ret <2 x ptr> <ptr @g, ptr @g>
81;
82  ret <2 x ptr> getelementptr ([2 x i32], <2 x ptr> <ptr @g, ptr @g>, <2 x i64> zeroinitializer, i64 0)
83}
84
85define ptr @constexpr_undef_gep_scalar_base_scalar_index() {
86; CHECK-LABEL: @constexpr_undef_gep_scalar_base_scalar_index(
87; CHECK-NEXT:    ret ptr @g
88;
89  ret ptr getelementptr ([2 x i32], ptr @g, i64 0, i64 undef)
90}
91
92define <2 x ptr> @constexpr_undef_gep_vector_base_scalar_index() {
93; CHECK-LABEL: @constexpr_undef_gep_vector_base_scalar_index(
94; CHECK-NEXT:    ret <2 x ptr> <ptr @g, ptr @g>
95;
96  ret <2 x ptr> getelementptr ([2 x i32], <2 x ptr> <ptr @g, ptr @g>, i64 undef, i64 undef)
97}
98
99define <2 x ptr> @constexpr_undef_gep_scalar_base_vector_index() {
100; CHECK-LABEL: @constexpr_undef_gep_scalar_base_vector_index(
101; CHECK-NEXT:    ret <2 x ptr> <ptr @g, ptr @g>
102;
103  ret <2 x ptr> getelementptr ([2 x i32], ptr @g, <2 x i64> undef, i64 0)
104}
105
106define <2 x ptr> @constexpr_undef_gep_vector_base_vector_index() {
107; CHECK-LABEL: @constexpr_undef_gep_vector_base_vector_index(
108; CHECK-NEXT:    ret <2 x ptr> <ptr @g, ptr @g>
109;
110  ret <2 x ptr> getelementptr ([2 x i32], <2 x ptr> <ptr @g, ptr @g>, <2 x i64> undef, i64 0)
111}
112