Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / X86 / movbe.ll
blob721823344867d0c86508defa518d9d646d14bfc3
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc -mtriple=x86_64-linux -mcpu=atom < %s | FileCheck %s
3 ; RUN: llc -mtriple=x86_64-linux -mcpu=slm < %s | FileCheck %s -check-prefix=SLM
4 ; RUN: llc -mtriple=x86_64-linux -mattr=+egpr,+ndd,+movbe --show-mc-encoding < %s | FileCheck %s -check-prefix=EGPR
5 ; RUN: llc -mtriple=x86_64-linux -mattr=+egpr,+ndd --show-mc-encoding < %s | FileCheck %s -check-prefix=NOMOVBE
6 declare i16 @llvm.bswap.i16(i16) nounwind readnone
7 declare i32 @llvm.bswap.i32(i32) nounwind readnone
8 declare i64 @llvm.bswap.i64(i64) nounwind readnone
10 define void @test1(ptr nocapture %x, i16 %y) nounwind {
11 ; CHECK-LABEL: test1:
12 ; CHECK:       # %bb.0:
13 ; CHECK-NEXT:    movbew %si, (%rdi)
14 ; CHECK-NEXT:    nop
15 ; CHECK-NEXT:    nop
16 ; CHECK-NEXT:    nop
17 ; CHECK-NEXT:    nop
18 ; CHECK-NEXT:    nop
19 ; CHECK-NEXT:    nop
20 ; CHECK-NEXT:    retq
22 ; SLM-LABEL: test1:
23 ; SLM:       # %bb.0:
24 ; SLM-NEXT:    movbew %si, (%rdi)
25 ; SLM-NEXT:    retq
27 ; EGPR-LABEL: test1:
28 ; EGPR:       # %bb.0:
29 ; EGPR-NEXT:    movbew %si, (%rdi) # EVEX TO LEGACY Compression encoding: [0x66,0x0f,0x38,0xf1,0x37]
30 ; EGPR-NEXT:    retq # encoding: [0xc3]
32 ; NOMOVBE-LABEL: test1:
33 ; NOMOVBE:       # %bb.0:
34 ; NOMOVBE-NEXT:    rolw $8, %si, %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0xc6,0x08]
35 ; NOMOVBE-NEXT:    movw %ax, (%rdi) # encoding: [0x66,0x89,0x07]
36 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
37   %bswap = call i16 @llvm.bswap.i16(i16 %y)
38   store i16 %bswap, ptr %x, align 2
39   ret void
42 define i16 @test2(ptr %x) nounwind {
43 ; CHECK-LABEL: test2:
44 ; CHECK:       # %bb.0:
45 ; CHECK-NEXT:    movbew (%rdi), %ax
46 ; CHECK-NEXT:    nop
47 ; CHECK-NEXT:    nop
48 ; CHECK-NEXT:    nop
49 ; CHECK-NEXT:    nop
50 ; CHECK-NEXT:    nop
51 ; CHECK-NEXT:    nop
52 ; CHECK-NEXT:    retq
54 ; SLM-LABEL: test2:
55 ; SLM:       # %bb.0:
56 ; SLM-NEXT:    movbew (%rdi), %ax
57 ; SLM-NEXT:    retq
59 ; EGPR-LABEL: test2:
60 ; EGPR:       # %bb.0:
61 ; EGPR-NEXT:    movbew (%rdi), %ax # EVEX TO LEGACY Compression encoding: [0x66,0x0f,0x38,0xf0,0x07]
62 ; EGPR-NEXT:    retq # encoding: [0xc3]
64 ; NOMOVBE-LABEL: test2:
65 ; NOMOVBE:       # %bb.0:
66 ; NOMOVBE-NEXT:    rolw $8, (%rdi), %ax # encoding: [0x62,0xf4,0x7d,0x18,0xc1,0x07,0x08]
67 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
68   %load = load i16, ptr %x, align 2
69   %bswap = call i16 @llvm.bswap.i16(i16 %load)
70   ret i16 %bswap
73 define void @test3(ptr nocapture %x, i32 %y) nounwind {
74 ; CHECK-LABEL: test3:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    movbel %esi, (%rdi)
77 ; CHECK-NEXT:    nop
78 ; CHECK-NEXT:    nop
79 ; CHECK-NEXT:    nop
80 ; CHECK-NEXT:    nop
81 ; CHECK-NEXT:    nop
82 ; CHECK-NEXT:    nop
83 ; CHECK-NEXT:    retq
85 ; SLM-LABEL: test3:
86 ; SLM:       # %bb.0:
87 ; SLM-NEXT:    movbel %esi, (%rdi)
88 ; SLM-NEXT:    retq
90 ; EGPR-LABEL: test3:
91 ; EGPR:       # %bb.0:
92 ; EGPR-NEXT:    movbel %esi, (%rdi) # EVEX TO LEGACY Compression encoding: [0x0f,0x38,0xf1,0x37]
93 ; EGPR-NEXT:    retq # encoding: [0xc3]
95 ; NOMOVBE-LABEL: test3:
96 ; NOMOVBE:       # %bb.0:
97 ; NOMOVBE-NEXT:    bswapl %esi # encoding: [0x0f,0xce]
98 ; NOMOVBE-NEXT:    movl %esi, (%rdi) # encoding: [0x89,0x37]
99 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
100   %bswap = call i32 @llvm.bswap.i32(i32 %y)
101   store i32 %bswap, ptr %x, align 4
102   ret void
105 define i32 @test4(ptr %x) nounwind {
106 ; CHECK-LABEL: test4:
107 ; CHECK:       # %bb.0:
108 ; CHECK-NEXT:    movbel (%rdi), %eax
109 ; CHECK-NEXT:    nop
110 ; CHECK-NEXT:    nop
111 ; CHECK-NEXT:    nop
112 ; CHECK-NEXT:    nop
113 ; CHECK-NEXT:    nop
114 ; CHECK-NEXT:    nop
115 ; CHECK-NEXT:    retq
117 ; SLM-LABEL: test4:
118 ; SLM:       # %bb.0:
119 ; SLM-NEXT:    movbel (%rdi), %eax
120 ; SLM-NEXT:    retq
122 ; EGPR-LABEL: test4:
123 ; EGPR:       # %bb.0:
124 ; EGPR-NEXT:    movbel (%rdi), %eax # EVEX TO LEGACY Compression encoding: [0x0f,0x38,0xf0,0x07]
125 ; EGPR-NEXT:    retq # encoding: [0xc3]
127 ; NOMOVBE-LABEL: test4:
128 ; NOMOVBE:       # %bb.0:
129 ; NOMOVBE-NEXT:    movl (%rdi), %eax # encoding: [0x8b,0x07]
130 ; NOMOVBE-NEXT:    bswapl %eax # encoding: [0x0f,0xc8]
131 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
132   %load = load i32, ptr %x, align 4
133   %bswap = call i32 @llvm.bswap.i32(i32 %load)
134   ret i32 %bswap
137 define void @test5(ptr %x, i64 %y) nounwind {
138 ; CHECK-LABEL: test5:
139 ; CHECK:       # %bb.0:
140 ; CHECK-NEXT:    movbeq %rsi, (%rdi)
141 ; CHECK-NEXT:    nop
142 ; CHECK-NEXT:    nop
143 ; CHECK-NEXT:    nop
144 ; CHECK-NEXT:    nop
145 ; CHECK-NEXT:    nop
146 ; CHECK-NEXT:    nop
147 ; CHECK-NEXT:    retq
149 ; SLM-LABEL: test5:
150 ; SLM:       # %bb.0:
151 ; SLM-NEXT:    movbeq %rsi, (%rdi)
152 ; SLM-NEXT:    retq
154 ; EGPR-LABEL: test5:
155 ; EGPR:       # %bb.0:
156 ; EGPR-NEXT:    movbeq %rsi, (%rdi) # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x38,0xf1,0x37]
157 ; EGPR-NEXT:    retq # encoding: [0xc3]
159 ; NOMOVBE-LABEL: test5:
160 ; NOMOVBE:       # %bb.0:
161 ; NOMOVBE-NEXT:    bswapq %rsi # encoding: [0x48,0x0f,0xce]
162 ; NOMOVBE-NEXT:    movq %rsi, (%rdi) # encoding: [0x48,0x89,0x37]
163 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
164   %bswap = call i64 @llvm.bswap.i64(i64 %y)
165   store i64 %bswap, ptr %x, align 8
166   ret void
169 define i64 @test6(ptr %x) nounwind {
170 ; CHECK-LABEL: test6:
171 ; CHECK:       # %bb.0:
172 ; CHECK-NEXT:    movbeq (%rdi), %rax
173 ; CHECK-NEXT:    nop
174 ; CHECK-NEXT:    nop
175 ; CHECK-NEXT:    nop
176 ; CHECK-NEXT:    nop
177 ; CHECK-NEXT:    nop
178 ; CHECK-NEXT:    nop
179 ; CHECK-NEXT:    retq
181 ; SLM-LABEL: test6:
182 ; SLM:       # %bb.0:
183 ; SLM-NEXT:    movbeq (%rdi), %rax
184 ; SLM-NEXT:    retq
186 ; EGPR-LABEL: test6:
187 ; EGPR:       # %bb.0:
188 ; EGPR-NEXT:    movbeq (%rdi), %rax # EVEX TO LEGACY Compression encoding: [0x48,0x0f,0x38,0xf0,0x07]
189 ; EGPR-NEXT:    retq # encoding: [0xc3]
191 ; NOMOVBE-LABEL: test6:
192 ; NOMOVBE:       # %bb.0:
193 ; NOMOVBE-NEXT:    movq (%rdi), %rax # encoding: [0x48,0x8b,0x07]
194 ; NOMOVBE-NEXT:    bswapq %rax # encoding: [0x48,0x0f,0xc8]
195 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
196   %load = load i64, ptr %x, align 8
197   %bswap = call i64 @llvm.bswap.i64(i64 %load)
198   ret i64 %bswap
201 define i64 @test7(i64 %x) nounwind {
202 ; CHECK-LABEL: test7:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    movq %rdi, %rax
205 ; CHECK-NEXT:    bswapq %rax
206 ; CHECK-NEXT:    nop
207 ; CHECK-NEXT:    nop
208 ; CHECK-NEXT:    nop
209 ; CHECK-NEXT:    nop
210 ; CHECK-NEXT:    retq
212 ; SLM-LABEL: test7:
213 ; SLM:       # %bb.0:
214 ; SLM-NEXT:    movq %rdi, %rax
215 ; SLM-NEXT:    bswapq %rax
216 ; SLM-NEXT:    retq
218 ; EGPR-LABEL: test7:
219 ; EGPR:       # %bb.0:
220 ; EGPR-NEXT:    movbeq %rdi, %rax # encoding: [0x62,0xf4,0xfc,0x08,0x61,0xf8]
221 ; EGPR-NEXT:    retq # encoding: [0xc3]
223 ; NOMOVBE-LABEL: test7:
224 ; NOMOVBE:       # %bb.0:
225 ; NOMOVBE-NEXT:    movq %rdi, %rax # encoding: [0x48,0x89,0xf8]
226 ; NOMOVBE-NEXT:    bswapq %rax # encoding: [0x48,0x0f,0xc8]
227 ; NOMOVBE-NEXT:    retq # encoding: [0xc3]
228   %bswap = call i64 @llvm.bswap.i64(i64 %x)
229   ret i64 %bswap