1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt -passes=globalopt -S %s | FileCheck %s 3 4%struct.global.20ptr = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr } 5 6@global.20ptr = internal unnamed_addr global %struct.global.20ptr zeroinitializer 7 8declare i32 @fn0() 9 10declare i32 @fn1() 11 12declare i32 @fn2() 13 14declare i32 @fn3() 15 16define void @stores_single_use_gep_constexpr() { 17; CHECK-LABEL: @stores_single_use_gep_constexpr( 18; CHECK-NEXT: entry: 19; CHECK-NEXT: store ptr @fn0, ptr @global.20ptr, align 8 20; CHECK-NEXT: store ptr @fn1, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR:%.*]], ptr @global.20ptr, i64 0, i32 1), align 8 21; CHECK-NEXT: store ptr @fn2, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 2), align 8 22; CHECK-NEXT: store ptr @fn3, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 3), align 8 23; CHECK-NEXT: store ptr @fn0, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 4), align 8 24; CHECK-NEXT: store ptr @fn1, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 5), align 8 25; CHECK-NEXT: store ptr @fn2, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 6), align 8 26; CHECK-NEXT: store ptr @fn3, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 7), align 8 27; CHECK-NEXT: store ptr @fn0, ptr getelementptr inbounds ([[STRUCT_GLOBAL_20PTR]], ptr @global.20ptr, i64 0, i32 8), align 8 28; CHECK-NEXT: ret void 29; 30entry: 31 store ptr @fn0, ptr @global.20ptr, align 8 32 store ptr @fn1, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 1), align 8 33 store ptr @fn2, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 2), align 8 34 store ptr @fn3, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 3), align 8 35 store ptr @fn0, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 4), align 8 36 store ptr @fn1, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 5), align 8 37 store ptr @fn2, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 6), align 8 38 store ptr @fn3, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 7), align 8 39 store ptr @fn0, ptr getelementptr inbounds (%struct.global.20ptr, ptr @global.20ptr, i64 0, i32 8), align 8 40 ret void 41} 42 43@global2.20ptr = internal unnamed_addr global %struct.global.20ptr zeroinitializer 44 45define void @other_constexpr(ptr %p) { 46; CHECK-LABEL: @other_constexpr( 47; CHECK-NEXT: store i64 ptrtoint (ptr @global.20ptr to i64), ptr [[P:%.*]], align 4 48; CHECK-NEXT: store i64 ptrtoint (ptr @global2.20ptr to i64), ptr [[P]], align 4 49; CHECK-NEXT: ret void 50; 51 store i64 ptrtoint (ptr @global.20ptr to i64), ptr %p 52 store i64 ptrtoint (ptr @global2.20ptr to i64), ptr %p 53 ret void 54} 55