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