[InstCombine] Remove insertRangeTest code that handles the equality case.
[llvm-complete.git] / test / Transforms / InstCombine / X86 / x86-bmi-tbm.ll
blob2b472cad2da2763c785200cfde56664a2b7df693
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -instcombine -S | FileCheck %s
4 declare i32 @llvm.x86.tbm.bextri.u32(i32, i32) nounwind readnone
5 declare i64 @llvm.x86.tbm.bextri.u64(i64, i64) nounwind readnone
6 declare i32 @llvm.x86.bmi.bextr.32(i32, i32) nounwind readnone
7 declare i64 @llvm.x86.bmi.bextr.64(i64, i64) nounwind readnone
8 declare i32 @llvm.x86.bmi.bzhi.32(i32, i32) nounwind readnone
9 declare i64 @llvm.x86.bmi.bzhi.64(i64, i64) nounwind readnone
11 define i32 @test_x86_tbm_bextri_u32(i32 %a) nounwind readnone {
12 ; CHECK-LABEL: @test_x86_tbm_bextri_u32(
13 ; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.tbm.bextri.u32(i32 [[A:%.*]], i32 1296)
14 ; CHECK-NEXT:    ret i32 [[TMP1]]
16   %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 1296)
17   ret i32 %1
20 define i32 @test_x86_tbm_bextri_u32_zero_length(i32 %a) nounwind readnone {
21 ; CHECK-LABEL: @test_x86_tbm_bextri_u32_zero_length(
22 ; CHECK-NEXT:    ret i32 0
24   %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 1)
25   ret i32 %1
28 define i32 @test_x86_tbm_bextri_u32_large_shift(i32 %a) nounwind readnone {
29 ; CHECK-LABEL: @test_x86_tbm_bextri_u32_large_shift(
30 ; CHECK-NEXT:    ret i32 0
32   %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 288)
33   ret i32 %1
36 define i64 @test_x86_tbm_bextri_u64(i64 %a) nounwind readnone {
37 ; CHECK-LABEL: @test_x86_tbm_bextri_u64(
38 ; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @llvm.x86.tbm.bextri.u64(i64 [[A:%.*]], i64 1312)
39 ; CHECK-NEXT:    ret i64 [[TMP1]]
41   %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i64 1312)
42   ret i64 %1
45 define i64 @test_x86_tbm_bextri_u64_zero_length(i64 %a) nounwind readnone {
46 ; CHECK-LABEL: @test_x86_tbm_bextri_u64_zero_length(
47 ; CHECK-NEXT:    ret i64 0
49   %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i64 1)
50   ret i64 %1
53 define i64 @test_x86_tbm_bextri_u64_large_shift(i64 %a) nounwind readnone {
54 ; CHECK-LABEL: @test_x86_tbm_bextri_u64_large_shift(
55 ; CHECK-NEXT:    ret i64 0
57   %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i64 320)
58   ret i64 %1
61 define i32 @test_x86_tbm_bextri_u32_constfold() nounwind readnone {
62 ; CHECK-LABEL: @test_x86_tbm_bextri_u32_constfold(
63 ; CHECK-NEXT:    ret i32 57005
65   %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 3735928559, i32 4112) ; extract bits 31:16 from 0xDEADBEEF
66   ret i32 %1
69 define i32 @test_x86_tbm_bextri_u32_constfold2() nounwind readnone {
70 ; CHECK-LABEL: @test_x86_tbm_bextri_u32_constfold2(
71 ; CHECK-NEXT:    ret i32 233495534
73   %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 3735928559, i32 8196) ; extract bits 35:4 from 0xDEADBEEF
74   ret i32 %1
77 define i32 @test_x86_tbm_bextri_u32_constfold3() nounwind readnone {
78 ; CHECK-LABEL: @test_x86_tbm_bextri_u32_constfold3(
79 ; CHECK-NEXT:    ret i32 233495534
81   %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 3735928559, i32 16388) ; extract bits 67:4 from 0xDEADBEEF
82   ret i32 %1
85 define i64 @test_x86_tbm_bextri_u64_constfold() nounwind readnone {
86 ; CHECK-LABEL: @test_x86_tbm_bextri_u64_constfold(
87 ; CHECK-NEXT:    ret i64 57005
89   %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 3735928559, i64 4112) ; extract bits 31:16 from 0xDEADBEEF
90   ret i64 %1
93 define i64 @test_x86_tbm_bextri_u64_constfold2() nounwind readnone {
94 ; CHECK-LABEL: @test_x86_tbm_bextri_u64_constfold2(
95 ; CHECK-NEXT:    ret i64 233495534
97   %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 3735928559, i64 16388) ; extract bits 67:4 from 0xDEADBEEF
98   ret i64 %1
101 define i64 @test_x86_tbm_bextri_u64_constfold3() nounwind readnone {
102 ; CHECK-LABEL: @test_x86_tbm_bextri_u64_constfold3(
103 ; CHECK-NEXT:    ret i64 233495534
105   %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 3735928559, i64 32772) ; extract bits 131:4 from 0xDEADBEEF
106   ret i64 %1
109 define i32 @test_x86_bmi_bextri_32(i32 %a) nounwind readnone {
110 ; CHECK-LABEL: @test_x86_bmi_bextri_32(
111 ; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.bmi.bextr.32(i32 [[A:%.*]], i32 1296)
112 ; CHECK-NEXT:    ret i32 [[TMP1]]
114   %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 %a, i32 1296)
115   ret i32 %1
118 define i32 @test_x86_bmi_bextri_32_zero_length(i32 %a) nounwind readnone {
119 ; CHECK-LABEL: @test_x86_bmi_bextri_32_zero_length(
120 ; CHECK-NEXT:    ret i32 0
122   %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 %a, i32 1)
123   ret i32 %1
126 define i32 @test_x86_bmi_bextri_32_large_shift(i32 %a) nounwind readnone {
127 ; CHECK-LABEL: @test_x86_bmi_bextri_32_large_shift(
128 ; CHECK-NEXT:    ret i32 0
130   %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 %a, i32 288)
131   ret i32 %1
134 define i64 @test_x86_bmi_bextri_64(i64 %a) nounwind readnone {
135 ; CHECK-LABEL: @test_x86_bmi_bextri_64(
136 ; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @llvm.x86.bmi.bextr.64(i64 [[A:%.*]], i64 1312)
137 ; CHECK-NEXT:    ret i64 [[TMP1]]
139   %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 %a, i64 1312)
140   ret i64 %1
143 define i64 @test_x86_bmi_bextri_64_zero_length(i64 %a) nounwind readnone {
144 ; CHECK-LABEL: @test_x86_bmi_bextri_64_zero_length(
145 ; CHECK-NEXT:    ret i64 0
147   %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 %a, i64 1)
148   ret i64 %1
151 define i64 @test_x86_bmi_bextri_64_large_shift(i64 %a) nounwind readnone {
152 ; CHECK-LABEL: @test_x86_bmi_bextri_64_large_shift(
153 ; CHECK-NEXT:    ret i64 0
155   %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 %a, i64 320)
156   ret i64 %1
159 define i32 @test_x86_bmi_bextri_32_constfold() nounwind readnone {
160 ; CHECK-LABEL: @test_x86_bmi_bextri_32_constfold(
161 ; CHECK-NEXT:    ret i32 57005
163   %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 3735928559, i32 4112) ; extract bits 31:16 from 0xDEADBEEF
164   ret i32 %1
167 define i32 @test_x86_bmi_bextri_32_constfold2() nounwind readnone {
168 ; CHECK-LABEL: @test_x86_bmi_bextri_32_constfold2(
169 ; CHECK-NEXT:    ret i32 233495534
171   %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 3735928559, i32 8196) ; extract bits 35:4 from 0xDEADBEEF
172   ret i32 %1
175 define i32 @test_x86_bmi_bextri_32_constfold3() nounwind readnone {
176 ; CHECK-LABEL: @test_x86_bmi_bextri_32_constfold3(
177 ; CHECK-NEXT:    ret i32 233495534
179   %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 3735928559, i32 16388) ; extract bits 67:4 from 0xDEADBEEF
180   ret i32 %1
183 define i64 @test_x86_bmi_bextri_64_constfold() nounwind readnone {
184 ; CHECK-LABEL: @test_x86_bmi_bextri_64_constfold(
185 ; CHECK-NEXT:    ret i64 57005
187   %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 3735928559, i64 4112) ; extract bits 31:16 from 0xDEADBEEF
188   ret i64 %1
191 define i64 @test_x86_bmi_bextri_64_constfold2() nounwind readnone {
192 ; CHECK-LABEL: @test_x86_bmi_bextri_64_constfold2(
193 ; CHECK-NEXT:    ret i64 233495534
195   %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 3735928559, i64 16388) ; extract bits 67:4 from 0xDEADBEEF
196   ret i64 %1
199 define i64 @test_x86_bmi_bextri_64_constfold3() nounwind readnone {
200 ; CHECK-LABEL: @test_x86_bmi_bextri_64_constfold3(
201 ; CHECK-NEXT:    ret i64 233495534
203   %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 3735928559, i64 32772) ; extract bits 131:4 from 0xDEADBEEF
204   ret i64 %1
207 define i32 @test_x86_bmi_bzhi_32(i32 %a) nounwind readnone {
208 ; CHECK-LABEL: @test_x86_bmi_bzhi_32(
209 ; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.bmi.bzhi.32(i32 [[A:%.*]], i32 31)
210 ; CHECK-NEXT:    ret i32 [[TMP1]]
212   %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a, i32 31)
213   ret i32 %1
216 define i32 @test_x86_bmi_bzhi_32_zero(i32 %a) nounwind readnone {
217 ; CHECK-LABEL: @test_x86_bmi_bzhi_32_zero(
218 ; CHECK-NEXT:    ret i32 0
220   %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a, i32 0)
221   ret i32 %1
224 define i32 @test_x86_bmi_bzhi_32_max(i32 %a) nounwind readnone {
225 ; CHECK-LABEL: @test_x86_bmi_bzhi_32_max(
226 ; CHECK-NEXT:    ret i32 [[A:%.*]]
228   %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a, i32 32)
229   ret i32 %1
232 define i32 @test_x86_bmi_bzhi_32_constfold() nounwind readnone {
233 ; CHECK-LABEL: @test_x86_bmi_bzhi_32_constfold(
234 ; CHECK-NEXT:    ret i32 1
236   %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 5, i32 1)
237   ret i32 %1
240 define i64 @test_x86_bmi_bzhi_64(i64 %a) nounwind readnone {
241 ; CHECK-LABEL: @test_x86_bmi_bzhi_64(
242 ; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @llvm.x86.bmi.bzhi.64(i64 [[A:%.*]], i64 63)
243 ; CHECK-NEXT:    ret i64 [[TMP1]]
245   %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a, i64 63)
246   ret i64 %1
249 define i64 @test_x86_bmi_bzhi_64_zero(i64 %a) nounwind readnone {
250 ; CHECK-LABEL: @test_x86_bmi_bzhi_64_zero(
251 ; CHECK-NEXT:    ret i64 0
253   %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a, i64 0)
254   ret i64 %1
257 define i64 @test_x86_bmi_bzhi_64_max(i64 %a) nounwind readnone {
258 ; CHECK-LABEL: @test_x86_bmi_bzhi_64_max(
259 ; CHECK-NEXT:    ret i64 [[A:%.*]]
261   %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a, i64 64)
262   ret i64 %1
265 define i64 @test_x86_bmi_bzhi_64_constfold() nounwind readnone {
266 ; CHECK-LABEL: @test_x86_bmi_bzhi_64_constfold(
267 ; CHECK-NEXT:    ret i64 1
269   %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 5, i64 1)
270   ret i64 %1