diff options
author | David Green <david.green@arm.com> | 2019-10-21 14:06:49 +0000 |
---|---|---|
committer | David Green <david.green@arm.com> | 2019-10-21 14:06:49 +0000 |
commit | 8c479efe736fe2731ba5f9c76c0d6ef72758fbad (patch) | |
tree | ca762cf9057e9f78faf1acd6ed6b0e80e3dccc31 | |
parent | 471eaccd514a164b7be7c73be3b3f44f7f77ac70 (diff) | |
download | llvm-8c479efe736fe2731ba5f9c76c0d6ef72758fbad.tar.gz |
[ARM] Extra qdadd patterns
This adds some new qdadd patterns to go along with the other recently added
qadd's.
Differential Revision: https://reviews.llvm.org/D68999
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@375414 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/ARM/ARMInstrInfo.td | 4 | ||||
-rw-r--r-- | lib/Target/ARM/ARMInstrThumb2.td | 4 | ||||
-rw-r--r-- | test/CodeGen/ARM/qdadd.ll | 18 |
3 files changed, 14 insertions, 12 deletions
diff --git a/lib/Target/ARM/ARMInstrInfo.td b/lib/Target/ARM/ARMInstrInfo.td index 43c33722076..fe696222ec7 100644 --- a/lib/Target/ARM/ARMInstrInfo.td +++ b/lib/Target/ARM/ARMInstrInfo.td @@ -3759,6 +3759,10 @@ def : ARMV5TEPat<(saddsat GPR:$a, GPR:$b), (QADD GPR:$a, GPR:$b)>; def : ARMV5TEPat<(ssubsat GPR:$a, GPR:$b), (QSUB GPR:$a, GPR:$b)>; +def : ARMV5TEPat<(saddsat(saddsat rGPR:$Rm, rGPR:$Rm), rGPR:$Rn), + (QDADD rGPR:$Rm, rGPR:$Rn)>; +def : ARMV5TEPat<(ssubsat rGPR:$Rm, (saddsat rGPR:$Rn, rGPR:$Rn)), + (QDSUB rGPR:$Rm, rGPR:$Rn)>; def : ARMV6Pat<(ARMqadd8b rGPR:$Rm, rGPR:$Rn), (QADD8 rGPR:$Rm, rGPR:$Rn)>; def : ARMV6Pat<(ARMqsub8b rGPR:$Rm, rGPR:$Rn), diff --git a/lib/Target/ARM/ARMInstrThumb2.td b/lib/Target/ARM/ARMInstrThumb2.td index 7d265419d79..25a45b39fa0 100644 --- a/lib/Target/ARM/ARMInstrThumb2.td +++ b/lib/Target/ARM/ARMInstrThumb2.td @@ -2399,6 +2399,10 @@ def : Thumb2DSPPat<(saddsat rGPR:$Rm, rGPR:$Rn), (t2QADD rGPR:$Rm, rGPR:$Rn)>; def : Thumb2DSPPat<(ssubsat rGPR:$Rm, rGPR:$Rn), (t2QSUB rGPR:$Rm, rGPR:$Rn)>; +def : Thumb2DSPPat<(saddsat(saddsat rGPR:$Rm, rGPR:$Rm), rGPR:$Rn), + (t2QDADD rGPR:$Rm, rGPR:$Rn)>; +def : Thumb2DSPPat<(ssubsat rGPR:$Rm, (saddsat rGPR:$Rn, rGPR:$Rn)), + (t2QDSUB rGPR:$Rm, rGPR:$Rn)>; def : Thumb2DSPPat<(ARMqadd8b rGPR:$Rm, rGPR:$Rn), (t2QADD8 rGPR:$Rm, rGPR:$Rn)>; def : Thumb2DSPPat<(ARMqsub8b rGPR:$Rm, rGPR:$Rn), diff --git a/test/CodeGen/ARM/qdadd.ll b/test/CodeGen/ARM/qdadd.ll index 4973110f9ee..94442ca93af 100644 --- a/test/CodeGen/ARM/qdadd.ll +++ b/test/CodeGen/ARM/qdadd.ll @@ -36,14 +36,12 @@ define i32 @qdadd(i32 %x, i32 %y) nounwind { ; ; CHECK-T2DSP-LABEL: qdadd: ; CHECK-T2DSP: @ %bb.0: -; CHECK-T2DSP-NEXT: qadd r0, r0, r0 -; CHECK-T2DSP-NEXT: qadd r0, r0, r1 +; CHECK-T2DSP-NEXT: qdadd r0, r0, r1 ; CHECK-T2DSP-NEXT: bx lr ; ; CHECK-ARM-LABEL: qdadd: ; CHECK-ARM: @ %bb.0: -; CHECK-ARM-NEXT: qadd r0, r0, r0 -; CHECK-ARM-NEXT: qadd r0, r0, r1 +; CHECK-ARM-NEXT: qdadd r0, r0, r1 ; CHECK-ARM-NEXT: bx lr %z = call i32 @llvm.sadd.sat.i32(i32 %x, i32 %x) %tmp = call i32 @llvm.sadd.sat.i32(i32 %z, i32 %y) @@ -82,14 +80,12 @@ define i32 @qdadd_c(i32 %x, i32 %y) nounwind { ; ; CHECK-T2DSP-LABEL: qdadd_c: ; CHECK-T2DSP: @ %bb.0: -; CHECK-T2DSP-NEXT: qadd r0, r0, r0 -; CHECK-T2DSP-NEXT: qadd r0, r1, r0 +; CHECK-T2DSP-NEXT: qdadd r0, r0, r1 ; CHECK-T2DSP-NEXT: bx lr ; ; CHECK-ARM-LABEL: qdadd_c: ; CHECK-ARM: @ %bb.0: -; CHECK-ARM-NEXT: qadd r0, r0, r0 -; CHECK-ARM-NEXT: qadd r0, r1, r0 +; CHECK-ARM-NEXT: qdadd r0, r0, r1 ; CHECK-ARM-NEXT: bx lr %z = call i32 @llvm.sadd.sat.i32(i32 %x, i32 %x) %tmp = call i32 @llvm.sadd.sat.i32(i32 %y, i32 %z) @@ -128,14 +124,12 @@ define i32 @qdsub(i32 %x, i32 %y) nounwind { ; ; CHECK-T2DSP-LABEL: qdsub: ; CHECK-T2DSP: @ %bb.0: -; CHECK-T2DSP-NEXT: qadd r0, r0, r0 -; CHECK-T2DSP-NEXT: qsub r0, r1, r0 +; CHECK-T2DSP-NEXT: qdsub r0, r1, r0 ; CHECK-T2DSP-NEXT: bx lr ; ; CHECK-ARM-LABEL: qdsub: ; CHECK-ARM: @ %bb.0: -; CHECK-ARM-NEXT: qadd r0, r0, r0 -; CHECK-ARM-NEXT: qsub r0, r1, r0 +; CHECK-ARM-NEXT: qdsub r0, r1, r0 ; CHECK-ARM-NEXT: bx lr %z = call i32 @llvm.sadd.sat.i32(i32 %x, i32 %x) %tmp = call i32 @llvm.ssub.sat.i32(i32 %y, i32 %z) |