brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.2 KiB · 528b3c9 Raw
352 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=sparc | FileCheck %s -check-prefix=SPARC3; RUN: llc < %s -mtriple=sparc -mattr=popc | FileCheck %s -check-prefix=SPARC-POPC4; RUN: llc < %s -mtriple=sparc -mattr=vis3 | FileCheck %s -check-prefix=SPARC-VIS35; RUN: llc < %s -mtriple=sparcv9 | FileCheck %s -check-prefix=SPARC646; RUN: llc < %s -mtriple=sparcv9 -mattr=popc | FileCheck %s -check-prefix=SPARC64-POPC7; RUN: llc < %s -mtriple=sparcv9 -mattr=vis3 | FileCheck %s -check-prefix=SPARC64-VIS38 9define i32 @i32_nopoison(i32 %x) nounwind {10; SPARC-LABEL: i32_nopoison:11; SPARC:       ! %bb.0:12; SPARC-NEXT:    save %sp, -96, %sp13; SPARC-NEXT:    cmp %i0, 014; SPARC-NEXT:    be .LBB0_215; SPARC-NEXT:    nop16; SPARC-NEXT:  ! %bb.1: ! %cond.false17; SPARC-NEXT:    call __clzsi218; SPARC-NEXT:    mov %i0, %o019; SPARC-NEXT:    ret20; SPARC-NEXT:    restore %g0, %o0, %o021; SPARC-NEXT:  .LBB0_2:22; SPARC-NEXT:    ret23; SPARC-NEXT:    restore %g0, 32, %o024;25; SPARC-POPC-LABEL: i32_nopoison:26; SPARC-POPC:       ! %bb.0:27; SPARC-POPC-NEXT:    save %sp, -96, %sp28; SPARC-POPC-NEXT:    cmp %i0, 029; SPARC-POPC-NEXT:    be .LBB0_230; SPARC-POPC-NEXT:    nop31; SPARC-POPC-NEXT:  ! %bb.1: ! %cond.false32; SPARC-POPC-NEXT:    call __clzsi233; SPARC-POPC-NEXT:    mov %i0, %o034; SPARC-POPC-NEXT:    ret35; SPARC-POPC-NEXT:    restore %g0, %o0, %o036; SPARC-POPC-NEXT:  .LBB0_2:37; SPARC-POPC-NEXT:    ret38; SPARC-POPC-NEXT:    restore %g0, 32, %o039;40; SPARC-VIS3-LABEL: i32_nopoison:41; SPARC-VIS3:       ! %bb.0:42; SPARC-VIS3-NEXT:    srl %o0, 0, %o043; SPARC-VIS3-NEXT:    lzcnt %o0, %o044; SPARC-VIS3-NEXT:    retl45; SPARC-VIS3-NEXT:    add %o0, -32, %o046;47; SPARC64-LABEL: i32_nopoison:48; SPARC64:       ! %bb.0:49; SPARC64-NEXT:    save %sp, -176, %sp50; SPARC64-NEXT:    cmp %i0, 051; SPARC64-NEXT:    be %icc, .LBB0_252; SPARC64-NEXT:    nop53; SPARC64-NEXT:  ! %bb.1: ! %cond.false54; SPARC64-NEXT:    call __clzdi255; SPARC64-NEXT:    sllx %i0, 32, %o056; SPARC64-NEXT:    ret57; SPARC64-NEXT:    restore %g0, %o0, %o058; SPARC64-NEXT:  .LBB0_2:59; SPARC64-NEXT:    ret60; SPARC64-NEXT:    restore %g0, 32, %o061;62; SPARC64-POPC-LABEL: i32_nopoison:63; SPARC64-POPC:       ! %bb.0:64; SPARC64-POPC-NEXT:    cmp %o0, 065; SPARC64-POPC-NEXT:    be %icc, .LBB0_266; SPARC64-POPC-NEXT:    nop67; SPARC64-POPC-NEXT:  ! %bb.1: ! %cond.false68; SPARC64-POPC-NEXT:    srl %o0, 1, %o169; SPARC64-POPC-NEXT:    or %o0, %o1, %o070; SPARC64-POPC-NEXT:    srl %o0, 2, %o171; SPARC64-POPC-NEXT:    or %o0, %o1, %o072; SPARC64-POPC-NEXT:    srl %o0, 4, %o173; SPARC64-POPC-NEXT:    or %o0, %o1, %o074; SPARC64-POPC-NEXT:    srl %o0, 8, %o175; SPARC64-POPC-NEXT:    or %o0, %o1, %o076; SPARC64-POPC-NEXT:    srl %o0, 16, %o177; SPARC64-POPC-NEXT:    or %o0, %o1, %o078; SPARC64-POPC-NEXT:    xor %o0, -1, %o079; SPARC64-POPC-NEXT:    srl %o0, 0, %o080; SPARC64-POPC-NEXT:    retl81; SPARC64-POPC-NEXT:    popc %o0, %o082; SPARC64-POPC-NEXT:  .LBB0_2:83; SPARC64-POPC-NEXT:    retl84; SPARC64-POPC-NEXT:    mov 32, %o085;86; SPARC64-VIS3-LABEL: i32_nopoison:87; SPARC64-VIS3:       ! %bb.0:88; SPARC64-VIS3-NEXT:    srl %o0, 0, %o089; SPARC64-VIS3-NEXT:    lzcnt %o0, %o090; SPARC64-VIS3-NEXT:    retl91; SPARC64-VIS3-NEXT:    add %o0, -32, %o092  %ret = call i32 @llvm.ctlz.i32(i32 %x, i1 false)93  ret i32 %ret94}95 96define i32 @i32_poison(i32 %x) nounwind {97; SPARC-LABEL: i32_poison:98; SPARC:       ! %bb.0:99; SPARC-NEXT:    save %sp, -96, %sp100; SPARC-NEXT:    call __clzsi2101; SPARC-NEXT:    mov %i0, %o0102; SPARC-NEXT:    ret103; SPARC-NEXT:    restore %g0, %o0, %o0104;105; SPARC-POPC-LABEL: i32_poison:106; SPARC-POPC:       ! %bb.0:107; SPARC-POPC-NEXT:    save %sp, -96, %sp108; SPARC-POPC-NEXT:    call __clzsi2109; SPARC-POPC-NEXT:    mov %i0, %o0110; SPARC-POPC-NEXT:    ret111; SPARC-POPC-NEXT:    restore %g0, %o0, %o0112;113; SPARC-VIS3-LABEL: i32_poison:114; SPARC-VIS3:       ! %bb.0:115; SPARC-VIS3-NEXT:    srl %o0, 0, %o0116; SPARC-VIS3-NEXT:    lzcnt %o0, %o0117; SPARC-VIS3-NEXT:    retl118; SPARC-VIS3-NEXT:    add %o0, -32, %o0119;120; SPARC64-LABEL: i32_poison:121; SPARC64:       ! %bb.0:122; SPARC64-NEXT:    save %sp, -176, %sp123; SPARC64-NEXT:    call __clzdi2124; SPARC64-NEXT:    sllx %i0, 32, %o0125; SPARC64-NEXT:    ret126; SPARC64-NEXT:    restore %g0, %o0, %o0127;128; SPARC64-POPC-LABEL: i32_poison:129; SPARC64-POPC:       ! %bb.0:130; SPARC64-POPC-NEXT:    srl %o0, 1, %o1131; SPARC64-POPC-NEXT:    or %o0, %o1, %o0132; SPARC64-POPC-NEXT:    srl %o0, 2, %o1133; SPARC64-POPC-NEXT:    or %o0, %o1, %o0134; SPARC64-POPC-NEXT:    srl %o0, 4, %o1135; SPARC64-POPC-NEXT:    or %o0, %o1, %o0136; SPARC64-POPC-NEXT:    srl %o0, 8, %o1137; SPARC64-POPC-NEXT:    or %o0, %o1, %o0138; SPARC64-POPC-NEXT:    srl %o0, 16, %o1139; SPARC64-POPC-NEXT:    or %o0, %o1, %o0140; SPARC64-POPC-NEXT:    xor %o0, -1, %o0141; SPARC64-POPC-NEXT:    srl %o0, 0, %o0142; SPARC64-POPC-NEXT:    retl143; SPARC64-POPC-NEXT:    popc %o0, %o0144;145; SPARC64-VIS3-LABEL: i32_poison:146; SPARC64-VIS3:       ! %bb.0:147; SPARC64-VIS3-NEXT:    srl %o0, 0, %o0148; SPARC64-VIS3-NEXT:    lzcnt %o0, %o0149; SPARC64-VIS3-NEXT:    retl150; SPARC64-VIS3-NEXT:    add %o0, -32, %o0151  %ret = call i32 @llvm.ctlz.i32(i32 %x, i1 true)152  ret i32 %ret153}154 155define i64 @i64_nopoison(i64 %x) nounwind {156; SPARC-LABEL: i64_nopoison:157; SPARC:       ! %bb.0:158; SPARC-NEXT:    save %sp, -96, %sp159; SPARC-NEXT:    orcc %i1, %i0, %g0160; SPARC-NEXT:    be .LBB2_4161; SPARC-NEXT:    nop162; SPARC-NEXT:  ! %bb.1: ! %cond.false163; SPARC-NEXT:    call __clzsi2164; SPARC-NEXT:    mov %i1, %o0165; SPARC-NEXT:    mov %o0, %i2166; SPARC-NEXT:    call __clzsi2167; SPARC-NEXT:    mov %i0, %o0168; SPARC-NEXT:    cmp %i0, 0169; SPARC-NEXT:    bne .LBB2_3170; SPARC-NEXT:    mov %o0, %i1171; SPARC-NEXT:  ! %bb.2: ! %cond.false172; SPARC-NEXT:    add %i2, 32, %i1173; SPARC-NEXT:  .LBB2_3: ! %cond.false174; SPARC-NEXT:    ret175; SPARC-NEXT:    restore %g0, %g0, %o0176; SPARC-NEXT:  .LBB2_4:177; SPARC-NEXT:    mov %g0, %i0178; SPARC-NEXT:    ret179; SPARC-NEXT:    restore %g0, 64, %o1180;181; SPARC-POPC-LABEL: i64_nopoison:182; SPARC-POPC:       ! %bb.0:183; SPARC-POPC-NEXT:    save %sp, -96, %sp184; SPARC-POPC-NEXT:    orcc %i1, %i0, %g0185; SPARC-POPC-NEXT:    be .LBB2_4186; SPARC-POPC-NEXT:    nop187; SPARC-POPC-NEXT:  ! %bb.1: ! %cond.false188; SPARC-POPC-NEXT:    call __clzsi2189; SPARC-POPC-NEXT:    mov %i1, %o0190; SPARC-POPC-NEXT:    mov %o0, %i2191; SPARC-POPC-NEXT:    call __clzsi2192; SPARC-POPC-NEXT:    mov %i0, %o0193; SPARC-POPC-NEXT:    cmp %i0, 0194; SPARC-POPC-NEXT:    bne .LBB2_3195; SPARC-POPC-NEXT:    mov %o0, %i1196; SPARC-POPC-NEXT:  ! %bb.2: ! %cond.false197; SPARC-POPC-NEXT:    add %i2, 32, %i1198; SPARC-POPC-NEXT:  .LBB2_3: ! %cond.false199; SPARC-POPC-NEXT:    ret200; SPARC-POPC-NEXT:    restore %g0, %g0, %o0201; SPARC-POPC-NEXT:  .LBB2_4:202; SPARC-POPC-NEXT:    mov %g0, %i0203; SPARC-POPC-NEXT:    ret204; SPARC-POPC-NEXT:    restore %g0, 64, %o1205;206; SPARC-VIS3-LABEL: i64_nopoison:207; SPARC-VIS3:       ! %bb.0:208; SPARC-VIS3-NEXT:    srl %o0, 0, %o2209; SPARC-VIS3-NEXT:    lzcnt %o2, %o2210; SPARC-VIS3-NEXT:    add %o2, -32, %o2211; SPARC-VIS3-NEXT:    srl %o1, 0, %o1212; SPARC-VIS3-NEXT:    lzcnt %o1, %o1213; SPARC-VIS3-NEXT:    add %o1, -32, %o1214; SPARC-VIS3-NEXT:    add %o1, 32, %o1215; SPARC-VIS3-NEXT:    cmp %o0, 0216; SPARC-VIS3-NEXT:    movne %icc, %o2, %o1217; SPARC-VIS3-NEXT:    retl218; SPARC-VIS3-NEXT:    mov %g0, %o0219;220; SPARC64-LABEL: i64_nopoison:221; SPARC64:       ! %bb.0:222; SPARC64-NEXT:    save %sp, -176, %sp223; SPARC64-NEXT:    brz %i0, .LBB2_2224; SPARC64-NEXT:    nop225; SPARC64-NEXT:  ! %bb.1: ! %cond.false226; SPARC64-NEXT:    call __clzdi2227; SPARC64-NEXT:    mov %i0, %o0228; SPARC64-NEXT:    ret229; SPARC64-NEXT:    restore %g0, %o0, %o0230; SPARC64-NEXT:  .LBB2_2:231; SPARC64-NEXT:    ret232; SPARC64-NEXT:    restore %g0, 64, %o0233;234; SPARC64-POPC-LABEL: i64_nopoison:235; SPARC64-POPC:       ! %bb.0:236; SPARC64-POPC-NEXT:    brz %o0, .LBB2_2237; SPARC64-POPC-NEXT:    nop238; SPARC64-POPC-NEXT:  ! %bb.1: ! %cond.false239; SPARC64-POPC-NEXT:    srlx %o0, 1, %o1240; SPARC64-POPC-NEXT:    or %o0, %o1, %o0241; SPARC64-POPC-NEXT:    srlx %o0, 2, %o1242; SPARC64-POPC-NEXT:    or %o0, %o1, %o0243; SPARC64-POPC-NEXT:    srlx %o0, 4, %o1244; SPARC64-POPC-NEXT:    or %o0, %o1, %o0245; SPARC64-POPC-NEXT:    srlx %o0, 8, %o1246; SPARC64-POPC-NEXT:    or %o0, %o1, %o0247; SPARC64-POPC-NEXT:    srlx %o0, 16, %o1248; SPARC64-POPC-NEXT:    or %o0, %o1, %o0249; SPARC64-POPC-NEXT:    srlx %o0, 32, %o1250; SPARC64-POPC-NEXT:    or %o0, %o1, %o0251; SPARC64-POPC-NEXT:    xor %o0, -1, %o0252; SPARC64-POPC-NEXT:    retl253; SPARC64-POPC-NEXT:    popc %o0, %o0254; SPARC64-POPC-NEXT:  .LBB2_2:255; SPARC64-POPC-NEXT:    retl256; SPARC64-POPC-NEXT:    mov 64, %o0257;258; SPARC64-VIS3-LABEL: i64_nopoison:259; SPARC64-VIS3:       ! %bb.0:260; SPARC64-VIS3-NEXT:    retl261; SPARC64-VIS3-NEXT:    lzcnt %o0, %o0262  %ret = call i64 @llvm.ctlz.i64(i64 %x, i1 false)263  ret i64 %ret264}265 266define i64 @i64_poison(i64 %x) nounwind {267; SPARC-LABEL: i64_poison:268; SPARC:       ! %bb.0:269; SPARC-NEXT:    save %sp, -96, %sp270; SPARC-NEXT:    mov %i1, %o0271; SPARC-NEXT:    call __clzsi2272; SPARC-NEXT:    mov %i0, %i1273; SPARC-NEXT:    mov %o0, %i0274; SPARC-NEXT:    call __clzsi2275; SPARC-NEXT:    mov %i1, %o0276; SPARC-NEXT:    cmp %i1, 0277; SPARC-NEXT:    bne .LBB3_2278; SPARC-NEXT:    nop279; SPARC-NEXT:  ! %bb.1:280; SPARC-NEXT:    add %i0, 32, %o0281; SPARC-NEXT:  .LBB3_2:282; SPARC-NEXT:    mov %g0, %i0283; SPARC-NEXT:    ret284; SPARC-NEXT:    restore %g0, %o0, %o1285;286; SPARC-POPC-LABEL: i64_poison:287; SPARC-POPC:       ! %bb.0:288; SPARC-POPC-NEXT:    save %sp, -96, %sp289; SPARC-POPC-NEXT:    mov %i1, %o0290; SPARC-POPC-NEXT:    call __clzsi2291; SPARC-POPC-NEXT:    mov %i0, %i1292; SPARC-POPC-NEXT:    mov %o0, %i0293; SPARC-POPC-NEXT:    call __clzsi2294; SPARC-POPC-NEXT:    mov %i1, %o0295; SPARC-POPC-NEXT:    cmp %i1, 0296; SPARC-POPC-NEXT:    bne .LBB3_2297; SPARC-POPC-NEXT:    nop298; SPARC-POPC-NEXT:  ! %bb.1:299; SPARC-POPC-NEXT:    add %i0, 32, %o0300; SPARC-POPC-NEXT:  .LBB3_2:301; SPARC-POPC-NEXT:    mov %g0, %i0302; SPARC-POPC-NEXT:    ret303; SPARC-POPC-NEXT:    restore %g0, %o0, %o1304;305; SPARC-VIS3-LABEL: i64_poison:306; SPARC-VIS3:       ! %bb.0:307; SPARC-VIS3-NEXT:    srl %o0, 0, %o2308; SPARC-VIS3-NEXT:    lzcnt %o2, %o2309; SPARC-VIS3-NEXT:    add %o2, -32, %o2310; SPARC-VIS3-NEXT:    srl %o1, 0, %o1311; SPARC-VIS3-NEXT:    lzcnt %o1, %o1312; SPARC-VIS3-NEXT:    add %o1, -32, %o1313; SPARC-VIS3-NEXT:    add %o1, 32, %o1314; SPARC-VIS3-NEXT:    cmp %o0, 0315; SPARC-VIS3-NEXT:    movne %icc, %o2, %o1316; SPARC-VIS3-NEXT:    retl317; SPARC-VIS3-NEXT:    mov %g0, %o0318;319; SPARC64-LABEL: i64_poison:320; SPARC64:       ! %bb.0:321; SPARC64-NEXT:    save %sp, -176, %sp322; SPARC64-NEXT:    call __clzdi2323; SPARC64-NEXT:    mov %i0, %o0324; SPARC64-NEXT:    ret325; SPARC64-NEXT:    restore %g0, %o0, %o0326;327; SPARC64-POPC-LABEL: i64_poison:328; SPARC64-POPC:       ! %bb.0:329; SPARC64-POPC-NEXT:    srlx %o0, 1, %o1330; SPARC64-POPC-NEXT:    or %o0, %o1, %o0331; SPARC64-POPC-NEXT:    srlx %o0, 2, %o1332; SPARC64-POPC-NEXT:    or %o0, %o1, %o0333; SPARC64-POPC-NEXT:    srlx %o0, 4, %o1334; SPARC64-POPC-NEXT:    or %o0, %o1, %o0335; SPARC64-POPC-NEXT:    srlx %o0, 8, %o1336; SPARC64-POPC-NEXT:    or %o0, %o1, %o0337; SPARC64-POPC-NEXT:    srlx %o0, 16, %o1338; SPARC64-POPC-NEXT:    or %o0, %o1, %o0339; SPARC64-POPC-NEXT:    srlx %o0, 32, %o1340; SPARC64-POPC-NEXT:    or %o0, %o1, %o0341; SPARC64-POPC-NEXT:    xor %o0, -1, %o0342; SPARC64-POPC-NEXT:    retl343; SPARC64-POPC-NEXT:    popc %o0, %o0344;345; SPARC64-VIS3-LABEL: i64_poison:346; SPARC64-VIS3:       ! %bb.0:347; SPARC64-VIS3-NEXT:    retl348; SPARC64-VIS3-NEXT:    lzcnt %o0, %o0349  %ret = call i64 @llvm.ctlz.i64(i64 %x, i1 true)350  ret i64 %ret351}352