1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -instsimplify -opaque-pointers < %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