69 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 62; Test that 'and' mask is sunk to the cmp use block only if it is masking a single bit3; RUN: llc -march=hexagon --verify-machineinstrs < %s | FileCheck %s4 5@A = global i32 zeroinitializer6 7define i32 @and_sink1(i32 %a) {8; CHECK-LABEL: and_sink1:9; CHECK: .cfi_startproc10; CHECK-NEXT: // %bb.0:11; CHECK-NEXT: {12; CHECK-NEXT: p0 = !tstbit(r0,#11)13; CHECK-NEXT: r0 = ##A14; CHECK-NEXT: }15; CHECK-NEXT: .p2align 416; CHECK-NEXT: .LBB0_1: // %bb017; CHECK-NEXT: // =>This Inner Loop Header: Depth=118; CHECK-NEXT: {19; CHECK-NEXT: if (p0) jump:nt .LBB0_120; CHECK-NEXT: memw(r0+#0) = #021; CHECK-NEXT: }22; CHECK-NEXT: // %bb.2: // %bb223; CHECK-NEXT: {24; CHECK-NEXT: r0 = #025; CHECK-NEXT: jumpr r3126; CHECK-NEXT: }27 %and = and i32 %a, 204828 br label %bb029bb0:30 %cmp = icmp eq i32 %and, 031 store i32 0, i32* @A32 br i1 %cmp, label %bb0, label %bb233bb2:34 ret i32 035}36 37define i32 @and_sink2(i32 %a) {38; CHECK-LABEL: and_sink2:39; CHECK: .cfi_startproc40; CHECK-NEXT: // %bb.0:41; CHECK-NEXT: {42; CHECK-NEXT: r1 = and(r0,##2049)43; CHECK-NEXT: r0 = ##A44; CHECK-NEXT: }45; CHECK-NEXT: {46; CHECK-NEXT: p0 = cmp.eq(r1,#0)47; CHECK-NEXT: }48; CHECK-NEXT: .p2align 449; CHECK-NEXT: .LBB1_1: // %bb050; CHECK-NEXT: // =>This Inner Loop Header: Depth=151; CHECK-NEXT: {52; CHECK-NEXT: if (p0) jump:nt .LBB1_153; CHECK-NEXT: memw(r0+#0) = #054; CHECK-NEXT: }55; CHECK-NEXT: // %bb.2: // %bb256; CHECK-NEXT: {57; CHECK-NEXT: r0 = #058; CHECK-NEXT: jumpr r3159; CHECK-NEXT: }60 %and = and i32 %a, 204961 br label %bb062bb0:63 %cmp = icmp eq i32 %and, 064 store i32 0, i32* @A65 br i1 %cmp, label %bb0, label %bb266bb2:67 ret i32 068}69