diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-05-06 16:48:58 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-05-06 16:48:58 +0000 |
| commit | 52dc5d828fd75c7ec3ae82c5d5737e34a2a1b938 (patch) | |
| tree | 8f3a7070c1466a4a75d0cbd5d779329ebfc64646 /llvm/test | |
| parent | a9f3a5cb376d4cf9d1148ddef8805646ead90066 (diff) | |
| download | bcm5719-llvm-52dc5d828fd75c7ec3ae82c5d5737e34a2a1b938.tar.gz bcm5719-llvm-52dc5d828fd75c7ec3ae82c5d5737e34a2a1b938.zip | |
Special case aliases in GlobalValue::getAlignment.
An alias has the address of what it points to, so it also has the same
alignment.
This allows a few optimizations to see past aliases for free.
llvm-svn: 208103
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/AArch64/global-alignment.ll | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AArch64/global-alignment.ll b/llvm/test/CodeGen/AArch64/global-alignment.ll index 24e6618e98b..36b74e5a57c 100644 --- a/llvm/test/CodeGen/AArch64/global-alignment.ll +++ b/llvm/test/CodeGen/AArch64/global-alignment.ll @@ -4,6 +4,7 @@ @var32 = global [3 x i32] zeroinitializer @var64 = global [3 x i64] zeroinitializer @var32_align64 = global [3 x i32] zeroinitializer, align 8 +@alias = alias [3 x i32]* @var32_align64 define i64 @test_align32() { ; CHECK-LABEL: test_align32: @@ -47,6 +48,19 @@ define i64 @test_var32_align64() { ret i64 %val } +define i64 @test_var32_alias() { +; CHECK-LABEL: test_var32_alias: + %addr = bitcast [3 x i32]* @alias to i64* + + ; Test that we can find the alignment for aliases. + %val = load i64* %addr +; CHECK: adrp x[[HIBITS:[0-9]+]], alias +; CHECK-NOT: add x[[HIBITS]] +; CHECK: ldr x0, [x[[HIBITS]], {{#?}}:lo12:alias] + + ret i64 %val +} + @yet_another_var = external global {i32, i32} define i64 @test_yet_another_var() { |

