brintos

brintos / llvm-project-archived public Read only

0
0
Text · 23.0 KiB · bf42e9f Raw
670 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple arm-eabi -mattr=+v5t | FileCheck %s --check-prefix=CHECK-53; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 | FileCheck %s4; RUN: llc < %s -mtriple arm-eabi -mattr=+v6t2 -mattr=+neon | FileCheck %s5; RUN: llc < %s -mtriple thumbv6m-none-eabi | FileCheck %s --check-prefix=CHECK-6M6; RUN: llc < %s -mtriple thumbv8m.base-none-eabi | FileCheck %s --check-prefix=CHECK-8MBASE7 8; This test checks the @llvm.cttz.* intrinsics for integers.9 10declare i8 @llvm.cttz.i8(i8, i1)11declare i16 @llvm.cttz.i16(i16, i1)12declare i32 @llvm.cttz.i32(i32, i1)13declare i64 @llvm.cttz.i64(i64, i1)14 15;------------------------------------------------------------------------------16 17define i8 @test_i8(i8 %a) {18; CHECK-5-LABEL: test_i8:19; CHECK-5:       @ %bb.0:20; CHECK-5-NEXT:    orr r0, r0, #25621; CHECK-5-NEXT:    sub r1, r0, #122; CHECK-5-NEXT:    bic r0, r1, r023; CHECK-5-NEXT:    clz r0, r024; CHECK-5-NEXT:    rsb r0, r0, #3225; CHECK-5-NEXT:    bx lr26;27; CHECK-LABEL: test_i8:28; CHECK:       @ %bb.0:29; CHECK-NEXT:    orr r0, r0, #25630; CHECK-NEXT:    rbit r0, r031; CHECK-NEXT:    clz r0, r032; CHECK-NEXT:    bx lr33;34; CHECK-6M-LABEL: test_i8:35; CHECK-6M:       @ %bb.0:36; CHECK-6M-NEXT:    lsls r1, r0, #2437; CHECK-6M-NEXT:    beq .LBB0_338; CHECK-6M-NEXT:  @ %bb.1: @ %cond.false39; CHECK-6M-NEXT:    cmp r0, #040; CHECK-6M-NEXT:    beq .LBB0_441; CHECK-6M-NEXT:  @ %bb.2: @ %cond.false42; CHECK-6M-NEXT:    rsbs r1, r0, #043; CHECK-6M-NEXT:    ands r1, r044; CHECK-6M-NEXT:    ldr r0, .LCPI0_045; CHECK-6M-NEXT:    muls r0, r1, r046; CHECK-6M-NEXT:    lsrs r0, r0, #2747; CHECK-6M-NEXT:    adr r1, .LCPI0_148; CHECK-6M-NEXT:    ldrb r0, [r1, r0]49; CHECK-6M-NEXT:    bx lr50; CHECK-6M-NEXT:  .LBB0_3:51; CHECK-6M-NEXT:    movs r0, #852; CHECK-6M-NEXT:    bx lr53; CHECK-6M-NEXT:  .LBB0_4:54; CHECK-6M-NEXT:    movs r0, #3255; CHECK-6M-NEXT:    bx lr56; CHECK-6M-NEXT:    .p2align 257; CHECK-6M-NEXT:  @ %bb.5:58; CHECK-6M-NEXT:  .LCPI0_0:59; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb53160; CHECK-6M-NEXT:  .LCPI0_1:61; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"62;63; CHECK-8MBASE-LABEL: test_i8:64; CHECK-8MBASE:       @ %bb.0:65; CHECK-8MBASE-NEXT:    lsls r1, r0, #2466; CHECK-8MBASE-NEXT:    beq .LBB0_367; CHECK-8MBASE-NEXT:  @ %bb.1: @ %cond.false68; CHECK-8MBASE-NEXT:    cbz r0, .LBB0_469; CHECK-8MBASE-NEXT:  @ %bb.2: @ %cond.false70; CHECK-8MBASE-NEXT:    rsbs r1, r0, #071; CHECK-8MBASE-NEXT:    ands r1, r072; CHECK-8MBASE-NEXT:    movw r0, #4638573; CHECK-8MBASE-NEXT:    movt r0, #191674; CHECK-8MBASE-NEXT:    muls r0, r1, r075; CHECK-8MBASE-NEXT:    lsrs r0, r0, #2776; CHECK-8MBASE-NEXT:    adr r1, .LCPI0_077; CHECK-8MBASE-NEXT:    ldrb r0, [r1, r0]78; CHECK-8MBASE-NEXT:    bx lr79; CHECK-8MBASE-NEXT:  .LBB0_3:80; CHECK-8MBASE-NEXT:    movs r0, #881; CHECK-8MBASE-NEXT:    bx lr82; CHECK-8MBASE-NEXT:  .LBB0_4:83; CHECK-8MBASE-NEXT:    movs r0, #3284; CHECK-8MBASE-NEXT:    bx lr85; CHECK-8MBASE-NEXT:    .p2align 286; CHECK-8MBASE-NEXT:  @ %bb.5:87; CHECK-8MBASE-NEXT:  .LCPI0_0:88; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"89  %tmp = call i8 @llvm.cttz.i8(i8 %a, i1 false)90  ret i8 %tmp91}92 93define i16 @test_i16(i16 %a) {94; CHECK-5-LABEL: test_i16:95; CHECK-5:       @ %bb.0:96; CHECK-5-NEXT:    orr r0, r0, #6553697; CHECK-5-NEXT:    sub r1, r0, #198; CHECK-5-NEXT:    bic r0, r1, r099; CHECK-5-NEXT:    clz r0, r0100; CHECK-5-NEXT:    rsb r0, r0, #32101; CHECK-5-NEXT:    bx lr102;103; CHECK-LABEL: test_i16:104; CHECK:       @ %bb.0:105; CHECK-NEXT:    orr r0, r0, #65536106; CHECK-NEXT:    rbit r0, r0107; CHECK-NEXT:    clz r0, r0108; CHECK-NEXT:    bx lr109;110; CHECK-6M-LABEL: test_i16:111; CHECK-6M:       @ %bb.0:112; CHECK-6M-NEXT:    lsls r1, r0, #16113; CHECK-6M-NEXT:    beq .LBB1_3114; CHECK-6M-NEXT:  @ %bb.1: @ %cond.false115; CHECK-6M-NEXT:    cmp r0, #0116; CHECK-6M-NEXT:    beq .LBB1_4117; CHECK-6M-NEXT:  @ %bb.2: @ %cond.false118; CHECK-6M-NEXT:    rsbs r1, r0, #0119; CHECK-6M-NEXT:    ands r1, r0120; CHECK-6M-NEXT:    ldr r0, .LCPI1_0121; CHECK-6M-NEXT:    muls r0, r1, r0122; CHECK-6M-NEXT:    lsrs r0, r0, #27123; CHECK-6M-NEXT:    adr r1, .LCPI1_1124; CHECK-6M-NEXT:    ldrb r0, [r1, r0]125; CHECK-6M-NEXT:    bx lr126; CHECK-6M-NEXT:  .LBB1_3:127; CHECK-6M-NEXT:    movs r0, #16128; CHECK-6M-NEXT:    bx lr129; CHECK-6M-NEXT:  .LBB1_4:130; CHECK-6M-NEXT:    movs r0, #32131; CHECK-6M-NEXT:    bx lr132; CHECK-6M-NEXT:    .p2align 2133; CHECK-6M-NEXT:  @ %bb.5:134; CHECK-6M-NEXT:  .LCPI1_0:135; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531136; CHECK-6M-NEXT:  .LCPI1_1:137; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"138;139; CHECK-8MBASE-LABEL: test_i16:140; CHECK-8MBASE:       @ %bb.0:141; CHECK-8MBASE-NEXT:    lsls r1, r0, #16142; CHECK-8MBASE-NEXT:    beq .LBB1_3143; CHECK-8MBASE-NEXT:  @ %bb.1: @ %cond.false144; CHECK-8MBASE-NEXT:    cbz r0, .LBB1_4145; CHECK-8MBASE-NEXT:  @ %bb.2: @ %cond.false146; CHECK-8MBASE-NEXT:    rsbs r1, r0, #0147; CHECK-8MBASE-NEXT:    ands r1, r0148; CHECK-8MBASE-NEXT:    movw r0, #46385149; CHECK-8MBASE-NEXT:    movt r0, #1916150; CHECK-8MBASE-NEXT:    muls r0, r1, r0151; CHECK-8MBASE-NEXT:    lsrs r0, r0, #27152; CHECK-8MBASE-NEXT:    adr r1, .LCPI1_0153; CHECK-8MBASE-NEXT:    ldrb r0, [r1, r0]154; CHECK-8MBASE-NEXT:    bx lr155; CHECK-8MBASE-NEXT:  .LBB1_3:156; CHECK-8MBASE-NEXT:    movs r0, #16157; CHECK-8MBASE-NEXT:    bx lr158; CHECK-8MBASE-NEXT:  .LBB1_4:159; CHECK-8MBASE-NEXT:    movs r0, #32160; CHECK-8MBASE-NEXT:    bx lr161; CHECK-8MBASE-NEXT:    .p2align 2162; CHECK-8MBASE-NEXT:  @ %bb.5:163; CHECK-8MBASE-NEXT:  .LCPI1_0:164; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"165  %tmp = call i16 @llvm.cttz.i16(i16 %a, i1 false)166  ret i16 %tmp167}168 169define i32 @test_i32(i32 %a) {170; CHECK-5-LABEL: test_i32:171; CHECK-5:       @ %bb.0:172; CHECK-5-NEXT:    sub r1, r0, #1173; CHECK-5-NEXT:    bic r0, r1, r0174; CHECK-5-NEXT:    clz r0, r0175; CHECK-5-NEXT:    rsb r0, r0, #32176; CHECK-5-NEXT:    bx lr177;178; CHECK-LABEL: test_i32:179; CHECK:       @ %bb.0:180; CHECK-NEXT:    rbit r0, r0181; CHECK-NEXT:    clz r0, r0182; CHECK-NEXT:    bx lr183;184; CHECK-6M-LABEL: test_i32:185; CHECK-6M:       @ %bb.0:186; CHECK-6M-NEXT:    cmp r0, #0187; CHECK-6M-NEXT:    beq .LBB2_3188; CHECK-6M-NEXT:  @ %bb.1: @ %cond.false189; CHECK-6M-NEXT:    cmp r0, #0190; CHECK-6M-NEXT:    beq .LBB2_3191; CHECK-6M-NEXT:  @ %bb.2: @ %cond.false192; CHECK-6M-NEXT:    rsbs r1, r0, #0193; CHECK-6M-NEXT:    ands r1, r0194; CHECK-6M-NEXT:    ldr r0, .LCPI2_0195; CHECK-6M-NEXT:    muls r0, r1, r0196; CHECK-6M-NEXT:    lsrs r0, r0, #27197; CHECK-6M-NEXT:    adr r1, .LCPI2_1198; CHECK-6M-NEXT:    ldrb r0, [r1, r0]199; CHECK-6M-NEXT:    bx lr200; CHECK-6M-NEXT:  .LBB2_3:201; CHECK-6M-NEXT:    movs r0, #32202; CHECK-6M-NEXT:    bx lr203; CHECK-6M-NEXT:    .p2align 2204; CHECK-6M-NEXT:  @ %bb.4:205; CHECK-6M-NEXT:  .LCPI2_0:206; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531207; CHECK-6M-NEXT:  .LCPI2_1:208; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"209;210; CHECK-8MBASE-LABEL: test_i32:211; CHECK-8MBASE:       @ %bb.0:212; CHECK-8MBASE-NEXT:    cbz r0, .LBB2_3213; CHECK-8MBASE-NEXT:  @ %bb.1: @ %cond.false214; CHECK-8MBASE-NEXT:    cbz r0, .LBB2_3215; CHECK-8MBASE-NEXT:  @ %bb.2: @ %cond.false216; CHECK-8MBASE-NEXT:    rsbs r1, r0, #0217; CHECK-8MBASE-NEXT:    ands r1, r0218; CHECK-8MBASE-NEXT:    movw r0, #46385219; CHECK-8MBASE-NEXT:    movt r0, #1916220; CHECK-8MBASE-NEXT:    muls r0, r1, r0221; CHECK-8MBASE-NEXT:    lsrs r0, r0, #27222; CHECK-8MBASE-NEXT:    adr r1, .LCPI2_0223; CHECK-8MBASE-NEXT:    ldrb r0, [r1, r0]224; CHECK-8MBASE-NEXT:    bx lr225; CHECK-8MBASE-NEXT:  .LBB2_3:226; CHECK-8MBASE-NEXT:    movs r0, #32227; CHECK-8MBASE-NEXT:    bx lr228; CHECK-8MBASE-NEXT:    .p2align 2229; CHECK-8MBASE-NEXT:  @ %bb.4:230; CHECK-8MBASE-NEXT:  .LCPI2_0:231; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"232  %tmp = call i32 @llvm.cttz.i32(i32 %a, i1 false)233  ret i32 %tmp234}235 236define i64 @test_i64(i64 %a) {237; CHECK-5-LABEL: test_i64:238; CHECK-5:       @ %bb.0:239; CHECK-5-NEXT:    sub r3, r1, #1240; CHECK-5-NEXT:    sub r2, r0, #1241; CHECK-5-NEXT:    bic r1, r3, r1242; CHECK-5-NEXT:    bic r2, r2, r0243; CHECK-5-NEXT:    clz r1, r1244; CHECK-5-NEXT:    clz r2, r2245; CHECK-5-NEXT:    rsb r1, r1, #64246; CHECK-5-NEXT:    cmp r0, #0247; CHECK-5-NEXT:    rsbne r1, r2, #32248; CHECK-5-NEXT:    mov r0, r1249; CHECK-5-NEXT:    mov r1, #0250; CHECK-5-NEXT:    bx lr251;252; CHECK-LABEL: test_i64:253; CHECK:       @ %bb.0:254; CHECK-NEXT:    rbit r1, r1255; CHECK-NEXT:    rbit r2, r0256; CHECK-NEXT:    clz r1, r1257; CHECK-NEXT:    cmp r0, #0258; CHECK-NEXT:    add r1, r1, #32259; CHECK-NEXT:    clzne r1, r2260; CHECK-NEXT:    mov r0, r1261; CHECK-NEXT:    mov r1, #0262; CHECK-NEXT:    bx lr263;264; CHECK-6M-LABEL: test_i64:265; CHECK-6M:       @ %bb.0:266; CHECK-6M-NEXT:    .save {r4, r5, r6, lr}267; CHECK-6M-NEXT:    push {r4, r5, r6, lr}268; CHECK-6M-NEXT:    mov r3, r1269; CHECK-6M-NEXT:    mov r2, r0270; CHECK-6M-NEXT:    movs r1, #0271; CHECK-6M-NEXT:    orrs r0, r3272; CHECK-6M-NEXT:    beq .LBB3_6273; CHECK-6M-NEXT:  @ %bb.1: @ %cond.false274; CHECK-6M-NEXT:    ldr r6, .LCPI3_0275; CHECK-6M-NEXT:    adr r4, .LCPI3_1276; CHECK-6M-NEXT:    movs r0, #32277; CHECK-6M-NEXT:    cmp r3, #0278; CHECK-6M-NEXT:    mov r5, r0279; CHECK-6M-NEXT:    beq .LBB3_3280; CHECK-6M-NEXT:  @ %bb.2: @ %cond.false281; CHECK-6M-NEXT:    rsbs r5, r3, #0282; CHECK-6M-NEXT:    ands r5, r3283; CHECK-6M-NEXT:    muls r5, r6, r5284; CHECK-6M-NEXT:    lsrs r3, r5, #27285; CHECK-6M-NEXT:    ldrb r5, [r4, r3]286; CHECK-6M-NEXT:  .LBB3_3: @ %cond.false287; CHECK-6M-NEXT:    adds r5, #32288; CHECK-6M-NEXT:    rsbs r3, r2, #0289; CHECK-6M-NEXT:    ands r3, r2290; CHECK-6M-NEXT:    muls r6, r3, r6291; CHECK-6M-NEXT:    lsrs r3, r6, #27292; CHECK-6M-NEXT:    cmp r2, #0293; CHECK-6M-NEXT:    bne .LBB3_7294; CHECK-6M-NEXT:  @ %bb.4: @ %cond.false295; CHECK-6M-NEXT:    beq .LBB3_8296; CHECK-6M-NEXT:  .LBB3_5: @ %cond.end297; CHECK-6M-NEXT:    pop {r4, r5, r6, pc}298; CHECK-6M-NEXT:  .LBB3_6:299; CHECK-6M-NEXT:    movs r0, #64300; CHECK-6M-NEXT:    pop {r4, r5, r6, pc}301; CHECK-6M-NEXT:  .LBB3_7: @ %cond.false302; CHECK-6M-NEXT:    ldrb r0, [r4, r3]303; CHECK-6M-NEXT:    bne .LBB3_5304; CHECK-6M-NEXT:  .LBB3_8: @ %cond.false305; CHECK-6M-NEXT:    mov r0, r5306; CHECK-6M-NEXT:    pop {r4, r5, r6, pc}307; CHECK-6M-NEXT:    .p2align 2308; CHECK-6M-NEXT:  @ %bb.9:309; CHECK-6M-NEXT:  .LCPI3_0:310; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531311; CHECK-6M-NEXT:  .LCPI3_1:312; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"313;314; CHECK-8MBASE-LABEL: test_i64:315; CHECK-8MBASE:       @ %bb.0:316; CHECK-8MBASE-NEXT:    .save {r4, r5, r6, lr}317; CHECK-8MBASE-NEXT:    push {r4, r5, r6, lr}318; CHECK-8MBASE-NEXT:    mov r3, r1319; CHECK-8MBASE-NEXT:    mov r2, r0320; CHECK-8MBASE-NEXT:    movs r1, #0321; CHECK-8MBASE-NEXT:    orrs r0, r3322; CHECK-8MBASE-NEXT:    beq .LBB3_6323; CHECK-8MBASE-NEXT:  @ %bb.1: @ %cond.false324; CHECK-8MBASE-NEXT:    movw r6, #46385325; CHECK-8MBASE-NEXT:    movt r6, #1916326; CHECK-8MBASE-NEXT:    adr r4, .LCPI3_0327; CHECK-8MBASE-NEXT:    movs r0, #32328; CHECK-8MBASE-NEXT:    mov r5, r0329; CHECK-8MBASE-NEXT:    cbz r3, .LBB3_3330; CHECK-8MBASE-NEXT:  @ %bb.2: @ %cond.false331; CHECK-8MBASE-NEXT:    rsbs r5, r3, #0332; CHECK-8MBASE-NEXT:    ands r5, r3333; CHECK-8MBASE-NEXT:    muls r5, r6, r5334; CHECK-8MBASE-NEXT:    lsrs r3, r5, #27335; CHECK-8MBASE-NEXT:    ldrb r5, [r4, r3]336; CHECK-8MBASE-NEXT:  .LBB3_3: @ %cond.false337; CHECK-8MBASE-NEXT:    adds r5, #32338; CHECK-8MBASE-NEXT:    rsbs r3, r2, #0339; CHECK-8MBASE-NEXT:    ands r3, r2340; CHECK-8MBASE-NEXT:    muls r6, r3, r6341; CHECK-8MBASE-NEXT:    lsrs r3, r6, #27342; CHECK-8MBASE-NEXT:    cmp r2, #0343; CHECK-8MBASE-NEXT:    bne .LBB3_7344; CHECK-8MBASE-NEXT:  @ %bb.4: @ %cond.false345; CHECK-8MBASE-NEXT:    beq .LBB3_8346; CHECK-8MBASE-NEXT:  .LBB3_5: @ %cond.end347; CHECK-8MBASE-NEXT:    pop {r4, r5, r6, pc}348; CHECK-8MBASE-NEXT:  .LBB3_6:349; CHECK-8MBASE-NEXT:    movs r0, #64350; CHECK-8MBASE-NEXT:    pop {r4, r5, r6, pc}351; CHECK-8MBASE-NEXT:  .LBB3_7: @ %cond.false352; CHECK-8MBASE-NEXT:    ldrb r0, [r4, r3]353; CHECK-8MBASE-NEXT:    bne .LBB3_5354; CHECK-8MBASE-NEXT:  .LBB3_8: @ %cond.false355; CHECK-8MBASE-NEXT:    mov r0, r5356; CHECK-8MBASE-NEXT:    pop {r4, r5, r6, pc}357; CHECK-8MBASE-NEXT:    .p2align 2358; CHECK-8MBASE-NEXT:  @ %bb.9:359; CHECK-8MBASE-NEXT:  .LCPI3_0:360; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"361  %tmp = call i64 @llvm.cttz.i64(i64 %a, i1 false)362  ret i64 %tmp363}364 365;------------------------------------------------------------------------------366 367define i8 @test_i8_zero_undef(i8 %a) {368; CHECK-5-LABEL: test_i8_zero_undef:369; CHECK-5:       @ %bb.0:370; CHECK-5-NEXT:    sub r1, r0, #1371; CHECK-5-NEXT:    bic r0, r1, r0372; CHECK-5-NEXT:    clz r0, r0373; CHECK-5-NEXT:    rsb r0, r0, #32374; CHECK-5-NEXT:    bx lr375;376; CHECK-LABEL: test_i8_zero_undef:377; CHECK:       @ %bb.0:378; CHECK-NEXT:    rbit r0, r0379; CHECK-NEXT:    clz r0, r0380; CHECK-NEXT:    bx lr381;382; CHECK-6M-LABEL: test_i8_zero_undef:383; CHECK-6M:       @ %bb.0:384; CHECK-6M-NEXT:    cmp r0, #0385; CHECK-6M-NEXT:    beq .LBB4_2386; CHECK-6M-NEXT:  @ %bb.1:387; CHECK-6M-NEXT:    rsbs r1, r0, #0388; CHECK-6M-NEXT:    ands r1, r0389; CHECK-6M-NEXT:    ldr r0, .LCPI4_0390; CHECK-6M-NEXT:    muls r0, r1, r0391; CHECK-6M-NEXT:    lsrs r0, r0, #27392; CHECK-6M-NEXT:    adr r1, .LCPI4_1393; CHECK-6M-NEXT:    ldrb r0, [r1, r0]394; CHECK-6M-NEXT:    bx lr395; CHECK-6M-NEXT:  .LBB4_2:396; CHECK-6M-NEXT:    movs r0, #32397; CHECK-6M-NEXT:    bx lr398; CHECK-6M-NEXT:    .p2align 2399; CHECK-6M-NEXT:  @ %bb.3:400; CHECK-6M-NEXT:  .LCPI4_0:401; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531402; CHECK-6M-NEXT:  .LCPI4_1:403; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"404;405; CHECK-8MBASE-LABEL: test_i8_zero_undef:406; CHECK-8MBASE:       @ %bb.0:407; CHECK-8MBASE-NEXT:    cbz r0, .LBB4_2408; CHECK-8MBASE-NEXT:  @ %bb.1:409; CHECK-8MBASE-NEXT:    rsbs r1, r0, #0410; CHECK-8MBASE-NEXT:    ands r1, r0411; CHECK-8MBASE-NEXT:    movw r0, #46385412; CHECK-8MBASE-NEXT:    movt r0, #1916413; CHECK-8MBASE-NEXT:    muls r0, r1, r0414; CHECK-8MBASE-NEXT:    lsrs r0, r0, #27415; CHECK-8MBASE-NEXT:    adr r1, .LCPI4_0416; CHECK-8MBASE-NEXT:    ldrb r0, [r1, r0]417; CHECK-8MBASE-NEXT:    bx lr418; CHECK-8MBASE-NEXT:  .LBB4_2:419; CHECK-8MBASE-NEXT:    movs r0, #32420; CHECK-8MBASE-NEXT:    bx lr421; CHECK-8MBASE-NEXT:    .p2align 2422; CHECK-8MBASE-NEXT:  @ %bb.3:423; CHECK-8MBASE-NEXT:  .LCPI4_0:424; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"425  %tmp = call i8 @llvm.cttz.i8(i8 %a, i1 true)426  ret i8 %tmp427}428 429define i16 @test_i16_zero_undef(i16 %a) {430; CHECK-5-LABEL: test_i16_zero_undef:431; CHECK-5:       @ %bb.0:432; CHECK-5-NEXT:    sub r1, r0, #1433; CHECK-5-NEXT:    bic r0, r1, r0434; CHECK-5-NEXT:    clz r0, r0435; CHECK-5-NEXT:    rsb r0, r0, #32436; CHECK-5-NEXT:    bx lr437;438; CHECK-LABEL: test_i16_zero_undef:439; CHECK:       @ %bb.0:440; CHECK-NEXT:    rbit r0, r0441; CHECK-NEXT:    clz r0, r0442; CHECK-NEXT:    bx lr443;444; CHECK-6M-LABEL: test_i16_zero_undef:445; CHECK-6M:       @ %bb.0:446; CHECK-6M-NEXT:    cmp r0, #0447; CHECK-6M-NEXT:    beq .LBB5_2448; CHECK-6M-NEXT:  @ %bb.1:449; CHECK-6M-NEXT:    rsbs r1, r0, #0450; CHECK-6M-NEXT:    ands r1, r0451; CHECK-6M-NEXT:    ldr r0, .LCPI5_0452; CHECK-6M-NEXT:    muls r0, r1, r0453; CHECK-6M-NEXT:    lsrs r0, r0, #27454; CHECK-6M-NEXT:    adr r1, .LCPI5_1455; CHECK-6M-NEXT:    ldrb r0, [r1, r0]456; CHECK-6M-NEXT:    bx lr457; CHECK-6M-NEXT:  .LBB5_2:458; CHECK-6M-NEXT:    movs r0, #32459; CHECK-6M-NEXT:    bx lr460; CHECK-6M-NEXT:    .p2align 2461; CHECK-6M-NEXT:  @ %bb.3:462; CHECK-6M-NEXT:  .LCPI5_0:463; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531464; CHECK-6M-NEXT:  .LCPI5_1:465; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"466;467; CHECK-8MBASE-LABEL: test_i16_zero_undef:468; CHECK-8MBASE:       @ %bb.0:469; CHECK-8MBASE-NEXT:    cbz r0, .LBB5_2470; CHECK-8MBASE-NEXT:  @ %bb.1:471; CHECK-8MBASE-NEXT:    rsbs r1, r0, #0472; CHECK-8MBASE-NEXT:    ands r1, r0473; CHECK-8MBASE-NEXT:    movw r0, #46385474; CHECK-8MBASE-NEXT:    movt r0, #1916475; CHECK-8MBASE-NEXT:    muls r0, r1, r0476; CHECK-8MBASE-NEXT:    lsrs r0, r0, #27477; CHECK-8MBASE-NEXT:    adr r1, .LCPI5_0478; CHECK-8MBASE-NEXT:    ldrb r0, [r1, r0]479; CHECK-8MBASE-NEXT:    bx lr480; CHECK-8MBASE-NEXT:  .LBB5_2:481; CHECK-8MBASE-NEXT:    movs r0, #32482; CHECK-8MBASE-NEXT:    bx lr483; CHECK-8MBASE-NEXT:    .p2align 2484; CHECK-8MBASE-NEXT:  @ %bb.3:485; CHECK-8MBASE-NEXT:  .LCPI5_0:486; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"487  %tmp = call i16 @llvm.cttz.i16(i16 %a, i1 true)488  ret i16 %tmp489}490 491 492define i32 @test_i32_zero_undef(i32 %a) {493; CHECK-5-LABEL: test_i32_zero_undef:494; CHECK-5:       @ %bb.0:495; CHECK-5-NEXT:    sub r1, r0, #1496; CHECK-5-NEXT:    bic r0, r1, r0497; CHECK-5-NEXT:    clz r0, r0498; CHECK-5-NEXT:    rsb r0, r0, #32499; CHECK-5-NEXT:    bx lr500;501; CHECK-LABEL: test_i32_zero_undef:502; CHECK:       @ %bb.0:503; CHECK-NEXT:    rbit r0, r0504; CHECK-NEXT:    clz r0, r0505; CHECK-NEXT:    bx lr506;507; CHECK-6M-LABEL: test_i32_zero_undef:508; CHECK-6M:       @ %bb.0:509; CHECK-6M-NEXT:    cmp r0, #0510; CHECK-6M-NEXT:    beq .LBB6_2511; CHECK-6M-NEXT:  @ %bb.1:512; CHECK-6M-NEXT:    rsbs r1, r0, #0513; CHECK-6M-NEXT:    ands r1, r0514; CHECK-6M-NEXT:    ldr r0, .LCPI6_0515; CHECK-6M-NEXT:    muls r0, r1, r0516; CHECK-6M-NEXT:    lsrs r0, r0, #27517; CHECK-6M-NEXT:    adr r1, .LCPI6_1518; CHECK-6M-NEXT:    ldrb r0, [r1, r0]519; CHECK-6M-NEXT:    bx lr520; CHECK-6M-NEXT:  .LBB6_2:521; CHECK-6M-NEXT:    movs r0, #32522; CHECK-6M-NEXT:    bx lr523; CHECK-6M-NEXT:    .p2align 2524; CHECK-6M-NEXT:  @ %bb.3:525; CHECK-6M-NEXT:  .LCPI6_0:526; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531527; CHECK-6M-NEXT:  .LCPI6_1:528; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"529;530; CHECK-8MBASE-LABEL: test_i32_zero_undef:531; CHECK-8MBASE:       @ %bb.0:532; CHECK-8MBASE-NEXT:    cbz r0, .LBB6_2533; CHECK-8MBASE-NEXT:  @ %bb.1:534; CHECK-8MBASE-NEXT:    rsbs r1, r0, #0535; CHECK-8MBASE-NEXT:    ands r1, r0536; CHECK-8MBASE-NEXT:    movw r0, #46385537; CHECK-8MBASE-NEXT:    movt r0, #1916538; CHECK-8MBASE-NEXT:    muls r0, r1, r0539; CHECK-8MBASE-NEXT:    lsrs r0, r0, #27540; CHECK-8MBASE-NEXT:    adr r1, .LCPI6_0541; CHECK-8MBASE-NEXT:    ldrb r0, [r1, r0]542; CHECK-8MBASE-NEXT:    bx lr543; CHECK-8MBASE-NEXT:  .LBB6_2:544; CHECK-8MBASE-NEXT:    movs r0, #32545; CHECK-8MBASE-NEXT:    bx lr546; CHECK-8MBASE-NEXT:    .p2align 2547; CHECK-8MBASE-NEXT:  @ %bb.3:548; CHECK-8MBASE-NEXT:  .LCPI6_0:549; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"550  %tmp = call i32 @llvm.cttz.i32(i32 %a, i1 true)551  ret i32 %tmp552}553 554define i64 @test_i64_zero_undef(i64 %a) {555; CHECK-5-LABEL: test_i64_zero_undef:556; CHECK-5:       @ %bb.0:557; CHECK-5-NEXT:    sub r3, r1, #1558; CHECK-5-NEXT:    sub r2, r0, #1559; CHECK-5-NEXT:    bic r1, r3, r1560; CHECK-5-NEXT:    bic r2, r2, r0561; CHECK-5-NEXT:    clz r1, r1562; CHECK-5-NEXT:    clz r2, r2563; CHECK-5-NEXT:    rsb r1, r1, #64564; CHECK-5-NEXT:    cmp r0, #0565; CHECK-5-NEXT:    rsbne r1, r2, #32566; CHECK-5-NEXT:    mov r0, r1567; CHECK-5-NEXT:    mov r1, #0568; CHECK-5-NEXT:    bx lr569;570; CHECK-LABEL: test_i64_zero_undef:571; CHECK:       @ %bb.0:572; CHECK-NEXT:    rbit r1, r1573; CHECK-NEXT:    rbit r2, r0574; CHECK-NEXT:    clz r1, r1575; CHECK-NEXT:    cmp r0, #0576; CHECK-NEXT:    add r1, r1, #32577; CHECK-NEXT:    clzne r1, r2578; CHECK-NEXT:    mov r0, r1579; CHECK-NEXT:    mov r1, #0580; CHECK-NEXT:    bx lr581;582; CHECK-6M-LABEL: test_i64_zero_undef:583; CHECK-6M:       @ %bb.0:584; CHECK-6M-NEXT:    .save {r4, r5, r7, lr}585; CHECK-6M-NEXT:    push {r4, r5, r7, lr}586; CHECK-6M-NEXT:    mov r2, r0587; CHECK-6M-NEXT:    ldr r5, .LCPI7_0588; CHECK-6M-NEXT:    adr r3, .LCPI7_1589; CHECK-6M-NEXT:    movs r0, #32590; CHECK-6M-NEXT:    cmp r1, #0591; CHECK-6M-NEXT:    mov r4, r0592; CHECK-6M-NEXT:    beq .LBB7_2593; CHECK-6M-NEXT:  @ %bb.1:594; CHECK-6M-NEXT:    rsbs r4, r1, #0595; CHECK-6M-NEXT:    ands r4, r1596; CHECK-6M-NEXT:    muls r4, r5, r4597; CHECK-6M-NEXT:    lsrs r1, r4, #27598; CHECK-6M-NEXT:    ldrb r4, [r3, r1]599; CHECK-6M-NEXT:  .LBB7_2:600; CHECK-6M-NEXT:    adds r4, #32601; CHECK-6M-NEXT:    rsbs r1, r2, #0602; CHECK-6M-NEXT:    ands r1, r2603; CHECK-6M-NEXT:    muls r5, r1, r5604; CHECK-6M-NEXT:    lsrs r1, r5, #27605; CHECK-6M-NEXT:    cmp r2, #0606; CHECK-6M-NEXT:    bne .LBB7_5607; CHECK-6M-NEXT:  @ %bb.3:608; CHECK-6M-NEXT:    beq .LBB7_6609; CHECK-6M-NEXT:  .LBB7_4:610; CHECK-6M-NEXT:    movs r1, #0611; CHECK-6M-NEXT:    pop {r4, r5, r7, pc}612; CHECK-6M-NEXT:  .LBB7_5:613; CHECK-6M-NEXT:    ldrb r0, [r3, r1]614; CHECK-6M-NEXT:    bne .LBB7_4615; CHECK-6M-NEXT:  .LBB7_6:616; CHECK-6M-NEXT:    mov r0, r4617; CHECK-6M-NEXT:    movs r1, #0618; CHECK-6M-NEXT:    pop {r4, r5, r7, pc}619; CHECK-6M-NEXT:    .p2align 2620; CHECK-6M-NEXT:  @ %bb.7:621; CHECK-6M-NEXT:  .LCPI7_0:622; CHECK-6M-NEXT:    .long 125613361 @ 0x77cb531623; CHECK-6M-NEXT:  .LCPI7_1:624; CHECK-6M-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"625;626; CHECK-8MBASE-LABEL: test_i64_zero_undef:627; CHECK-8MBASE:       @ %bb.0:628; CHECK-8MBASE-NEXT:    .save {r4, r5, r7, lr}629; CHECK-8MBASE-NEXT:    push {r4, r5, r7, lr}630; CHECK-8MBASE-NEXT:    mov r2, r0631; CHECK-8MBASE-NEXT:    movw r5, #46385632; CHECK-8MBASE-NEXT:    movt r5, #1916633; CHECK-8MBASE-NEXT:    adr r3, .LCPI7_0634; CHECK-8MBASE-NEXT:    movs r0, #32635; CHECK-8MBASE-NEXT:    mov r4, r0636; CHECK-8MBASE-NEXT:    cbz r1, .LBB7_2637; CHECK-8MBASE-NEXT:  @ %bb.1:638; CHECK-8MBASE-NEXT:    rsbs r4, r1, #0639; CHECK-8MBASE-NEXT:    ands r4, r1640; CHECK-8MBASE-NEXT:    muls r4, r5, r4641; CHECK-8MBASE-NEXT:    lsrs r1, r4, #27642; CHECK-8MBASE-NEXT:    ldrb r4, [r3, r1]643; CHECK-8MBASE-NEXT:  .LBB7_2:644; CHECK-8MBASE-NEXT:    adds r4, #32645; CHECK-8MBASE-NEXT:    rsbs r1, r2, #0646; CHECK-8MBASE-NEXT:    ands r1, r2647; CHECK-8MBASE-NEXT:    muls r5, r1, r5648; CHECK-8MBASE-NEXT:    lsrs r1, r5, #27649; CHECK-8MBASE-NEXT:    cmp r2, #0650; CHECK-8MBASE-NEXT:    bne .LBB7_5651; CHECK-8MBASE-NEXT:  @ %bb.3:652; CHECK-8MBASE-NEXT:    beq .LBB7_6653; CHECK-8MBASE-NEXT:  .LBB7_4:654; CHECK-8MBASE-NEXT:    movs r1, #0655; CHECK-8MBASE-NEXT:    pop {r4, r5, r7, pc}656; CHECK-8MBASE-NEXT:  .LBB7_5:657; CHECK-8MBASE-NEXT:    ldrb r0, [r3, r1]658; CHECK-8MBASE-NEXT:    bne .LBB7_4659; CHECK-8MBASE-NEXT:  .LBB7_6:660; CHECK-8MBASE-NEXT:    mov r0, r4661; CHECK-8MBASE-NEXT:    movs r1, #0662; CHECK-8MBASE-NEXT:    pop {r4, r5, r7, pc}663; CHECK-8MBASE-NEXT:    .p2align 2664; CHECK-8MBASE-NEXT:  @ %bb.7:665; CHECK-8MBASE-NEXT:  .LCPI7_0:666; CHECK-8MBASE-NEXT:    .ascii "\000\001\034\002\035\016\030\003\036\026\024\017\031\021\004\b\037\033\r\027\025\023\020\007\032\f\022\006\013\005\n\t"667  %tmp = call i64 @llvm.cttz.i64(i64 %a, i1 true)668  ret i64 %tmp669}670