[PATCH] D60089: [ARM] Don't replicate instructions in Ifcvt at minsize
Dave Green via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 1 12:16:18 PDT 2019
dmgreen created this revision.
dmgreen added reviewers: samparker, efriedma, olista01.
Herald added subscribers: hiraditya, kristof.beyls, javed.absar.
Herald added a project: LLVM.
Ifcvt can replicate instructions as it converts them to be predicated. This stops that from happening at minsize.
Test is new, just showing the differences here for clarity.
https://reviews.llvm.org/D60089
Files:
llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
llvm/test/CodeGen/Thumb2/ifcvt-minsize.ll
Index: llvm/test/CodeGen/Thumb2/ifcvt-minsize.ll
===================================================================
--- llvm/test/CodeGen/Thumb2/ifcvt-minsize.ll
+++ llvm/test/CodeGen/Thumb2/ifcvt-minsize.ll
@@ -11,9 +11,10 @@
; CHECK-NEXT: mov r4, r0
; CHECK-NEXT: bl fn
; CHECK-NEXT: movs r0, #0
-; CHECK-NEXT: cmp r4, #0
-; CHECK-NEXT: it ne
-; CHECK-NEXT: popne {r4, pc}
+; CHECK-NEXT: cbz r4, .LBB0_2
+; CHECK-NEXT: @ %bb.1: @ %return
+; CHECK-NEXT: pop {r4, pc}
+; CHECK-NEXT: .LBB0_2: @ %if.end
; CHECK-NEXT: bl fn
; CHECK-NEXT: adds r0, #1
; CHECK-NEXT: pop {r4, pc}
@@ -36,13 +37,14 @@
; CHECK-LABEL: f2:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: cmp r0, #1
-; CHECK-NEXT: it ne
-; CHECK-NEXT: bxne lr
+; CHECK-NEXT: bne .LBB1_2
+; CHECK-NEXT: @ %bb.1: @ %t
; CHECK-NEXT: .save {r7, lr}
; CHECK-NEXT: push {r7, lr}
; CHECK-NEXT: movs r0, #0
; CHECK-NEXT: bl fn
; CHECK-NEXT: pop.w {r7, lr}
+; CHECK-NEXT: .LBB1_2: @ %f
; CHECK-NEXT: bx lr
entry:
%p = icmp eq i32 %x, 1
Index: llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
===================================================================
--- llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
+++ llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp
@@ -1933,6 +1933,12 @@
if (!TCycles)
return false;
+ // Try not to replicate instructions at minsize
+ if (TBB.getParent()->getFunction().optForMinSize()) {
+ if (TBB.pred_size() != 1 || FBB.pred_size() != 1)
+ return false;
+ }
+
// Attempt to estimate the relative costs of predication versus branching.
// Here we scale up each component of UnpredCost to avoid precision issue when
// scaling TCycles/FCycles by Probability.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60089.193148.patch
Type: text/x-patch
Size: 1734 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190401/d7dc7a0e/attachment.bin>
More information about the llvm-commits
mailing list