110 lines · plain
1; RUN: llc -mtriple=thumbv7m-linux-gnu < %s | FileCheck %s --check-prefix=CHECK --check-prefix=T22; RUN: llc -mtriple=thumbv6m-linux-gnu < %s | FileCheck %s --check-prefix=CHECK --check-prefix=T13 4; CHECK-LABEL: single_bit:5; CHECK: lsls r0, r0, #236; T2-NEXT: mov7; T2-NEXT: it8; T1-NEXT: bmi9define i32 @single_bit(i32 %p) {10 %a = and i32 %p, 25611 %b = icmp eq i32 %a, 012 br i1 %b, label %true, label %false13 14true:15 ret i32 116 17false:18 ret i32 219}20 21; CHECK-LABEL: single_bit_multi_use:22; CHECK: lsls r0, r0, #2323; T2-NEXT: mov24; T2-NEXT: it25; T1-NEXT: bmi26define i32 @single_bit_multi_use(i32 %p, ptr %z) {27 store i32 %p, ptr %z28 %a = and i32 %p, 25629 %b = icmp eq i32 %a, 030 br i1 %b, label %true, label %false31 32true:33 ret i32 134 35false:36 ret i32 237}38 39; CHECK-LABEL: multi_bit_lsb_ubfx:40; CHECK: lsls r0, r0, #2441; T2-NEXT: mov42; T2-NEXT: it43; T1-NEXT: beq44define i32 @multi_bit_lsb_ubfx(i32 %p) {45 %a = and i32 %p, 25546 %b = icmp eq i32 %a, 047 br i1 %b, label %true, label %false48 49true:50 ret i32 151 52false:53 ret i32 254}55 56; CHECK-LABEL: multi_bit_msb:57; CHECK: lsrs r0, r0, #2458; T2-NEXT: mov59; T2-NEXT: it60; T1-NEXT: beq61define i32 @multi_bit_msb(i32 %p) {62 %a = and i32 %p, 4278190080 ; 0xff00000063 %b = icmp eq i32 %a, 064 br i1 %b, label %true, label %false65 66true:67 ret i32 168 69false:70 ret i32 271}72 73; CHECK-LABEL: multi_bit_nosb:74; T1: lsls r0, r0, #875; T1-NEXT: lsrs r0, r0, #2476; T2: tst.w77; T2-NEXT: it78; T1-NEXT: beq79define i32 @multi_bit_nosb(i32 %p) {80 %a = and i32 %p, 16711680 ; 0x00ff000081 %b = icmp eq i32 %a, 082 br i1 %b, label %true, label %false83 84true:85 ret i32 186 87false:88 ret i32 289}90 91; CHECK-LABEL: i16_cmpz:92; T1: uxth r0, r093; T1-NEXT: lsrs r0, r0, #994; T1-NEXT: bne95; T2: uxth r0, r096; T2-NEXT: movs r2, #097; T2-NEXT: cmp.w r2, r0, lsr #998define void @i16_cmpz(i16 %x, ptr %foo) {99entry:100 %cmp = icmp ult i16 %x, 512101 br i1 %cmp, label %if.then, label %if.end102 103if.then: ; preds = %entry104 tail call void %foo(i32 0) #1105 br label %if.end106 107if.end: ; preds = %if.then, %entry108 ret void109}110