Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions llvm/lib/Target/ARM/ARMISelLowering.h
Original file line number Diff line number Diff line change
Expand Up @@ -641,8 +641,9 @@ class VectorType;

bool shouldFormOverflowOp(unsigned Opcode, EVT VT,
bool MathUsed) const override {
// Using overflow ops for overflow checks only should beneficial on ARM.
return TargetLowering::shouldFormOverflowOp(Opcode, VT, true);
if (VT.isVector())
return false;
return !isOperationExpand(Opcode, VT);
}

bool shouldReassociateReduction(unsigned Opc, EVT VT) const override {
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/CodeGen/ARM/atomicrmw-uinc-udec-wrap.ll
Original file line number Diff line number Diff line change
Expand Up @@ -147,11 +147,11 @@ define i32 @atomicrmw_udec_wrap_i32(ptr %ptr, i32 %val) {
; CHECK-NEXT: .LBB6_1: @ %atomicrmw.start
; CHECK-NEXT: @ =>This Inner Loop Header: Depth=1
; CHECK-NEXT: ldrex r12, [r0]
; CHECK-NEXT: mov r3, r1
; CHECK-NEXT: cmp r12, r1
; CHECK-NEXT: subls r3, r12, #1
; CHECK-NEXT: cmp r12, #0
; CHECK-NEXT: moveq r3, r1
; CHECK-NEXT: sub r3, r12, #1
; CHECK-NEXT: movhi r3, r1
; CHECK-NEXT: cmp r12, #1
; CHECK-NEXT: movlo r3, r1
; CHECK-NEXT: strex r2, r3, [r0]
; CHECK-NEXT: cmp r2, #0
; CHECK-NEXT: bne .LBB6_1
Expand Down
47 changes: 18 additions & 29 deletions llvm/test/CodeGen/ARM/select_const.ll
Original file line number Diff line number Diff line change
Expand Up @@ -763,46 +763,35 @@ define i64 @opaque_constant2(i1 %cond, i64 %x) {
define i64 @func(i64 %arg) {
; ARM-LABEL: func:
; ARM: @ %bb.0: @ %entry
; ARM-NEXT: adds r0, r0, #1
; ARM-NEXT: mov r2, #0
; ARM-NEXT: adcs r0, r1, #0
; ARM-NEXT: and r0, r0, r1
; ARM-NEXT: mov r1, #0
; ARM-NEXT: adcs r0, r2, #0
; ARM-NEXT: movne r0, #8
; ARM-NEXT: cmn r0, #1
; ARM-NEXT: mov r0, #0
; ARM-NEXT: moveq r0, #8
; ARM-NEXT: mov pc, lr
;
; THUMB2-LABEL: func:
; THUMB2: @ %bb.0: @ %entry
; THUMB2-NEXT: ands r0, r1
; THUMB2-NEXT: movs r1, #0
; THUMB2-NEXT: adds r0, #1
; THUMB2-NEXT: mov.w r2, #0
; THUMB2-NEXT: adcs r0, r1, #0
; THUMB2-NEXT: mov.w r1, #0
; THUMB2-NEXT: adcs r0, r2, #0
; THUMB2-NEXT: it ne
; THUMB2-NEXT: movne r0, #8
; THUMB2-NEXT: mov.w r0, #0
; THUMB2-NEXT: it eq
; THUMB2-NEXT: moveq r0, #8
; THUMB2-NEXT: bx lr
;
; THUMB-LABEL: func:
; THUMB: @ %bb.0: @ %entry
; THUMB-NEXT: .save {r4, lr}
; THUMB-NEXT: push {r4, lr}
; THUMB-NEXT: movs r2, #0
; THUMB-NEXT: adds r3, r0, #1
; THUMB-NEXT: mov r12, r1
; THUMB-NEXT: mov r3, r12
; THUMB-NEXT: adcs r3, r2
; THUMB-NEXT: mov r12, r2
; THUMB-NEXT: mov r3, r12
; THUMB-NEXT: adcs r3, r2
; THUMB-NEXT: subs r4, r3, #1
; THUMB-NEXT: ands r0, r1
; THUMB-NEXT: movs r1, #0
; THUMB-NEXT: adds r0, r0, #1
; THUMB-NEXT: adcs r1, r2
; THUMB-NEXT: sbcs r3, r4
; THUMB-NEXT: lsls r0, r3, #3
; THUMB-NEXT: movs r1, r2
; THUMB-NEXT: pop {r4}
; THUMB-NEXT: pop {r2}
; THUMB-NEXT: bx r2
; THUMB-NEXT: beq .LBB26_2
; THUMB-NEXT: @ %bb.1: @ %entry
; THUMB-NEXT: movs r0, r1
; THUMB-NEXT: bx lr
; THUMB-NEXT: .LBB26_2:
; THUMB-NEXT: movs r0, #8
; THUMB-NEXT: bx lr
entry:
%0 = add i64 %arg, 1
%1 = icmp ult i64 %0, 1
Expand Down
33 changes: 13 additions & 20 deletions llvm/test/CodeGen/Thumb/scheduler-clone-cpsr-def.ll
Original file line number Diff line number Diff line change
Expand Up @@ -11,27 +11,20 @@
define i64 @f(i64 %x2, i32 %z) {
; CHECK-LABEL: f:
; CHECK: @ %bb.0:
; CHECK-NEXT: .save {r4, r5, r7, lr}
; CHECK-NEXT: push {r4, r5, r7, lr}
; CHECK-NEXT: movs r2, #0
; CHECK-NEXT: subs r3, r0, #1
; CHECK-NEXT: mov r3, r1
; CHECK-NEXT: sbcs r3, r2
; CHECK-NEXT: mov r3, r2
; CHECK-NEXT: .save {r4, lr}
; CHECK-NEXT: push {r4, lr}
; CHECK-NEXT: mov r2, r0
; CHECK-NEXT: orrs r2, r1
; CHECK-NEXT: rsbs r3, r2, #0
; CHECK-NEXT: adcs r3, r2
; CHECK-NEXT: movs r4, #30
; CHECK-NEXT: subs r5, r0, #1
; CHECK-NEXT: mov r5, r1
; CHECK-NEXT: sbcs r5, r2
; CHECK-NEXT: adcs r4, r2
; CHECK-NEXT: lsls r2, r1, #1
; CHECK-NEXT: lsls r2, r4
; CHECK-NEXT: movs r4, #1
; CHECK-NEXT: eors r4, r3
; CHECK-NEXT: lsrs r0, r4
; CHECK-NEXT: orrs r0, r2
; CHECK-NEXT: lsrs r1, r4
; CHECK-NEXT: pop {r4, r5, r7, pc}
; CHECK-NEXT: lsrs r0, r3
; CHECK-NEXT: movs r2, #31
; CHECK-NEXT: eors r2, r3
; CHECK-NEXT: lsls r4, r1, #1
; CHECK-NEXT: lsls r4, r2
; CHECK-NEXT: orrs r0, r4
; CHECK-NEXT: lsrs r1, r3
; CHECK-NEXT: pop {r4, pc}
%x3 = add nsw i64 %x2, -1
%x8 = icmp ne i64 %x2, 0
%x9 = xor i1 %x8, true
Expand Down