• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=mips64el -mcpu=mips64 -mattr=n64 < %s | FileCheck  -check-prefix=EL %s
2; RUN: llc -march=mips64 -mcpu=mips64 -mattr=n64 < %s | FileCheck  -check-prefix=EB %s
3
4%struct.SLL = type { i64 }
5%struct.SI = type { i32 }
6%struct.SUI = type { i32 }
7
8@sll = common global %struct.SLL zeroinitializer, align 1
9@si = common global %struct.SI zeroinitializer, align 1
10@sui = common global %struct.SUI zeroinitializer, align 1
11
12define i64 @foo_load_ll() nounwind readonly {
13entry:
14; EL: ldl $[[R0:[0-9]+]], 7($[[R1:[0-9]+]])
15; EL: ldr $[[R0]], 0($[[R1]])
16; EB: ldl $[[R0:[0-9]+]], 0($[[R1:[0-9]+]])
17; EB: ldr $[[R0]], 7($[[R1]])
18
19  %0 = load i64* getelementptr inbounds (%struct.SLL* @sll, i64 0, i32 0), align 1
20  ret i64 %0
21}
22
23define i64 @foo_load_i() nounwind readonly {
24entry:
25; EL: lwl $[[R0:[0-9]+]], 3($[[R1:[0-9]+]])
26; EL: lwr $[[R0]], 0($[[R1]])
27; EB: lwl $[[R0:[0-9]+]], 0($[[R1:[0-9]+]])
28; EB: lwr $[[R0]], 3($[[R1]])
29
30  %0 = load i32* getelementptr inbounds (%struct.SI* @si, i64 0, i32 0), align 1
31  %conv = sext i32 %0 to i64
32  ret i64 %conv
33}
34
35define i64 @foo_load_ui() nounwind readonly {
36entry:
37; EL: lwl $[[R0:[0-9]+]], 3($[[R1:[0-9]+]])
38; EL: lwr $[[R0]], 0($[[R1]])
39; EL: daddiu $[[R2:[0-9]+]], $zero, 1
40; EL: dsll   $[[R3:[0-9]+]], $[[R2]], 32
41; EL: daddiu $[[R4:[0-9]+]], $[[R3]], -1
42; EL: and    ${{[0-9]+}}, $[[R0]], $[[R4]]
43; EB: lwl $[[R0:[0-9]+]], 0($[[R1:[0-9]+]])
44; EB: lwr $[[R0]], 3($[[R1]])
45
46
47  %0 = load i32* getelementptr inbounds (%struct.SUI* @sui, i64 0, i32 0), align 1
48  %conv = zext i32 %0 to i64
49  ret i64 %conv
50}
51
52define void @foo_store_ll(i64 %a) nounwind {
53entry:
54; EL: sdl $[[R0:[0-9]+]], 7($[[R1:[0-9]+]])
55; EL: sdr $[[R0]], 0($[[R1]])
56; EB: sdl $[[R0:[0-9]+]], 0($[[R1:[0-9]+]])
57; EB: sdr $[[R0]], 7($[[R1]])
58
59  store i64 %a, i64* getelementptr inbounds (%struct.SLL* @sll, i64 0, i32 0), align 1
60  ret void
61}
62
63define void @foo_store_i(i32 %a) nounwind {
64entry:
65; EL: swl $[[R0:[0-9]+]], 3($[[R1:[0-9]+]])
66; EL: swr $[[R0]], 0($[[R1]])
67; EB: swl $[[R0:[0-9]+]], 0($[[R1:[0-9]+]])
68; EB: swr $[[R0]], 3($[[R1]])
69
70  store i32 %a, i32* getelementptr inbounds (%struct.SI* @si, i64 0, i32 0), align 1
71  ret void
72}
73
74