diff --git a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp index 9e4dbecc16a87..aa4478fee432a 100644 --- a/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp +++ b/llvm/lib/Target/ARM/ARMBaseInstrInfo.cpp @@ -2790,25 +2790,40 @@ static bool isOptimizeCompareCandidate(MachineInstr *MI, bool &IsThumb1) { [[fallthrough]]; case ARM::RSBrr: case ARM::RSBri: + case ARM::RSBrsi: + case ARM::RSBrsr: case ARM::RSCrr: case ARM::RSCri: + case ARM::RSCrsr: + case ARM::RSCrsi: case ARM::ADDrr: case ARM::ADDri: + case ARM::ADDrsi: + case ARM::ADDrsr: case ARM::ADCrr: case ARM::ADCri: case ARM::SUBrr: case ARM::SUBri: + case ARM::SUBrsr: + case ARM::SUBrsi: case ARM::SBCrr: case ARM::SBCri: + case ARM::SBCrsi: + case ARM::SBCrsr: case ARM::t2RSBri: + case ARM::t2RSBrr: + case ARM::t2RSBrs: case ARM::t2ADDrr: case ARM::t2ADDri: + case ARM::t2ADDrs: case ARM::t2ADCrr: case ARM::t2ADCri: case ARM::t2SUBrr: case ARM::t2SUBri: + case ARM::t2SUBrs: case ARM::t2SBCrr: case ARM::t2SBCri: + case ARM::t2SBCrs: case ARM::ANDrr: case ARM::ANDri: case ARM::ANDrsr: diff --git a/llvm/test/CodeGen/ARM/peephole-rsb.ll b/llvm/test/CodeGen/ARM/peephole-rsb.ll new file mode 100644 index 0000000000000..91ba40e16761a --- /dev/null +++ b/llvm/test/CodeGen/ARM/peephole-rsb.ll @@ -0,0 +1,19 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc < %s -mtriple=arm-eabi -mattr=+v4t -verify-machineinstrs | FileCheck %s + +define i8 @abd_ext_i8_i8(i8 %a, i8 %b) nounwind { +; CHECK-LABEL: abd_ext_i8_i8: +; CHECK: @ %bb.0: +; CHECK-NEXT: lsl r0, r0, #24 +; CHECK-NEXT: lsl r1, r1, #24 +; CHECK-NEXT: asr r0, r0, #24 +; CHECK-NEXT: subs r0, r0, r1, asr #24 +; CHECK-NEXT: rsbmi r0, r0, #0 +; CHECK-NEXT: bx lr + %aext = sext i8 %a to i64 + %bext = sext i8 %b to i64 + %sub = sub i64 %aext, %bext + %abs = call i64 @llvm.abs.i64(i64 %sub, i1 false) + %trunc = trunc i64 %abs to i8 + ret i8 %trunc +}