summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-10-23 19:07:50 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-10-23 19:07:50 +0000
commit273678823b84faaaa7c9a7199f1a677d20748302 (patch)
tree67f12a8804501a143b3668e45ca776020fd8bc58
parent4525c824280a112c7772361669a6463e36fd8c4f (diff)
downloadbcm5719-llvm-273678823b84faaaa7c9a7199f1a677d20748302.tar.gz
bcm5719-llvm-273678823b84faaaa7c9a7199f1a677d20748302.zip
[Hexagon] Add extra pattern for S4_addaddi
One combination was missing: add(add(x,y),c). llvm-svn: 316363
-rw-r--r--llvm/lib/Target/Hexagon/HexagonPatterns.td2
-rw-r--r--llvm/test/CodeGen/Hexagon/addaddi.ll13
2 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonPatterns.td b/llvm/lib/Target/Hexagon/HexagonPatterns.td
index 89be3bd5d04..908355700ec 100644
--- a/llvm/lib/Target/Hexagon/HexagonPatterns.td
+++ b/llvm/lib/Target/Hexagon/HexagonPatterns.td
@@ -1310,6 +1310,8 @@ def: AccRRR_pat<M4_xor_andn, Xor, Su<Not2<And>>, I32, I32>;
let AddedComplexity = 30 in {
def: Pat<(add I32:$Rs, (Su<Add> I32:$Ru, anyimm:$s6)),
(S4_addaddi IntRegs:$Rs, IntRegs:$Ru, imm:$s6)>;
+ def: Pat<(add anyimm:$s6, (Su<Add> I32:$Rs, I32:$Ru)),
+ (S4_addaddi IntRegs:$Rs, IntRegs:$Ru, imm:$s6)>;
def: Pat<(add I32:$Rs, (Su<Sub> anyimm:$s6, I32:$Ru)),
(S4_subaddi IntRegs:$Rs, imm:$s6, IntRegs:$Ru)>;
def: Pat<(sub (Su<Add> I32:$Rs, anyimm:$s6), I32:$Ru),
diff --git a/llvm/test/CodeGen/Hexagon/addaddi.ll b/llvm/test/CodeGen/Hexagon/addaddi.ll
new file mode 100644
index 00000000000..6510858f1bd
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/addaddi.ll
@@ -0,0 +1,13 @@
+; RUN: llc -march=hexagon < %s | FileCheck %s
+; Check for S4_addaddi:
+; CHECK: r{{[0-9]+}} = add(r{{[0-9]+}},add(r{{[0-9]+}},#2))
+
+define i32 @fred(i32 %a0, i32 %a1, i32* nocapture %a2) #0 {
+b3:
+ %v4 = add nsw i32 %a0, 2
+ %v5 = add nsw i32 %v4, %a1
+ store i32 %v5, i32* %a2, align 4
+ ret i32 undef
+}
+
+attributes #0 = { nounwind }
OpenPOWER on IntegriCloud