; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals all --version 5 ; RUN: opt -p globalopt -S %s | FileCheck %s @G = internal global [2 x i64 ] zeroinitializer @H = internal global [2 x i64 ] zeroinitializer ;. ; CHECK: @G = internal global [2 x i64] zeroinitializer ; CHECK: @H = internal global [2 x i64] zeroinitializer ;. define i64 @G_used_by_gep_inttoptr_exprs() { ; CHECK-LABEL: define i64 @G_used_by_gep_inttoptr_exprs() local_unnamed_addr { ; CHECK-NEXT: [[L:%.*]] = load i64, ptr @G, align 8 ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr getelementptr inbounds nuw (i8, ptr @G, i64 16) to i64), i64 8) to ptr), i64 1 ; CHECK-NEXT: [[C:%.*]] = icmp eq ptr [[GEP]], @G ; CHECK-NEXT: [[SEL:%.*]] = select i1 [[C]], i64 [[L]], i64 9 ; CHECK-NEXT: ret i64 [[SEL]] ; %l = load i64, ptr @G, align 8 %gep = getelementptr i8, ptr inttoptr (i64 add (i64 ptrtoint (ptr getelementptr inbounds nuw (i8, ptr @G, i64 16) to i64), i64 8) to ptr), i64 1 %c = icmp eq ptr %gep, @G %sel = select i1 %c, i64 %l, i64 9 ret i64 %sel } define i64 @H_constexpr_stored(ptr %p) { ; CHECK-LABEL: define i64 @H_constexpr_stored( ; CHECK-SAME: ptr [[P:%.*]]) local_unnamed_addr { ; CHECK-NEXT: [[L:%.*]] = load i64, ptr @H, align 8 ; CHECK-NEXT: store i64 ptrtoint (ptr getelementptr inbounds nuw (i8, ptr @H, i64 16) to i64), ptr [[P]], align 4 ; CHECK-NEXT: ret i64 [[L]] ; %l = load i64, ptr @H, align 8 store i64 ptrtoint (ptr getelementptr inbounds nuw (i8, ptr @H, i64 16) to i64), ptr %p ret i64 %l }