xref: /llvm-project/llvm/test/CodeGen/AVR/addrspacecast.ll (revision 8202a3da3c897fc663f55ae5c638ae56f11543c1)
1*8202a3daSAyke van Laethem; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*8202a3daSAyke van Laethem; RUN: llc < %s -mtriple=avr | FileCheck %s
3*8202a3daSAyke van Laethem
4*8202a3daSAyke van Laethem@global = external global i8
5*8202a3daSAyke van Laethem@progmem = external addrspace(1) global i8
6*8202a3daSAyke van Laethem
7*8202a3daSAyke van Laethemdeclare void @func() addrspace(1)
8*8202a3daSAyke van Laethemdeclare void @doCallback(ptr) addrspace(1)
9*8202a3daSAyke van Laethem
10*8202a3daSAyke van Laethemdefine ptr @casttodata(ptr addrspace(1) %funcptr) addrspace(1) {
11*8202a3daSAyke van Laethem; CHECK-LABEL: casttodata:
12*8202a3daSAyke van Laethem; CHECK:       ; %bb.0:
13*8202a3daSAyke van Laethem; CHECK-NEXT:    ret
14*8202a3daSAyke van Laethem  %result = addrspacecast ptr addrspace(1) %funcptr to ptr
15*8202a3daSAyke van Laethem  ret ptr %result
16*8202a3daSAyke van Laethem}
17*8202a3daSAyke van Laethem
18*8202a3daSAyke van Laethemdefine ptr addrspace(1) @casttofuncptr(ptr %data) addrspace(1) {
19*8202a3daSAyke van Laethem; CHECK-LABEL: casttofuncptr:
20*8202a3daSAyke van Laethem; CHECK:       ; %bb.0:
21*8202a3daSAyke van Laethem; CHECK-NEXT:    ret
22*8202a3daSAyke van Laethem  %result = addrspacecast ptr %data to ptr addrspace(1)
23*8202a3daSAyke van Laethem  ret ptr addrspace(1) %result
24*8202a3daSAyke van Laethem}
25*8202a3daSAyke van Laethem
26*8202a3daSAyke van Laethemdefine ptr addrspace(1) @castglobal() addrspace(1) {
27*8202a3daSAyke van Laethem; CHECK-LABEL: castglobal:
28*8202a3daSAyke van Laethem; CHECK:       ; %bb.0:
29*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r24, lo8(global)
30*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r25, hi8(global)
31*8202a3daSAyke van Laethem; CHECK-NEXT:    ret
32*8202a3daSAyke van Laethem  %result = addrspacecast ptr @global to ptr addrspace(1)
33*8202a3daSAyke van Laethem  ret ptr addrspace(1) %result
34*8202a3daSAyke van Laethem}
35*8202a3daSAyke van Laethem
36*8202a3daSAyke van Laethemdefine ptr @castprogmem() addrspace(1) {
37*8202a3daSAyke van Laethem; CHECK-LABEL: castprogmem:
38*8202a3daSAyke van Laethem; CHECK:       ; %bb.0:
39*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r24, lo8(progmem)
40*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r25, hi8(progmem)
41*8202a3daSAyke van Laethem; CHECK-NEXT:    ret
42*8202a3daSAyke van Laethem  %result = addrspacecast ptr addrspace(1) @progmem to ptr
43*8202a3daSAyke van Laethem  ret ptr %result
44*8202a3daSAyke van Laethem}
45*8202a3daSAyke van Laethem
46*8202a3daSAyke van Laethemdefine ptr @castfunc() addrspace(1) {
47*8202a3daSAyke van Laethem; CHECK-LABEL: castfunc:
48*8202a3daSAyke van Laethem; CHECK:       ; %bb.0:
49*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r24, pm_lo8(func)
50*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r25, pm_hi8(func)
51*8202a3daSAyke van Laethem; CHECK-NEXT:    ret
52*8202a3daSAyke van Laethem  %result = addrspacecast ptr addrspace(1) @func to ptr
53*8202a3daSAyke van Laethem  ret ptr %result
54*8202a3daSAyke van Laethem}
55*8202a3daSAyke van Laethem
56*8202a3daSAyke van Laethemdefine void @callCallback() addrspace(1) {
57*8202a3daSAyke van Laethem; CHECK-LABEL: callCallback:
58*8202a3daSAyke van Laethem; CHECK:       ; %bb.0:
59*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r24, pm_lo8(func)
60*8202a3daSAyke van Laethem; CHECK-NEXT:    ldi r25, pm_hi8(func)
61*8202a3daSAyke van Laethem; CHECK-NEXT:    rcall doCallback
62*8202a3daSAyke van Laethem; CHECK-NEXT:    ret
63*8202a3daSAyke van Laethem  call addrspace(1) void @doCallback(ptr addrspacecast (ptr addrspace(1) @func to ptr))
64*8202a3daSAyke van Laethem  ret void
65*8202a3daSAyke van Laethem}
66