summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-05-06 16:48:58 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-05-06 16:48:58 +0000
commit52dc5d828fd75c7ec3ae82c5d5737e34a2a1b938 (patch)
tree8f3a7070c1466a4a75d0cbd5d779329ebfc64646 /llvm/test
parenta9f3a5cb376d4cf9d1148ddef8805646ead90066 (diff)
downloadbcm5719-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.ll14
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() {
OpenPOWER on IntegriCloud