brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.0 KiB · e9bb611 Raw
251 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; Test the doubleword comparison expansions on Power73;4; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu \5; RUN:   -mcpu=pwr7 < %s | FileCheck %s6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu \7; RUN:   -mcpu=pwr7 < %s | FileCheck %s --check-prefix=CHECK-BE8 9define <2 x i64> @v2si64_cmp(<2 x i64> %x, <2 x i64> %y) nounwind readnone {10; CHECK-LABEL: v2si64_cmp:11; CHECK:       # %bb.0:12; CHECK-NEXT:    addis 3, 2, .LCPI0_0@toc@ha13; CHECK-NEXT:    vcmpequw 2, 2, 314; CHECK-NEXT:    addi 3, 3, .LCPI0_0@toc@l15; CHECK-NEXT:    lxvd2x 0, 0, 316; CHECK-NEXT:    xxswapd 36, 017; CHECK-NEXT:    vperm 3, 2, 2, 418; CHECK-NEXT:    xxland 34, 35, 3419; CHECK-NEXT:    blr20;21; CHECK-BE-LABEL: v2si64_cmp:22; CHECK-BE:       # %bb.0:23; CHECK-BE-NEXT:    addis 3, 2, .LCPI0_0@toc@ha24; CHECK-BE-NEXT:    vcmpequw 2, 2, 325; CHECK-BE-NEXT:    addi 3, 3, .LCPI0_0@toc@l26; CHECK-BE-NEXT:    lxvw4x 35, 0, 327; CHECK-BE-NEXT:    vperm 3, 2, 2, 328; CHECK-BE-NEXT:    xxland 34, 35, 3429; CHECK-BE-NEXT:    blr30  %cmp = icmp eq <2 x i64> %x, %y31  %result = sext <2 x i1> %cmp to <2 x i64>32  ret <2 x i64> %result33}34 35; Greater than signed36define <2 x i64> @v2si64_cmp_gt(<2 x i64> %x, <2 x i64> %y) nounwind readnone {37; CHECK-LABEL: v2si64_cmp_gt:38; CHECK:       # %bb.0:39; CHECK-NEXT:    xxswapd 0, 3540; CHECK-NEXT:    addi 3, 1, -3241; CHECK-NEXT:    xxswapd 1, 3442; CHECK-NEXT:    stxvd2x 0, 0, 343; CHECK-NEXT:    addi 3, 1, -4844; CHECK-NEXT:    stxvd2x 1, 0, 345; CHECK-NEXT:    ld 3, -24(1)46; CHECK-NEXT:    ld 4, -40(1)47; CHECK-NEXT:    ld 6, -48(1)48; CHECK-NEXT:    cmpd 4, 349; CHECK-NEXT:    li 3, 050; CHECK-NEXT:    li 4, -151; CHECK-NEXT:    iselgt 5, 4, 352; CHECK-NEXT:    std 5, -8(1)53; CHECK-NEXT:    ld 5, -32(1)54; CHECK-NEXT:    cmpd 6, 555; CHECK-NEXT:    iselgt 3, 4, 356; CHECK-NEXT:    std 3, -16(1)57; CHECK-NEXT:    addi 3, 1, -1658; CHECK-NEXT:    lxvd2x 0, 0, 359; CHECK-NEXT:    xxswapd 34, 060; CHECK-NEXT:    blr61;62; CHECK-BE-LABEL: v2si64_cmp_gt:63; CHECK-BE:       # %bb.0:64; CHECK-BE-NEXT:    addi 3, 1, -3265; CHECK-BE-NEXT:    stxvd2x 35, 0, 366; CHECK-BE-NEXT:    addi 3, 1, -4867; CHECK-BE-NEXT:    stxvd2x 34, 0, 368; CHECK-BE-NEXT:    ld 3, -24(1)69; CHECK-BE-NEXT:    ld 4, -40(1)70; CHECK-BE-NEXT:    ld 6, -48(1)71; CHECK-BE-NEXT:    cmpd 4, 372; CHECK-BE-NEXT:    li 3, 073; CHECK-BE-NEXT:    li 4, -174; CHECK-BE-NEXT:    iselgt 5, 4, 375; CHECK-BE-NEXT:    std 5, -8(1)76; CHECK-BE-NEXT:    ld 5, -32(1)77; CHECK-BE-NEXT:    cmpd 6, 578; CHECK-BE-NEXT:    iselgt 3, 4, 379; CHECK-BE-NEXT:    std 3, -16(1)80; CHECK-BE-NEXT:    addi 3, 1, -1681; CHECK-BE-NEXT:    lxvd2x 34, 0, 382; CHECK-BE-NEXT:    blr83  %cmp = icmp sgt <2 x i64> %x, %y84  %result = sext <2 x i1> %cmp to <2 x i64>85  ret <2 x i64> %result86}87 88; Greater than unsigned89define <2 x i64> @v2ui64_cmp_gt(<2 x i64> %x, <2 x i64> %y) nounwind readnone {90; CHECK-LABEL: v2ui64_cmp_gt:91; CHECK:       # %bb.0:92; CHECK-NEXT:    xxswapd 0, 3593; CHECK-NEXT:    addi 3, 1, -3294; CHECK-NEXT:    xxswapd 1, 3495; CHECK-NEXT:    stxvd2x 0, 0, 396; CHECK-NEXT:    addi 3, 1, -4897; CHECK-NEXT:    stxvd2x 1, 0, 398; CHECK-NEXT:    ld 3, -24(1)99; CHECK-NEXT:    ld 4, -40(1)100; CHECK-NEXT:    ld 6, -48(1)101; CHECK-NEXT:    cmpld 4, 3102; CHECK-NEXT:    li 3, 0103; CHECK-NEXT:    li 4, -1104; CHECK-NEXT:    iselgt 5, 4, 3105; CHECK-NEXT:    std 5, -8(1)106; CHECK-NEXT:    ld 5, -32(1)107; CHECK-NEXT:    cmpld 6, 5108; CHECK-NEXT:    iselgt 3, 4, 3109; CHECK-NEXT:    std 3, -16(1)110; CHECK-NEXT:    addi 3, 1, -16111; CHECK-NEXT:    lxvd2x 0, 0, 3112; CHECK-NEXT:    xxswapd 34, 0113; CHECK-NEXT:    blr114;115; CHECK-BE-LABEL: v2ui64_cmp_gt:116; CHECK-BE:       # %bb.0:117; CHECK-BE-NEXT:    addi 3, 1, -32118; CHECK-BE-NEXT:    stxvd2x 35, 0, 3119; CHECK-BE-NEXT:    addi 3, 1, -48120; CHECK-BE-NEXT:    stxvd2x 34, 0, 3121; CHECK-BE-NEXT:    ld 3, -24(1)122; CHECK-BE-NEXT:    ld 4, -40(1)123; CHECK-BE-NEXT:    ld 6, -48(1)124; CHECK-BE-NEXT:    cmpld 4, 3125; CHECK-BE-NEXT:    li 3, 0126; CHECK-BE-NEXT:    li 4, -1127; CHECK-BE-NEXT:    iselgt 5, 4, 3128; CHECK-BE-NEXT:    std 5, -8(1)129; CHECK-BE-NEXT:    ld 5, -32(1)130; CHECK-BE-NEXT:    cmpld 6, 5131; CHECK-BE-NEXT:    iselgt 3, 4, 3132; CHECK-BE-NEXT:    std 3, -16(1)133; CHECK-BE-NEXT:    addi 3, 1, -16134; CHECK-BE-NEXT:    lxvd2x 34, 0, 3135; CHECK-BE-NEXT:    blr136  %cmp = icmp ugt <2 x i64> %x, %y137  %result = sext <2 x i1> %cmp to <2 x i64>138  ret <2 x i64> %result139}140 141; Check the intrinsics also142declare i32 @llvm.ppc.altivec.vcmpequd.p(i32, <2 x i64>, <2 x i64>) nounwind readnone143declare i32 @llvm.ppc.altivec.vcmpgtsd.p(i32, <2 x i64>, <2 x i64>) nounwind readnone144declare i32 @llvm.ppc.altivec.vcmpgtud.p(i32, <2 x i64>, <2 x i64>) nounwind readnone145 146define i32 @test_vcmpequd_p(<2 x i64> %x, <2 x i64> %y) {147; CHECK-LABEL: test_vcmpequd_p:148; CHECK:       # %bb.0:149; CHECK-NEXT:    vcmpequw 2, 2, 3150; CHECK-NEXT:    xxlxor 35, 35, 35151; CHECK-NEXT:    xxsldwi 0, 34, 34, 1152; CHECK-NEXT:    xxland 0, 0, 34153; CHECK-NEXT:    xxspltw 1, 0, 2154; CHECK-NEXT:    xxspltw 0, 0, 0155; CHECK-NEXT:    xxmrghd 34, 0, 1156; CHECK-NEXT:    vcmpgtub. 2, 2, 3157; CHECK-NEXT:    mfocrf 3, 2158; CHECK-NEXT:    rlwinm 3, 3, 25, 31, 31159; CHECK-NEXT:    blr160;161; CHECK-BE-LABEL: test_vcmpequd_p:162; CHECK-BE:       # %bb.0:163; CHECK-BE-NEXT:    vcmpequw 2, 2, 3164; CHECK-BE-NEXT:    xxlxor 35, 35, 35165; CHECK-BE-NEXT:    xxsldwi 0, 34, 34, 1166; CHECK-BE-NEXT:    xxland 0, 0, 34167; CHECK-BE-NEXT:    xxspltw 1, 0, 2168; CHECK-BE-NEXT:    xxspltw 0, 0, 0169; CHECK-BE-NEXT:    xxmrghd 34, 0, 1170; CHECK-BE-NEXT:    vcmpgtub. 2, 2, 3171; CHECK-BE-NEXT:    mfocrf 3, 2172; CHECK-BE-NEXT:    rlwinm 3, 3, 25, 31, 31173; CHECK-BE-NEXT:    blr174  %tmp = tail call i32 @llvm.ppc.altivec.vcmpequd.p(i32 2, <2 x i64> %x, <2 x i64> %y)175  ret i32 %tmp176}177 178define i32 @test_vcmpgtsd_p(<2 x i64> %x, <2 x i64> %y) {179; CHECK-LABEL: test_vcmpgtsd_p:180; CHECK:       # %bb.0:181; CHECK-NEXT:    vcmpgtuw 4, 2, 3182; CHECK-NEXT:    xxsldwi 0, 36, 36, 1183; CHECK-NEXT:    vcmpequw 4, 2, 3184; CHECK-NEXT:    vcmpgtsw 2, 2, 3185; CHECK-NEXT:    xxlxor 35, 35, 35186; CHECK-NEXT:    xxland 0, 0, 36187; CHECK-NEXT:    xxlor 0, 34, 0188; CHECK-NEXT:    xxspltw 1, 0, 2189; CHECK-NEXT:    xxspltw 0, 0, 0190; CHECK-NEXT:    xxmrghd 34, 0, 1191; CHECK-NEXT:    vcmpgtub. 2, 2, 3192; CHECK-NEXT:    mfocrf 3, 2193; CHECK-NEXT:    rlwinm 3, 3, 25, 31, 31194; CHECK-NEXT:    blr195;196; CHECK-BE-LABEL: test_vcmpgtsd_p:197; CHECK-BE:       # %bb.0:198; CHECK-BE-NEXT:    vcmpgtuw 4, 2, 3199; CHECK-BE-NEXT:    xxsldwi 0, 36, 36, 1200; CHECK-BE-NEXT:    vcmpequw 4, 2, 3201; CHECK-BE-NEXT:    vcmpgtsw 2, 2, 3202; CHECK-BE-NEXT:    xxlxor 35, 35, 35203; CHECK-BE-NEXT:    xxland 0, 0, 36204; CHECK-BE-NEXT:    xxlor 0, 34, 0205; CHECK-BE-NEXT:    xxspltw 1, 0, 2206; CHECK-BE-NEXT:    xxspltw 0, 0, 0207; CHECK-BE-NEXT:    xxmrghd 34, 0, 1208; CHECK-BE-NEXT:    vcmpgtub. 2, 2, 3209; CHECK-BE-NEXT:    mfocrf 3, 2210; CHECK-BE-NEXT:    rlwinm 3, 3, 25, 31, 31211; CHECK-BE-NEXT:    blr212  %tmp = tail call i32 @llvm.ppc.altivec.vcmpgtsd.p(i32 2, <2 x i64> %x, <2 x i64> %y)213  ret i32 %tmp214}215 216define i32 @test_vcmpgtud_p(<2 x i64> %x, <2 x i64> %y) {217; CHECK-LABEL: test_vcmpgtud_p:218; CHECK:       # %bb.0:219; CHECK-NEXT:    vcmpgtuw 4, 2, 3220; CHECK-NEXT:    vcmpequw 2, 2, 3221; CHECK-NEXT:    xxlxor 35, 35, 35222; CHECK-NEXT:    xxsldwi 0, 36, 36, 1223; CHECK-NEXT:    xxland 0, 0, 34224; CHECK-NEXT:    xxlor 0, 36, 0225; CHECK-NEXT:    xxspltw 1, 0, 2226; CHECK-NEXT:    xxspltw 0, 0, 0227; CHECK-NEXT:    xxmrghd 34, 0, 1228; CHECK-NEXT:    vcmpgtub. 2, 2, 3229; CHECK-NEXT:    mfocrf 3, 2230; CHECK-NEXT:    rlwinm 3, 3, 25, 31, 31231; CHECK-NEXT:    blr232;233; CHECK-BE-LABEL: test_vcmpgtud_p:234; CHECK-BE:       # %bb.0:235; CHECK-BE-NEXT:    vcmpgtuw 4, 2, 3236; CHECK-BE-NEXT:    vcmpequw 2, 2, 3237; CHECK-BE-NEXT:    xxlxor 35, 35, 35238; CHECK-BE-NEXT:    xxsldwi 0, 36, 36, 1239; CHECK-BE-NEXT:    xxland 0, 0, 34240; CHECK-BE-NEXT:    xxlor 0, 36, 0241; CHECK-BE-NEXT:    xxspltw 1, 0, 2242; CHECK-BE-NEXT:    xxspltw 0, 0, 0243; CHECK-BE-NEXT:    xxmrghd 34, 0, 1244; CHECK-BE-NEXT:    vcmpgtub. 2, 2, 3245; CHECK-BE-NEXT:    mfocrf 3, 2246; CHECK-BE-NEXT:    rlwinm 3, 3, 25, 31, 31247; CHECK-BE-NEXT:    blr248  %tmp = tail call i32 @llvm.ppc.altivec.vcmpgtud.p(i32 2, <2 x i64> %x, <2 x i64> %y)249  ret i32 %tmp250}251