|
| 1 | +; RUN: opt -global-merge -global-merge-max-offset=100 -S -o - %s | FileCheck %s |
| 2 | +; RUN: opt -passes='global-merge<max-offset=100>' -S -o - %s | FileCheck %s |
| 3 | + |
| 4 | +; NOTE: This is a copy of the llvm/test/Transforms/GlobalMerge/basic.ll test, |
| 5 | +; using `private` global variables instead of `internal`. This is to show that |
| 6 | +; that private globals can be merged in the GlobalMerge pass. |
| 7 | + |
| 8 | +target datalayout = "e-p:64:64" |
| 9 | +target triple = "x86_64-unknown-linux-gnu" |
| 10 | + |
| 11 | +; CHECK: @_MergedGlobals = private global <{ i32, i32 }> <{ i32 1, i32 2 }>, align 4 |
| 12 | +; CHECK: @_MergedGlobals.1 = private global <{ i32, i32 }> <{ i32 3, i32 4 }>, section "foo", align 4 |
| 13 | + |
| 14 | +; CHECK-DAG: @a = private alias i32, ptr @_MergedGlobals{{$}} |
| 15 | +@a = private global i32 1 |
| 16 | + |
| 17 | +; CHECK-DAG: @b = private alias i32, getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1) |
| 18 | +@b = private global i32 2 |
| 19 | + |
| 20 | +; CHECK-DAG: @c = private alias i32, ptr @_MergedGlobals.1{{$}} |
| 21 | +@c = private global i32 3, section "foo" |
| 22 | + |
| 23 | +; CHECK-DAG: @d = private alias i32, getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals.1, i32 0, i32 1) |
| 24 | +@d = private global i32 4, section "foo" |
| 25 | + |
| 26 | +define void @use_private() { |
| 27 | + ; CHECK: load i32, ptr @_MergedGlobals, |
| 28 | + %x = load i32, ptr @a |
| 29 | + ; CHECK: load i32, ptr getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals, i32 0, i32 1) |
| 30 | + %y = load i32, ptr @b |
| 31 | + ; CHECK: load i32, ptr @_MergedGlobals.1 |
| 32 | + %z1 = load i32, ptr @c |
| 33 | + ; CHECK: load i32, ptr getelementptr inbounds (<{ i32, i32 }>, ptr @_MergedGlobals.1, i32 0, i32 1) |
| 34 | + %z2 = load i32, ptr @d |
| 35 | + ret void |
| 36 | +} |
0 commit comments