1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals
2 ; RUN: opt -S -passes=globalopt < %s | FileCheck %s
4 ; Global SRA should not be performed here (or at least not naively), as
5 ; offset 4 is accessed as both i32 and i64.
7 %T = type { i32, i32, i32, i32 }
8 @g = internal global %T zeroinitializer
11 ; CHECK: @[[G:[a-zA-Z0-9_$"\\.-]+]] = internal unnamed_addr global [[T:%.*]] zeroinitializer
13 define void @test1() {
14 ; CHECK-LABEL: @test1(
15 ; CHECK-NEXT: store i32 1, ptr getelementptr inbounds ([[T:%.*]], ptr @g, i64 0, i32 1), align 4
16 ; CHECK-NEXT: store i32 2, ptr getelementptr inbounds ([[T]], ptr @g, i64 0, i32 2), align 4
17 ; CHECK-NEXT: ret void
19 store i32 1, ptr getelementptr (%T, ptr @g, i64 0, i32 1)
20 store i32 2, ptr getelementptr (%T, ptr @g, i64 0, i32 2)
25 ; CHECK-LABEL: @load1(
26 ; CHECK-NEXT: [[V:%.*]] = load i32, ptr getelementptr inbounds ([[T:%.*]], ptr @g, i64 0, i32 1), align 4
27 ; CHECK-NEXT: ret i32 [[V]]
29 %v = load i32, ptr getelementptr (%T, ptr @g, i64 0, i32 1)
34 ; CHECK-LABEL: @load2(
35 ; CHECK-NEXT: [[V:%.*]] = load i64, ptr getelementptr inbounds ([[T:%.*]], ptr @g, i64 0, i32 2), align 4
36 ; CHECK-NEXT: ret i64 [[V]]
38 %v = load i64, ptr getelementptr (%T, ptr @g, i64 0, i32 2)