diff options
| author | James Molloy <james.molloy@arm.com> | 2015-11-19 18:04:33 +0000 |
|---|---|---|
| committer | James Molloy <james.molloy@arm.com> | 2015-11-19 18:04:33 +0000 |
| commit | 1d695a09ddd39d4163f9d08d250309865be7630f (patch) | |
| tree | e2234f231e552b58ead2598ac1c8c661da18251b /llvm/test/Transforms | |
| parent | c7157bfd55dd04788af6abb04d0d2910634a9aa3 (diff) | |
| download | bcm5719-llvm-1d695a09ddd39d4163f9d08d250309865be7630f.tar.gz bcm5719-llvm-1d695a09ddd39d4163f9d08d250309865be7630f.zip | |
[GlobalOpt] Localize some globals that have non-instruction users
We currently bail out of global localization if the global has non-instruction users. However, often these can be simple bitcasts or constant-GEPs, which we can easily turn into instructions before localizing. Be a bit more aggressive.
llvm-svn: 253584
Diffstat (limited to 'llvm/test/Transforms')
| -rw-r--r-- | llvm/test/Transforms/GlobalOpt/localize-constexpr.ll | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll b/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll new file mode 100644 index 00000000000..6754533a50c --- /dev/null +++ b/llvm/test/Transforms/GlobalOpt/localize-constexpr.ll @@ -0,0 +1,28 @@ +; RUN: opt -S < %s -globalopt | FileCheck %s + +@G = internal global i32 42 + +define i8 @f() norecurse { +; CHECK-LABEL: @f +; CHECK: alloca +; CHECK-NOT: @G +; CHECK: } + store i32 42, i32* @G + %a = load i8, i8* bitcast (i32* @G to i8*) + ret i8 %a +} + +@H = internal global i32 42 +@Halias = internal alias i32, i32* @H + +; @H can't be localized because @Halias uses it, and @Halias can't be converted to an instruction. +define i8 @g() norecurse { +; CHECK-LABEL: @g +; CHECK-NOT: alloca +; CHECK: @H +; CHECK: } + store i32 42, i32* @H + %a = load i8, i8* bitcast (i32* @H to i8*) + ret i8 %a +} + |

