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 3 4; Global SRA should not be performed here (or at least not naively), as 5; offset 4 is accessed as both i32 and i64. 6 7%T = type { i32, i32, i32, i32 } 8@g = internal global %T zeroinitializer 9 10;. 11; CHECK: @g = internal unnamed_addr global %T zeroinitializer 12;. 13define void @test1() { 14; CHECK-LABEL: @test1( 15; CHECK-NEXT: store i32 1, ptr getelementptr ([[T:%.*]], ptr @g, i64 0, i32 1), align 4 16; CHECK-NEXT: store i32 2, ptr getelementptr ([[T]], ptr @g, i64 0, i32 2), align 4 17; CHECK-NEXT: ret void 18; 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) 21 ret void 22} 23 24define i32 @load1() { 25; CHECK-LABEL: @load1( 26; CHECK-NEXT: [[V:%.*]] = load i32, ptr getelementptr ([[T:%.*]], ptr @g, i64 0, i32 1), align 4 27; CHECK-NEXT: ret i32 [[V]] 28; 29 %v = load i32, ptr getelementptr (%T, ptr @g, i64 0, i32 1) 30 ret i32 %v 31} 32 33define i64 @load2() { 34; CHECK-LABEL: @load2( 35; CHECK-NEXT: [[V:%.*]] = load i64, ptr getelementptr ([[T:%.*]], ptr @g, i64 0, i32 2), align 4 36; CHECK-NEXT: ret i64 [[V]] 37; 38 %v = load i64, ptr getelementptr (%T, ptr @g, i64 0, i32 2) 39 ret i64 %v 40} 41