brintos

brintos / llvm-project-archived public Read only

0
0
Text · 13.8 KiB · 09e7161 Raw
446 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -mtriple=x86_64-unknown-unknown -S | FileCheck %s3 4declare i32 @llvm.x86.tbm.bextri.u32(i32, i32) nounwind readnone5declare i64 @llvm.x86.tbm.bextri.u64(i64, i64) nounwind readnone6declare i32 @llvm.x86.bmi.bextr.32(i32, i32) nounwind readnone7declare i64 @llvm.x86.bmi.bextr.64(i64, i64) nounwind readnone8declare i32 @llvm.x86.bmi.bzhi.32(i32, i32) nounwind readnone9declare i64 @llvm.x86.bmi.bzhi.64(i64, i64) nounwind readnone10declare i32 @llvm.x86.bmi.pext.32(i32, i32) nounwind readnone11declare i64 @llvm.x86.bmi.pext.64(i64, i64) nounwind readnone12declare i32 @llvm.x86.bmi.pdep.32(i32, i32) nounwind readnone13declare i64 @llvm.x86.bmi.pdep.64(i64, i64) nounwind readnone14 15define i32 @test_x86_tbm_bextri_u32(i32 %a) nounwind readnone {16; CHECK-LABEL: @test_x86_tbm_bextri_u32(17; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.tbm.bextri.u32(i32 [[A:%.*]], i32 1296)18; CHECK-NEXT:    ret i32 [[TMP1]]19;20  %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 1296)21  ret i32 %122}23 24define i32 @test_x86_tbm_bextri_u32_zero_length(i32 %a) nounwind readnone {25; CHECK-LABEL: @test_x86_tbm_bextri_u32_zero_length(26; CHECK-NEXT:    ret i32 027;28  %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 1)29  ret i32 %130}31 32define i32 @test_x86_tbm_bextri_u32_large_shift(i32 %a) nounwind readnone {33; CHECK-LABEL: @test_x86_tbm_bextri_u32_large_shift(34; CHECK-NEXT:    ret i32 035;36  %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 %a, i32 288)37  ret i32 %138}39 40define i64 @test_x86_tbm_bextri_u64(i64 %a) nounwind readnone {41; CHECK-LABEL: @test_x86_tbm_bextri_u64(42; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @llvm.x86.tbm.bextri.u64(i64 [[A:%.*]], i64 1312)43; CHECK-NEXT:    ret i64 [[TMP1]]44;45  %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i64 1312)46  ret i64 %147}48 49define i64 @test_x86_tbm_bextri_u64_zero_length(i64 %a) nounwind readnone {50; CHECK-LABEL: @test_x86_tbm_bextri_u64_zero_length(51; CHECK-NEXT:    ret i64 052;53  %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i64 1)54  ret i64 %155}56 57define i64 @test_x86_tbm_bextri_u64_large_shift(i64 %a) nounwind readnone {58; CHECK-LABEL: @test_x86_tbm_bextri_u64_large_shift(59; CHECK-NEXT:    ret i64 060;61  %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 %a, i64 320)62  ret i64 %163}64 65define i32 @test_x86_tbm_bextri_u32_constfold() nounwind readnone {66; CHECK-LABEL: @test_x86_tbm_bextri_u32_constfold(67; CHECK-NEXT:    ret i32 5700568;69  %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 3735928559, i32 4112) ; extract bits 31:16 from 0xDEADBEEF70  ret i32 %171}72 73define i32 @test_x86_tbm_bextri_u32_constfold2() nounwind readnone {74; CHECK-LABEL: @test_x86_tbm_bextri_u32_constfold2(75; CHECK-NEXT:    ret i32 23349553476;77  %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 3735928559, i32 8196) ; extract bits 35:4 from 0xDEADBEEF78  ret i32 %179}80 81define i32 @test_x86_tbm_bextri_u32_constfold3() nounwind readnone {82; CHECK-LABEL: @test_x86_tbm_bextri_u32_constfold3(83; CHECK-NEXT:    ret i32 23349553484;85  %1 = tail call i32 @llvm.x86.tbm.bextri.u32(i32 3735928559, i32 16388) ; extract bits 67:4 from 0xDEADBEEF86  ret i32 %187}88 89define i64 @test_x86_tbm_bextri_u64_constfold() nounwind readnone {90; CHECK-LABEL: @test_x86_tbm_bextri_u64_constfold(91; CHECK-NEXT:    ret i64 5700592;93  %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 3735928559, i64 4112) ; extract bits 31:16 from 0xDEADBEEF94  ret i64 %195}96 97define i64 @test_x86_tbm_bextri_u64_constfold2() nounwind readnone {98; CHECK-LABEL: @test_x86_tbm_bextri_u64_constfold2(99; CHECK-NEXT:    ret i64 233495534100;101  %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 3735928559, i64 16388) ; extract bits 67:4 from 0xDEADBEEF102  ret i64 %1103}104 105define i64 @test_x86_tbm_bextri_u64_constfold3() nounwind readnone {106; CHECK-LABEL: @test_x86_tbm_bextri_u64_constfold3(107; CHECK-NEXT:    ret i64 233495534108;109  %1 = tail call i64 @llvm.x86.tbm.bextri.u64(i64 3735928559, i64 32772) ; extract bits 131:4 from 0xDEADBEEF110  ret i64 %1111}112 113define i32 @test_x86_bmi_bextri_32(i32 %a) nounwind readnone {114; CHECK-LABEL: @test_x86_bmi_bextri_32(115; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.bmi.bextr.32(i32 [[A:%.*]], i32 1296)116; CHECK-NEXT:    ret i32 [[TMP1]]117;118  %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 %a, i32 1296)119  ret i32 %1120}121 122define i32 @test_x86_bmi_bextri_32_zero_length(i32 %a) nounwind readnone {123; CHECK-LABEL: @test_x86_bmi_bextri_32_zero_length(124; CHECK-NEXT:    ret i32 0125;126  %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 %a, i32 1)127  ret i32 %1128}129 130define i32 @test_x86_bmi_bextri_32_large_shift(i32 %a) nounwind readnone {131; CHECK-LABEL: @test_x86_bmi_bextri_32_large_shift(132; CHECK-NEXT:    ret i32 0133;134  %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 %a, i32 288)135  ret i32 %1136}137 138define i64 @test_x86_bmi_bextri_64(i64 %a) nounwind readnone {139; CHECK-LABEL: @test_x86_bmi_bextri_64(140; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @llvm.x86.bmi.bextr.64(i64 [[A:%.*]], i64 1312)141; CHECK-NEXT:    ret i64 [[TMP1]]142;143  %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 %a, i64 1312)144  ret i64 %1145}146 147define i64 @test_x86_bmi_bextri_64_zero_length(i64 %a) nounwind readnone {148; CHECK-LABEL: @test_x86_bmi_bextri_64_zero_length(149; CHECK-NEXT:    ret i64 0150;151  %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 %a, i64 1)152  ret i64 %1153}154 155define i64 @test_x86_bmi_bextri_64_large_shift(i64 %a) nounwind readnone {156; CHECK-LABEL: @test_x86_bmi_bextri_64_large_shift(157; CHECK-NEXT:    ret i64 0158;159  %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 %a, i64 320)160  ret i64 %1161}162 163define i32 @test_x86_bmi_bextri_32_constfold() nounwind readnone {164; CHECK-LABEL: @test_x86_bmi_bextri_32_constfold(165; CHECK-NEXT:    ret i32 57005166;167  %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 3735928559, i32 4112) ; extract bits 31:16 from 0xDEADBEEF168  ret i32 %1169}170 171define i32 @test_x86_bmi_bextri_32_constfold2() nounwind readnone {172; CHECK-LABEL: @test_x86_bmi_bextri_32_constfold2(173; CHECK-NEXT:    ret i32 233495534174;175  %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 3735928559, i32 8196) ; extract bits 35:4 from 0xDEADBEEF176  ret i32 %1177}178 179define i32 @test_x86_bmi_bextri_32_constfold3() nounwind readnone {180; CHECK-LABEL: @test_x86_bmi_bextri_32_constfold3(181; CHECK-NEXT:    ret i32 233495534182;183  %1 = tail call i32 @llvm.x86.bmi.bextr.32(i32 3735928559, i32 16388) ; extract bits 67:4 from 0xDEADBEEF184  ret i32 %1185}186 187define i64 @test_x86_bmi_bextri_64_constfold() nounwind readnone {188; CHECK-LABEL: @test_x86_bmi_bextri_64_constfold(189; CHECK-NEXT:    ret i64 57005190;191  %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 3735928559, i64 4112) ; extract bits 31:16 from 0xDEADBEEF192  ret i64 %1193}194 195define i64 @test_x86_bmi_bextri_64_constfold2() nounwind readnone {196; CHECK-LABEL: @test_x86_bmi_bextri_64_constfold2(197; CHECK-NEXT:    ret i64 233495534198;199  %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 3735928559, i64 16388) ; extract bits 67:4 from 0xDEADBEEF200  ret i64 %1201}202 203define i64 @test_x86_bmi_bextri_64_constfold3() nounwind readnone {204; CHECK-LABEL: @test_x86_bmi_bextri_64_constfold3(205; CHECK-NEXT:    ret i64 233495534206;207  %1 = tail call i64 @llvm.x86.bmi.bextr.64(i64 3735928559, i64 32772) ; extract bits 131:4 from 0xDEADBEEF208  ret i64 %1209}210 211define i32 @test_x86_bmi_bzhi_32(i32 %a) nounwind readnone {212; CHECK-LABEL: @test_x86_bmi_bzhi_32(213; CHECK-NEXT:    [[TMP1:%.*]] = tail call i32 @llvm.x86.bmi.bzhi.32(i32 [[A:%.*]], i32 31)214; CHECK-NEXT:    ret i32 [[TMP1]]215;216  %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a, i32 31)217  ret i32 %1218}219 220define i32 @test_x86_bmi_bzhi_32_zero(i32 %a) nounwind readnone {221; CHECK-LABEL: @test_x86_bmi_bzhi_32_zero(222; CHECK-NEXT:    ret i32 0223;224  %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a, i32 0)225  ret i32 %1226}227 228define i32 @test_x86_bmi_bzhi_32_max(i32 %a) nounwind readnone {229; CHECK-LABEL: @test_x86_bmi_bzhi_32_max(230; CHECK-NEXT:    ret i32 [[A:%.*]]231;232  %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 %a, i32 32)233  ret i32 %1234}235 236define i32 @test_x86_bmi_bzhi_32_constfold() nounwind readnone {237; CHECK-LABEL: @test_x86_bmi_bzhi_32_constfold(238; CHECK-NEXT:    ret i32 1239;240  %1 = tail call i32 @llvm.x86.bmi.bzhi.32(i32 5, i32 1)241  ret i32 %1242}243 244define i64 @test_x86_bmi_bzhi_64(i64 %a) nounwind readnone {245; CHECK-LABEL: @test_x86_bmi_bzhi_64(246; CHECK-NEXT:    [[TMP1:%.*]] = tail call i64 @llvm.x86.bmi.bzhi.64(i64 [[A:%.*]], i64 63)247; CHECK-NEXT:    ret i64 [[TMP1]]248;249  %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a, i64 63)250  ret i64 %1251}252 253define i64 @test_x86_bmi_bzhi_64_zero(i64 %a) nounwind readnone {254; CHECK-LABEL: @test_x86_bmi_bzhi_64_zero(255; CHECK-NEXT:    ret i64 0256;257  %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a, i64 0)258  ret i64 %1259}260 261define i64 @test_x86_bmi_bzhi_64_max(i64 %a) nounwind readnone {262; CHECK-LABEL: @test_x86_bmi_bzhi_64_max(263; CHECK-NEXT:    ret i64 [[A:%.*]]264;265  %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 %a, i64 64)266  ret i64 %1267}268 269define i64 @test_x86_bmi_bzhi_64_constfold() nounwind readnone {270; CHECK-LABEL: @test_x86_bmi_bzhi_64_constfold(271; CHECK-NEXT:    ret i64 1272;273  %1 = tail call i64 @llvm.x86.bmi.bzhi.64(i64 5, i64 1)274  ret i64 %1275}276 277define i32 @test_x86_pext_32_zero_mask(i32 %x) nounwind readnone {278; CHECK-LABEL: @test_x86_pext_32_zero_mask(279; CHECK-NEXT:    ret i32 0280;281  %1 = tail call i32 @llvm.x86.bmi.pext.32(i32 %x, i32 0)282  ret i32 %1283}284 285define i64 @test_x86_pext_64_zero_mask(i64 %x) nounwind readnone {286; CHECK-LABEL: @test_x86_pext_64_zero_mask(287; CHECK-NEXT:    ret i64 0288;289  %1 = tail call i64 @llvm.x86.bmi.pext.64(i64 %x, i64 0)290  ret i64 %1291}292 293define i32 @test_x86_pext_32_allones_mask(i32 %x) nounwind readnone {294; CHECK-LABEL: @test_x86_pext_32_allones_mask(295; CHECK-NEXT:    ret i32 %x296;297  %1 = tail call i32 @llvm.x86.bmi.pext.32(i32 %x, i32 -1)298  ret i32 %1299}300 301define i64 @test_x86_pext_64_allones_mask(i64 %x) nounwind readnone {302; CHECK-LABEL: @test_x86_pext_64_allones_mask(303; CHECK-NEXT:    ret i64 %x304;305  %1 = tail call i64 @llvm.x86.bmi.pext.64(i64 %x, i64 -1)306  ret i64 %1307}308 309define i32 @test_x86_pext_32_shifted_mask(i32 %x) nounwind readnone {310; CHECK-LABEL: @test_x86_pext_32_shifted_mask(311; CHECK-NEXT:    %1 = lshr i32 %x, 1312; CHECK-NEXT:    %2 = and i32 %1, 3313; CHECK-NEXT:    ret i32 %2314;315  %1 = tail call i32 @llvm.x86.bmi.pext.32(i32 %x, i32 6)316  ret i32 %1317}318 319define i64 @test_x86_pext_64_shifted_mask(i64 %x) nounwind readnone {320; CHECK-LABEL: @test_x86_pext_64_shifted_mask(321; CHECK-NEXT:    %1 = lshr i64 %x, 1322; CHECK-NEXT:    %2 = and i64 %1, 3323; CHECK-NEXT:    ret i64 %2324;325  %1 = tail call i64 @llvm.x86.bmi.pext.64(i64 %x, i64 6)326  ret i64 %1327}328 329 330define i32 @test_x86_pext_32_constant_fold() nounwind readnone {331; CHECK-LABEL: @test_x86_pext_32_constant_fold(332; CHECK-NEXT:    ret i32 30001333;334  %1 = tail call i32 @llvm.x86.bmi.pext.32(i32 1985229328, i32 4042322160)335  ret i32 %1336}337 338define i64 @test_x86_pext_64_constant_fold() nounwind readnone {339; CHECK-LABEL: @test_x86_pext_64_constant_fold(340; CHECK-NEXT:    ret i64 1966210489341;342  %1 = tail call i64 @llvm.x86.bmi.pext.64(i64 8526495043095935640, i64 -1085102592571150096)343  ret i64 %1344}345 346define i32 @test_x86_pext_32_constant_fold_2() nounwind readnone {347; CHECK-LABEL: @test_x86_pext_32_constant_fold_2(348; CHECK-NEXT:    ret i32 30224349;350  %1 = tail call i32 @llvm.x86.bmi.pext.32(i32 1985229328, i32 4278190335)351  ret i32 %1352}353 354define i64 @test_x86_pext_64_constant_fold_2() nounwind readnone {355; CHECK-LABEL: @test_x86_pext_64_constant_fold_2(356; CHECK-NEXT:    ret i64 1980816570357;358  %1 = tail call i64 @llvm.x86.bmi.pext.64(i64 8526495043095935640, i64 -72056498804490496)359  ret i64 %1360}361 362define i32 @test_x86_pdep_32_zero_mask(i32 %x) nounwind readnone {363; CHECK-LABEL: @test_x86_pdep_32_zero_mask(364; CHECK-NEXT:    ret i32 0365;366  %1 = tail call i32 @llvm.x86.bmi.pdep.32(i32 %x, i32 0)367  ret i32 %1368}369 370define i64 @test_x86_pdep_64_zero_mask(i64 %x) nounwind readnone {371; CHECK-LABEL: @test_x86_pdep_64_zero_mask(372; CHECK-NEXT:    ret i64 0373;374  %1 = tail call i64 @llvm.x86.bmi.pdep.64(i64 %x, i64 0)375  ret i64 %1376}377 378define i32 @test_x86_pdep_32_allones_mask(i32 %x) nounwind readnone {379; CHECK-LABEL: @test_x86_pdep_32_allones_mask(380; CHECK-NEXT:    ret i32 %x381;382  %1 = tail call i32 @llvm.x86.bmi.pdep.32(i32 %x, i32 -1)383  ret i32 %1384}385 386define i64 @test_x86_pdep_64_allones_mask(i64 %x) nounwind readnone {387; CHECK-LABEL: @test_x86_pdep_64_allones_mask(388; CHECK-NEXT:    ret i64 %x389;390  %1 = tail call i64 @llvm.x86.bmi.pdep.64(i64 %x, i64 -1)391  ret i64 %1392}393 394define i32 @test_x86_pdep_32_shifted_mask(i32 %x) nounwind readnone {395; CHECK-LABEL: @test_x86_pdep_32_shifted_mask(396; CHECK-NEXT:    %1 = shl i32 %x, 2397; CHECK-NEXT:    %2 = and i32 %1, 12398; CHECK-NEXT:    ret i32 %2399;400  %1 = tail call i32 @llvm.x86.bmi.pdep.32(i32 %x, i32 12)401  ret i32 %1402}403 404define i64 @test_x86_pdep_64_shifted_mask(i64 %x) nounwind readnone {405; CHECK-LABEL: @test_x86_pdep_64_shifted_mask(406; CHECK-NEXT:    %1 = shl i64 %x, 2407; CHECK-NEXT:    %2 = and i64 %1, 12408; CHECK-NEXT:    ret i64 %2409;410  %1 = tail call i64 @llvm.x86.bmi.pdep.64(i64 %x, i64 12)411  ret i64 %1412}413 414 415define i32 @test_x86_pdep_32_constant_fold() nounwind readnone {416; CHECK-LABEL: @test_x86_pdep_32_constant_fold(417; CHECK-NEXT:    ret i32 807407616418;419  %1 = tail call i32 @llvm.x86.bmi.pdep.32(i32 1985229328, i32 4042322160)420  ret i32 %1421}422 423define i64 @test_x86_pdep_64_constant_fold() nounwind readnone {424; CHECK-LABEL: @test_x86_pdep_64_constant_fold(425; CHECK-NEXT:    ret i64 -1089641583808049024426;427  %1 = tail call i64 @llvm.x86.bmi.pdep.64(i64 8526495043095935640, i64 -1085102592571150096)428  ret i64 %1429}430 431define i32 @test_x86_pdep_32_constant_fold_2() nounwind readnone {432; CHECK-LABEL: @test_x86_pdep_32_constant_fold_2(433; CHECK-NEXT:    ret i32 838860816434;435  %1 = tail call i32 @llvm.x86.bmi.pdep.32(i32 1985229328, i32 4278190335)436  ret i32 %1437}438 439define i64 @test_x86_pdep_64_constant_fold_2() nounwind readnone {440; CHECK-LABEL: @test_x86_pdep_64_constant_fold_2(441; CHECK-NEXT:    ret i64 -144114243170822144442;443  %1 = tail call i64 @llvm.x86.bmi.pdep.64(i64 8526495043095935640, i64 -72056498804490496)444  ret i64 %1445}446