1; RUN: llc -mtriple=thumbv7m-linux-gnu < %s | FileCheck %s --check-prefix=CHECK --check-prefix=T2 2; RUN: llc -mtriple=thumbv6m-linux-gnu < %s | FileCheck %s --check-prefix=CHECK --check-prefix=T1 3 4; CHECK-LABEL: single_bit: 5; CHECK: lsls r0, r0, #23 6; T2-NEXT: mov 7; T2-NEXT: it 8; T1-NEXT: bmi 9define i32 @single_bit(i32 %p) { 10 %a = and i32 %p, 256 11 %b = icmp eq i32 %a, 0 12 br i1 %b, label %true, label %false 13 14true: 15 ret i32 1 16 17false: 18 ret i32 2 19} 20 21; CHECK-LABEL: single_bit_multi_use: 22; CHECK: lsls r0, r0, #23 23; T2-NEXT: mov 24; T2-NEXT: it 25; T1-NEXT: bmi 26define i32 @single_bit_multi_use(i32 %p, ptr %z) { 27 store i32 %p, ptr %z 28 %a = and i32 %p, 256 29 %b = icmp eq i32 %a, 0 30 br i1 %b, label %true, label %false 31 32true: 33 ret i32 1 34 35false: 36 ret i32 2 37} 38 39; CHECK-LABEL: multi_bit_lsb_ubfx: 40; CHECK: lsls r0, r0, #24 41; T2-NEXT: mov 42; T2-NEXT: it 43; T1-NEXT: beq 44define i32 @multi_bit_lsb_ubfx(i32 %p) { 45 %a = and i32 %p, 255 46 %b = icmp eq i32 %a, 0 47 br i1 %b, label %true, label %false 48 49true: 50 ret i32 1 51 52false: 53 ret i32 2 54} 55 56; CHECK-LABEL: multi_bit_msb: 57; CHECK: lsrs r0, r0, #24 58; T2-NEXT: mov 59; T2-NEXT: it 60; T1-NEXT: beq 61define i32 @multi_bit_msb(i32 %p) { 62 %a = and i32 %p, 4278190080 ; 0xff000000 63 %b = icmp eq i32 %a, 0 64 br i1 %b, label %true, label %false 65 66true: 67 ret i32 1 68 69false: 70 ret i32 2 71} 72 73; CHECK-LABEL: multi_bit_nosb: 74; T1: lsls r0, r0, #8 75; T1-NEXT: lsrs r0, r0, #24 76; T2: tst.w 77; T2-NEXT: it 78; T1-NEXT: beq 79define i32 @multi_bit_nosb(i32 %p) { 80 %a = and i32 %p, 16711680 ; 0x00ff0000 81 %b = icmp eq i32 %a, 0 82 br i1 %b, label %true, label %false 83 84true: 85 ret i32 1 86 87false: 88 ret i32 2 89} 90 91; CHECK-LABEL: i16_cmpz: 92; T1: uxth r0, r0 93; T1-NEXT: lsrs r0, r0, #9 94; T1-NEXT: bne 95; T2: uxth r0, r0 96; T2-NEXT: movs r2, #0 97; T2-NEXT: cmp.w r2, r0, lsr #9 98define void @i16_cmpz(i16 %x, ptr %foo) { 99entry: 100 %cmp = icmp ult i16 %x, 512 101 br i1 %cmp, label %if.then, label %if.end 102 103if.then: ; preds = %entry 104 tail call void %foo(i32 0) #1 105 br label %if.end 106 107if.end: ; preds = %if.then, %entry 108 ret void 109} 110