Skip to content

Commit 91646ad

Browse files
committed
r
1 parent 810b0c7 commit 91646ad

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

llvm/lib/Target/ARM/ARMISelLowering.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20233,10 +20233,6 @@ bool ARMTargetLowering::targetShrinkDemandedConstant(
2023320233
}
2023420234
}
2023520235

20236-
// Don't optimize if it is legal already.
20237-
if (isLegalLogicalImmediate(Mask, Subtarget))
20238-
return false;
20239-
2024020236
if (isLegalLogicalImmediate(ShrunkMask, Subtarget)) {
2024120237
++NumOptimizedImms;
2024220238
return UseMask(ShrunkMask);
@@ -20247,6 +20243,13 @@ bool ARMTargetLowering::targetShrinkDemandedConstant(
2024720243
return UseMask(ExpandedMask);
2024820244
}
2024920245

20246+
// Don't optimize if it is legal already.
20247+
if (isLegalLogicalImmediate(Mask, Subtarget))
20248+
return false;
20249+
20250+
if (isLegalLogicalImmediate(~Mask, Subtarget))
20251+
return UseMask(Mask); // FIXME: Returning false causes infinite loop.
20252+
2025020253
// Potential improvements:
2025120254
//
2025220255
// We could try to recognize lsls+lsrs or lsrs+lsls pairs here.

llvm/test/CodeGen/Thumb/bic_imm.ll

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,21 +76,21 @@ define void @truncated_neg256(i16 %a, ptr %p) {
7676
; CHECK-T1-LABEL: truncated_neg256:
7777
; CHECK-T1: @ %bb.0:
7878
; CHECK-T1-NEXT: movs r2, #255
79-
; CHECK-T1-NEXT: bics r0, r2
80-
; CHECK-T1-NEXT: strh r0, [r1]
79+
; CHECK-T1-NEXT: lsls r2, r2, #8
80+
; CHECK-T1-NEXT: ands r2, r0
81+
; CHECK-T1-NEXT: strh r2, [r1]
8182
; CHECK-T1-NEXT: bx lr
8283
;
8384
; CHECK-T2-LABEL: truncated_neg256:
8485
; CHECK-T2: @ %bb.0:
85-
; CHECK-T2-NEXT: bic r0, r0, #255
86+
; CHECK-T2-NEXT: and r0, r0, #65280
8687
; CHECK-T2-NEXT: strh r0, [r1]
8788
; CHECK-T2-NEXT: bx lr
8889
%and = and i16 %a, -256
8990
store i16 %and, ptr %p
9091
ret void
9192
}
9293

93-
; FIXME: Thumb2 supports "bic r0, r0, #510"
9494
define void @truncated_neg511(i16 %a, ptr %p) {
9595
; CHECK-T1-LABEL: truncated_neg511:
9696
; CHECK-T1: @ %bb.0:
@@ -105,8 +105,7 @@ define void @truncated_neg511(i16 %a, ptr %p) {
105105
;
106106
; CHECK-T2-LABEL: truncated_neg511:
107107
; CHECK-T2: @ %bb.0:
108-
; CHECK-T2-NEXT: movw r2, #65025
109-
; CHECK-T2-NEXT: ands r0, r2
108+
; CHECK-T2-NEXT: bic r0, r0, #510
110109
; CHECK-T2-NEXT: strh r0, [r1]
111110
; CHECK-T2-NEXT: bx lr
112111
%and = and i16 %a, -511

0 commit comments

Comments
 (0)