Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / Mips / cstmaterialization / constMaterialization.ll
blobf34c70efa7a800b3b122e50981a84cb68feeca21
1 ; 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
4 ; Test the patterns used for constant materialization.
6 ; Constants generated using li16
7 define i32 @Li16LowBoundary() {
8 entry:
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
17   ret i32 -1
20 define i32 @Li16HighBoundary() {
21 entry:
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
30   ret i32 126
33 ; Constants generated using addiu
34 define i32 @AddiuLowBoundary() {
35 entry:
36   ; ALL-LABEL: AddiuLowBoundary:
37   ; ALL:      addiu     $2, $zero, -32768
38   ; ALL-NOT:  lui
39   ; ALL-NOT:  ori
40   ; ALL-NOT:  li16
42   ret i32 -32768
45 define i32 @AddiuZero() {
46 entry:
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
55   ret i32 0
58 define i32 @AddiuHighBoundary() {
59 entry:
60   ; ALL-LABEL: AddiuHighBoundary:
61   ; ALL:     addiu      $2, $zero, 32767
62   ; ALL-NOT: lui
63   ; ALL-NOT: ori
64   ; ALL-NOT: li16
66   ret i32 32767
69 ; Constants generated using ori
70 define i32 @OriLowBoundary() {
71 entry:
72   ; ALL-LABEL: OriLowBoundary:
73   ; ALL:     ori        $2, $zero, 32768
74   ; ALL-NOT: addiu
75   ; ALL-NOT: lui
76   ; ALL-NOT: li16
78   ret i32 32768
81 define i32 @OriHighBoundary() {
82 entry:
83   ; ALL-LABEL: OriHighBoundary:
84   ; ALL:     ori        $2, $zero, 65535
85   ; ALL-NOT: addiu
86   ; ALL-NOT: lui
87   ; ALL-NOT: li16
89   ret i32 65535
92 ; Constants generated using lui
93 define i32 @LuiPositive() {
94 entry:
95   ; ALL-LABEL: LuiPositive:
96   ; ALL:     lui        $2, 1
97   ; ALL-NOT: addiu
98   ; ALL-NOT: ori
99   ; ALL-NOT: li16
101   ret i32 65536
104 define i32 @LuiNegative() {
105 entry:
106   ; ALL-LABEL: LuiNegative:
107   ; ALL:     lui        $2, 65535
108   ; ALL-NOT: addiu
109   ; ALL-NOT: ori
110   ; ALL-NOT: li16
112   ret i32 -65536
115 ; Constants generated using a combination of lui and ori
116 define i32 @LuiWithLowBitsSet() {
117 entry:
118   ; ALL-LABEL: LuiWithLowBitsSet:
119   ; ALL:     lui        $1, 1
120   ; ALL:     ori        $2, $1, 1
121   ; ALL-NOT: addiu
122   ; ALL-NOT: li16
124   ret i32 65537
127 define i32 @BelowAddiuLowBoundary() {
128 entry:
129   ; ALL-LABEL: BelowAddiuLowBoundary:
130   ; ALL:     lui        $1, 65535
131   ; ALL:     ori        $2, $1, 32767
132   ; ALL-NOT: addiu
133   ; ALL-NOT: li16
135   ret i32 -32769