Home | History | Annotate | Download | only in XCore
      1 ; RUN: llc -march=xcore < %s | FileCheck %s
      2 
      3 declare i8 addrspace(1)* @llvm.xcore.getr.p1i8(i32 %type)
      4 declare void @llvm.xcore.freer.p1i8(i8 addrspace(1)* %r)
      5 declare i32 @llvm.xcore.in.p1i8(i8 addrspace(1)* %r)
      6 declare i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
      7 declare i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
      8 declare void @llvm.xcore.out.p1i8(i8 addrspace(1)* %r, i32 %value)
      9 declare void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value)
     10 declare void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value)
     11 declare void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value)
     12 declare i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r)
     13 declare i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r)
     14 declare void @llvm.xcore.setd.p1i8(i8 addrspace(1)* %r, i32 %value)
     15 declare void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 %value)
     16 declare i32 @llvm.xcore.inshr.p1i8(i8 addrspace(1)* %r, i32 %value)
     17 declare i32 @llvm.xcore.outshr.p1i8(i8 addrspace(1)* %r, i32 %value)
     18 declare void @llvm.xcore.clrpt.p1i8(i8 addrspace(1)* %r)
     19 declare void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
     20 declare i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
     21 declare void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r)
     22 declare void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value)
     23 declare void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p)
     24 declare void @llvm.xcore.setev.p1i8(i8 addrspace(1)* %r, i8* %p)
     25 declare void @llvm.xcore.edu.p1i8(i8 addrspace(1)* %r)
     26 declare void @llvm.xcore.eeu.p1i8(i8 addrspace(1)* %r)
     27 declare void @llvm.xcore.setclk.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
     28 declare void @llvm.xcore.setrdy.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
     29 declare void @llvm.xcore.setpsc.p1i8(i8 addrspace(1)* %r, i32 %value)
     30 declare i32 @llvm.xcore.peek.p1i8(i8 addrspace(1)* %r)
     31 declare i32 @llvm.xcore.endin.p1i8(i8 addrspace(1)* %r)
     32 
     33 define i8 addrspace(1)* @getr() {
     34 ; CHECK-LABEL: getr:
     35 ; CHECK: getr r0, 5
     36 	%result = call i8 addrspace(1)* @llvm.xcore.getr.p1i8(i32 5)
     37 	ret i8 addrspace(1)* %result
     38 }
     39 
     40 define void @freer(i8 addrspace(1)* %r) {
     41 ; CHECK-LABEL: freer:
     42 ; CHECK: freer res[r0]
     43 	call void @llvm.xcore.freer.p1i8(i8 addrspace(1)* %r)
     44 	ret void
     45 }
     46 
     47 define i32 @in(i8 addrspace(1)* %r) {
     48 ; CHECK-LABEL: in:
     49 ; CHECK: in r0, res[r0]
     50 	%result = call i32 @llvm.xcore.in.p1i8(i8 addrspace(1)* %r)
     51 	ret i32 %result
     52 }
     53 
     54 define i32 @int(i8 addrspace(1)* %r) {
     55 ; CHECK-LABEL: int:
     56 ; CHECK: int r0, res[r0]
     57 	%result = call i32 @llvm.xcore.int.p1i8(i8 addrspace(1)* %r)
     58 	ret i32 %result
     59 }
     60 
     61 define i32 @inct(i8 addrspace(1)* %r) {
     62 ; CHECK-LABEL: inct:
     63 ; CHECK: inct r0, res[r0]
     64 	%result = call i32 @llvm.xcore.inct.p1i8(i8 addrspace(1)* %r)
     65 	ret i32 %result
     66 }
     67 
     68 define void @out(i8 addrspace(1)* %r, i32 %value) {
     69 ; CHECK-LABEL: out:
     70 ; CHECK: out res[r0], r1
     71 	call void @llvm.xcore.out.p1i8(i8 addrspace(1)* %r, i32 %value)
     72 	ret void
     73 }
     74 
     75 define void @outt(i8 addrspace(1)* %r, i32 %value) {
     76 ; CHECK-LABEL: outt:
     77 ; CHECK: outt res[r0], r1
     78 	call void @llvm.xcore.outt.p1i8(i8 addrspace(1)* %r, i32 %value)
     79 	ret void
     80 }
     81 
     82 define void @outct(i8 addrspace(1)* %r, i32 %value) {
     83 ; CHECK-LABEL: outct:
     84 ; CHECK: outct res[r0], r1
     85 	call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 %value)
     86 	ret void
     87 }
     88 
     89 define void @outcti(i8 addrspace(1)* %r) {
     90 ; CHECK-LABEL: outcti:
     91 ; CHECK: outct res[r0], 11
     92 	call void @llvm.xcore.outct.p1i8(i8 addrspace(1)* %r, i32 11)
     93 	ret void
     94 }
     95 
     96 define void @chkct(i8 addrspace(1)* %r, i32 %value) {
     97 ; CHECK-LABEL: chkct:
     98 ; CHECK: chkct res[r0], r1
     99 	call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 %value)
    100 	ret void
    101 }
    102 
    103 define void @chkcti(i8 addrspace(1)* %r) {
    104 ; CHECK-LABEL: chkcti:
    105 ; CHECK: chkct res[r0], 11
    106 	call void @llvm.xcore.chkct.p1i8(i8 addrspace(1)* %r, i32 11)
    107 	ret void
    108 }
    109 
    110 define void @setd(i8 addrspace(1)* %r, i32 %value) {
    111 ; CHECK-LABEL: setd:
    112 ; CHECK: setd res[r0], r1
    113 	call void @llvm.xcore.setd.p1i8(i8 addrspace(1)* %r, i32 %value)
    114 	ret void
    115 }
    116 
    117 define void @setc(i8 addrspace(1)* %r, i32 %value) {
    118 ; CHECK-LABEL: setc:
    119 ; CHECK: setc res[r0], r1
    120 	call void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 %value)
    121 	ret void
    122 }
    123 
    124 define void @setci(i8 addrspace(1)* %r) {
    125 ; CHECK-LABEL: setci:
    126 ; CHECK: setc res[r0], 2
    127 	call void @llvm.xcore.setc.p1i8(i8 addrspace(1)* %r, i32 2)
    128 	ret void
    129 }
    130 
    131 define i32 @inshr(i32 %value, i8 addrspace(1)* %r) {
    132 ; CHECK-LABEL: inshr:
    133 ; CHECK: inshr r0, res[r1]
    134 	%result = call i32 @llvm.xcore.inshr.p1i8(i8 addrspace(1)* %r, i32 %value)
    135 	ret i32 %result
    136 }
    137 
    138 define i32 @outshr(i32 %value, i8 addrspace(1)* %r) {
    139 ; CHECK-LABEL: outshr:
    140 ; CHECK: outshr res[r1], r0
    141 	%result = call i32 @llvm.xcore.outshr.p1i8(i8 addrspace(1)* %r, i32 %value)
    142 	ret i32 %result
    143 }
    144 
    145 define void @clrpt(i8 addrspace(1)* %r) {
    146 ; CHECK-LABEL: clrpt:
    147 ; CHECK: clrpt res[r0]
    148 	call void @llvm.xcore.clrpt.p1i8(i8 addrspace(1)* %r)
    149 	ret void
    150 }
    151 
    152 define void @setpt(i8 addrspace(1)* %r, i32 %value) {
    153 ; CHECK-LABEL: setpt:
    154 ; CHECK: setpt res[r0], r1
    155 	call void @llvm.xcore.setpt.p1i8(i8 addrspace(1)* %r, i32 %value)
    156 	ret void
    157 }
    158 
    159 define i32 @getts(i8 addrspace(1)* %r) {
    160 ; CHECK-LABEL: getts:
    161 ; CHECK: getts r0, res[r0]
    162 	%result = call i32 @llvm.xcore.getts.p1i8(i8 addrspace(1)* %r)
    163 	ret i32 %result
    164 }
    165 
    166 define void @syncr(i8 addrspace(1)* %r) {
    167 ; CHECK-LABEL: syncr:
    168 ; CHECK: syncr res[r0]
    169 	call void @llvm.xcore.syncr.p1i8(i8 addrspace(1)* %r)
    170 	ret void
    171 }
    172 
    173 define void @settw(i8 addrspace(1)* %r, i32 %value) {
    174 ; CHECK-LABEL: settw:
    175 ; CHECK: settw res[r0], r1
    176 	call void @llvm.xcore.settw.p1i8(i8 addrspace(1)* %r, i32 %value)
    177 	ret void
    178 }
    179 
    180 define void @setv(i8 addrspace(1)* %r, i8* %p) {
    181 ; CHECK-LABEL: setv:
    182 ; CHECK: mov r11, r1
    183 ; CHECK-NEXT: setv res[r0], r11
    184 	call void @llvm.xcore.setv.p1i8(i8 addrspace(1)* %r, i8* %p)
    185 	ret void
    186 }
    187 
    188 define void @setev(i8 addrspace(1)* %r, i8* %p) {
    189 ; CHECK-LABEL: setev:
    190 ; CHECK: mov r11, r1
    191 ; CHECK-NEXT: setev res[r0], r11
    192 	call void @llvm.xcore.setev.p1i8(i8 addrspace(1)* %r, i8* %p)
    193 	ret void
    194 }
    195 
    196 define void @edu(i8 addrspace(1)* %r) {
    197 ; CHECK-LABEL: edu:
    198 ; CHECK: edu res[r0]
    199 	call void @llvm.xcore.edu.p1i8(i8 addrspace(1)* %r)
    200 	ret void
    201 }
    202 
    203 define void @eeu(i8 addrspace(1)* %r) {
    204 ; CHECK-LABEL: eeu:
    205 ; CHECK: eeu res[r0]
    206 	call void @llvm.xcore.eeu.p1i8(i8 addrspace(1)* %r)
    207 	ret void
    208 }
    209 
    210 define void @setclk(i8 addrspace(1)* %a, i8 addrspace(1)* %b) {
    211 ; CHECK: setclk
    212 ; CHECK: setclk res[r0], r1
    213 	call void @llvm.xcore.setclk.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
    214 	ret void
    215 }
    216 
    217 define void @setrdy(i8 addrspace(1)* %a, i8 addrspace(1)* %b) {
    218 ; CHECK: setrdy
    219 ; CHECK: setrdy res[r0], r1
    220 	call void @llvm.xcore.setrdy.p1i8.p1i8(i8 addrspace(1)* %a, i8 addrspace(1)* %b)
    221 	ret void
    222 }
    223 
    224 define void @setpsc(i8 addrspace(1)* %r, i32 %value) {
    225 ; CHECK: setpsc
    226 ; CHECK: setpsc res[r0], r1
    227 	call void @llvm.xcore.setpsc.p1i8(i8 addrspace(1)* %r, i32 %value)
    228 	ret void
    229 }
    230 
    231 define i32 @peek(i8 addrspace(1)* %r) {
    232 ; CHECK-LABEL: peek:
    233 ; CHECK: peek r0, res[r0]
    234 	%result = call i32 @llvm.xcore.peek.p1i8(i8 addrspace(1)* %r)
    235 	ret i32 %result
    236 }
    237 
    238 define i32 @endin(i8 addrspace(1)* %r) {
    239 ; CHECK-LABEL: endin:
    240 ; CHECK: endin r0, res[r0]
    241 	%result = call i32 @llvm.xcore.endin.p1i8(i8 addrspace(1)* %r)
    242 	ret i32 %result
    243 }
    244 
    245 define i32 @testct(i8 addrspace(1)* %r) {
    246 ; CHECK-LABEL: testct:
    247 ; CHECK: testct r0, res[r0]
    248 	%result = call i32 @llvm.xcore.testct.p1i8(i8 addrspace(1)* %r)
    249 	ret i32 %result
    250 }
    251 
    252 define i32 @testwct(i8 addrspace(1)* %r) {
    253 ; CHECK-LABEL: testwct:
    254 ; CHECK: testwct r0, res[r0]
    255 	%result = call i32 @llvm.xcore.testwct.p1i8(i8 addrspace(1)* %r)
    256 	ret i32 %result
    257 }
    258