blob: f34c70efa7a800b3b122e50981a84cb68feeca21 [file] [log] [blame]
Stefan Maksimovicee6b5a72017-10-16 13:18:21 +00001; RUN: llc -march=mips < %s | FileCheck %s -check-prefixes=ALL,MIPS
2; RUN: llc -march=mips < %s -mattr=+micromips | FileCheck %s -check-prefixes=ALL,MM
3
4; Test the patterns used for constant materialization.
5
6; Constants generated using li16
7define i32 @Li16LowBoundary() {
8entry:
9 ; ALL-LABEL: Li16LowBoundary:
10 ; MIPS: addiu $2, $zero, -1
11 ; MM: li16 $2, -1
12 ; ALL-NOT: lui
13 ; ALL-NOT: ori
14 ; MIPS-NOT: li16
15 ; MM-NOT: addiu
16
17 ret i32 -1
18}
19
20define i32 @Li16HighBoundary() {
21entry:
22 ; ALL-LABEL: Li16HighBoundary:
23 ; MIPS: addiu $2, $zero, 126
24 ; MM: li16 $2, 126
25 ; ALL-NOT: lui
26 ; ALL-NOT: ori
27 ; MM-NOT: addiu
28 ; MIPS-NOT: li16
29
30 ret i32 126
31}
32
33; Constants generated using addiu
34define i32 @AddiuLowBoundary() {
35entry:
36 ; ALL-LABEL: AddiuLowBoundary:
37 ; ALL: addiu $2, $zero, -32768
38 ; ALL-NOT: lui
39 ; ALL-NOT: ori
40 ; ALL-NOT: li16
41
42 ret i32 -32768
43}
44
45define i32 @AddiuZero() {
46entry:
47 ; ALL-LABEL: AddiuZero:
48 ; MIPS: addiu $2, $zero, 0
49 ; MM: li16 $2, 0
50 ; ALL-NOT: lui
51 ; ALL-NOT: ori
52 ; MIPS-NOT: li16
53 ; MM-NOT: addiu
54
55 ret i32 0
56}
57
58define i32 @AddiuHighBoundary() {
59entry:
60 ; ALL-LABEL: AddiuHighBoundary:
61 ; ALL: addiu $2, $zero, 32767
62 ; ALL-NOT: lui
63 ; ALL-NOT: ori
64 ; ALL-NOT: li16
65
66 ret i32 32767
67}
68
69; Constants generated using ori
70define i32 @OriLowBoundary() {
71entry:
72 ; ALL-LABEL: OriLowBoundary:
73 ; ALL: ori $2, $zero, 32768
74 ; ALL-NOT: addiu
75 ; ALL-NOT: lui
76 ; ALL-NOT: li16
77
78 ret i32 32768
79}
80
81define i32 @OriHighBoundary() {
82entry:
83 ; ALL-LABEL: OriHighBoundary:
84 ; ALL: ori $2, $zero, 65535
85 ; ALL-NOT: addiu
86 ; ALL-NOT: lui
87 ; ALL-NOT: li16
88
89 ret i32 65535
90}
91
92; Constants generated using lui
93define i32 @LuiPositive() {
94entry:
95 ; ALL-LABEL: LuiPositive:
96 ; ALL: lui $2, 1
97 ; ALL-NOT: addiu
98 ; ALL-NOT: ori
99 ; ALL-NOT: li16
100
101 ret i32 65536
102}
103
104define i32 @LuiNegative() {
105entry:
106 ; ALL-LABEL: LuiNegative:
107 ; ALL: lui $2, 65535
108 ; ALL-NOT: addiu
109 ; ALL-NOT: ori
110 ; ALL-NOT: li16
111
112 ret i32 -65536
113}
114
115; Constants generated using a combination of lui and ori
116define i32 @LuiWithLowBitsSet() {
117entry:
118 ; ALL-LABEL: LuiWithLowBitsSet:
119 ; ALL: lui $1, 1
120 ; ALL: ori $2, $1, 1
121 ; ALL-NOT: addiu
122 ; ALL-NOT: li16
123
124 ret i32 65537
125}
126
127define i32 @BelowAddiuLowBoundary() {
128entry:
129 ; ALL-LABEL: BelowAddiuLowBoundary:
130 ; ALL: lui $1, 65535
131 ; ALL: ori $2, $1, 32767
132 ; ALL-NOT: addiu
133 ; ALL-NOT: li16
134
135 ret i32 -32769
136}