@@ -23,6 +23,11 @@ target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
23
23
24
24
@a = external global i32 , align 4
25
25
@b = external constant i32 , align 4
26
+ @c0 = global i32 42 , align 4
27
+ @c1 = alias i32 , ptr @c0
28
+ @d0 = constant i32 42 , align 4
29
+ @d1 = alias i32 , ptr @d0
30
+ @take_addr_func_alias1 = alias ptr (), ptr @take_addr_func_alias
26
31
27
32
define i32 @read () {
28
33
entry:
@@ -360,6 +365,35 @@ entry:
360
365
; THUMB1_RO_PC-NEXT: .long take_addr_func-([[LPC]]+4)
361
366
}
362
367
368
+ define ptr @take_addr_alias () {
369
+ entry:
370
+ ret ptr @c1
371
+ }
372
+ ; CHECK-LABEL: take_addr_alias:
373
+ ; ARM_RW_SB: movw r[[REG:[0-9]]], :lower16:c1(sbrel)
374
+ ; ARM_RW_SB: movt r[[REG]], :upper16:c1(sbrel)
375
+ ; ARM_RW_SB: add r0, r9, r[[REG]]
376
+
377
+ define ptr @take_addr_const_alias () {
378
+ entry:
379
+ ret ptr @d1
380
+ }
381
+ ; CHECK-LABEL: take_addr_const_alias:
382
+ ; ARM_RO_PC: movw [[REG:r[0-9]]], :lower16:(d1-([[LPC:.LPC[0-9]+_[0-9]+]]+8))
383
+ ; ARM_RO_PC-NEXT: movt [[REG]], :upper16:(d1-([[LPC]]+8))
384
+ ; ARM_RO_PC-NEXT: [[LPC]]:
385
+ ; ARM_RO_PC-NEXT: add r0, pc, [[REG]]
386
+
387
+ define weak ptr @take_addr_func_alias () {
388
+ entry:
389
+ ret ptr @take_addr_func_alias1
390
+ }
391
+ ; CHECK-LABEL: take_addr_func_alias:
392
+ ; ARM_RO_PC: movw [[REG:r[0-9]]], :lower16:(take_addr_func_alias1-([[LPC:.LPC[0-9]+_[0-9]+]]+8))
393
+ ; ARM_RO_PC-NEXT: movt [[REG]], :upper16:(take_addr_func_alias1-([[LPC]]+8))
394
+ ; ARM_RO_PC-NEXT: [[LPC]]:
395
+ ; ARM_RO_PC-NEXT: add r0, pc, [[REG]]
396
+
363
397
define ptr @block_addr () {
364
398
entry:
365
399
br label %lab1
0 commit comments