41 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals2; RUN: opt -S -passes=globalopt < %s | FileCheck %s3 4; Global SRA should not be performed here (or at least not naively), as5; offset 4 is accessed as both i32 and i64.6 7%T = type { i32, i32, i32, i32 }8@g = internal global %T zeroinitializer9 10;.11; CHECK: @g = internal unnamed_addr global %T zeroinitializer12;.13define void @test1() {14; CHECK-LABEL: @test1(15; CHECK-NEXT: store i32 1, ptr getelementptr ([[T:%.*]], ptr @g, i64 0, i32 1), align 416; CHECK-NEXT: store i32 2, ptr getelementptr ([[T]], ptr @g, i64 0, i32 2), align 417; CHECK-NEXT: ret void18;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 void22}23 24define i32 @load1() {25; CHECK-LABEL: @load1(26; CHECK-NEXT: [[V:%.*]] = load i32, ptr getelementptr ([[T:%.*]], ptr @g, i64 0, i32 1), align 427; CHECK-NEXT: ret i32 [[V]]28;29 %v = load i32, ptr getelementptr (%T, ptr @g, i64 0, i32 1)30 ret i32 %v31}32 33define i64 @load2() {34; CHECK-LABEL: @load2(35; CHECK-NEXT: [[V:%.*]] = load i64, ptr getelementptr ([[T:%.*]], ptr @g, i64 0, i32 2), align 436; CHECK-NEXT: ret i64 [[V]]37;38 %v = load i64, ptr getelementptr (%T, ptr @g, i64 0, i32 2)39 ret i64 %v40}41