1; RUN: llc < %s -march=xcore | FileCheck %s
2
3define i32 @load32(i32* %p, i32 %offset) nounwind {
4entry:
5; CHECK-LABEL: load32:
6; CHECK: ldw r0, r0[r1]
7	%0 = getelementptr i32* %p, i32 %offset
8	%1 = load i32* %0, align 4
9	ret i32 %1
10}
11
12define i32 @load32_imm(i32* %p) nounwind {
13entry:
14; CHECK-LABEL: load32_imm:
15; CHECK: ldw r0, r0[11]
16	%0 = getelementptr i32* %p, i32 11
17	%1 = load i32* %0, align 4
18	ret i32 %1
19}
20
21define i32 @load16(i16* %p, i32 %offset) nounwind {
22entry:
23; CHECK-LABEL: load16:
24; CHECK: ld16s r0, r0[r1]
25; CHECK-NOT: sext
26	%0 = getelementptr i16* %p, i32 %offset
27	%1 = load i16* %0, align 2
28	%2 = sext i16 %1 to i32
29	ret i32 %2
30}
31
32define i32 @load8(i8* %p, i32 %offset) nounwind {
33entry:
34; CHECK-LABEL: load8:
35; CHECK: ld8u r0, r0[r1]
36; CHECK-NOT: zext
37	%0 = getelementptr i8* %p, i32 %offset
38	%1 = load i8* %0, align 1
39	%2 = zext i8 %1 to i32
40	ret i32 %2
41}
42
43@GConst = external constant i32
44define i32 @load_cp() nounwind {
45entry:
46; CHECK-LABEL: load_cp:
47; CHECK: ldw r0, cp[GConst]
48  %0 = load i32* @GConst
49  ret i32 %0
50}
51