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