116 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=thumbv7-linux-gnueabi -mcpu=cortex-m0 -verify-machineinstrs | FileCheck --check-prefix CHECK-T1 %s3; RUN: llc < %s -mtriple=thumbv7-linux-gnueabi -mcpu=cortex-m3 -verify-machineinstrs | FileCheck --check-prefix CHECK-T2 %s4 5define i32 @i(i32 %a) {6; CHECK-T1-LABEL: i:7; CHECK-T1: @ %bb.0: @ %entry8; CHECK-T1-NEXT: movs r1, #2559; CHECK-T1-NEXT: adds r1, #2010; CHECK-T1-NEXT: bics r0, r111; CHECK-T1-NEXT: bx lr12;13; CHECK-T2-LABEL: i:14; CHECK-T2: @ %bb.0: @ %entry15; CHECK-T2-NEXT: movw r1, #27516; CHECK-T2-NEXT: bics r0, r117; CHECK-T2-NEXT: bx lr18entry:19 %and = and i32 %a, -27620 ret i32 %and21}22 23define i32 @j(i32 %a) {24; CHECK-T1-LABEL: j:25; CHECK-T1: @ %bb.0: @ %entry26; CHECK-T1-NEXT: movs r1, #12827; CHECK-T1-NEXT: bics r0, r128; CHECK-T1-NEXT: bx lr29;30; CHECK-T2-LABEL: j:31; CHECK-T2: @ %bb.0: @ %entry32; CHECK-T2-NEXT: bic r0, r0, #12833; CHECK-T2-NEXT: bx lr34entry:35 %and = and i32 %a, -12936 ret i32 %and37}38 39define void @truncated(i16 %a, ptr %p) {40; CHECK-T1-LABEL: truncated:41; CHECK-T1: @ %bb.0:42; CHECK-T1-NEXT: movs r2, #12843; CHECK-T1-NEXT: bics r0, r244; CHECK-T1-NEXT: strh r0, [r1]45; CHECK-T1-NEXT: bx lr46;47; CHECK-T2-LABEL: truncated:48; CHECK-T2: @ %bb.0:49; CHECK-T2-NEXT: bic r0, r0, #12850; CHECK-T2-NEXT: strh r0, [r1]51; CHECK-T2-NEXT: bx lr52 %and = and i16 %a, -12953 store i16 %and, ptr %p54 ret void55}56 57define void @truncated_neg2(i16 %a, ptr %p) {58; CHECK-T1-LABEL: truncated_neg2:59; CHECK-T1: @ %bb.0:60; CHECK-T1-NEXT: movs r2, #161; CHECK-T1-NEXT: bics r0, r262; CHECK-T1-NEXT: strh r0, [r1]63; CHECK-T1-NEXT: bx lr64;65; CHECK-T2-LABEL: truncated_neg2:66; CHECK-T2: @ %bb.0:67; CHECK-T2-NEXT: bic r0, r0, #168; CHECK-T2-NEXT: strh r0, [r1]69; CHECK-T2-NEXT: bx lr70 %and = and i16 %a, -271 store i16 %and, ptr %p72 ret void73}74 75define void @truncated_neg256(i16 %a, ptr %p) {76; CHECK-T1-LABEL: truncated_neg256:77; CHECK-T1: @ %bb.0:78; CHECK-T1-NEXT: movs r2, #25579; CHECK-T1-NEXT: bics r0, r280; CHECK-T1-NEXT: strh r0, [r1]81; CHECK-T1-NEXT: bx lr82;83; CHECK-T2-LABEL: truncated_neg256:84; CHECK-T2: @ %bb.0:85; CHECK-T2-NEXT: bic r0, r0, #25586; CHECK-T2-NEXT: strh r0, [r1]87; CHECK-T2-NEXT: bx lr88 %and = and i16 %a, -25689 store i16 %and, ptr %p90 ret void91}92 93; FIXME: Thumb2 supports "bic r0, r0, #510"94define void @truncated_neg511(i16 %a, ptr %p) {95; CHECK-T1-LABEL: truncated_neg511:96; CHECK-T1: @ %bb.0:97; CHECK-T1-NEXT: ldr r2, .LCPI5_098; CHECK-T1-NEXT: ands r2, r099; CHECK-T1-NEXT: strh r2, [r1]100; CHECK-T1-NEXT: bx lr101; CHECK-T1-NEXT: .p2align 2102; CHECK-T1-NEXT: @ %bb.1:103; CHECK-T1-NEXT: .LCPI5_0:104; CHECK-T1-NEXT: .long 65025 @ 0xfe01105;106; CHECK-T2-LABEL: truncated_neg511:107; CHECK-T2: @ %bb.0:108; CHECK-T2-NEXT: movw r2, #65025109; CHECK-T2-NEXT: ands r0, r2110; CHECK-T2-NEXT: strh r0, [r1]111; CHECK-T2-NEXT: bx lr112 %and = and i16 %a, -511113 store i16 %and, ptr %p114 ret void115}116