summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Hexagon
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-06-13 16:21:57 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2017-06-13 16:21:57 +0000
commitc83c267b84c2f9986fa67cd62e738da7d9a76137 (patch)
tree2a2855fe85790afdf4f40650b65164923421cec1 /llvm/lib/Target/Hexagon
parent7e9d2cb553fc7344d37b9659a40a38cb2a3d66b1 (diff)
downloadbcm5719-llvm-c83c267b84c2f9986fa67cd62e738da7d9a76137.tar.gz
bcm5719-llvm-c83c267b84c2f9986fa67cd62e738da7d9a76137.zip
[Hexagon] Generate multiply-high instruction in isel
llvm-svn: 305302
Diffstat (limited to 'llvm/lib/Target/Hexagon')
-rw-r--r--llvm/lib/Target/Hexagon/HexagonPatterns.td5
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Target/Hexagon/HexagonPatterns.td b/llvm/lib/Target/Hexagon/HexagonPatterns.td
index f269b74fc44..a8c5658337b 100644
--- a/llvm/lib/Target/Hexagon/HexagonPatterns.td
+++ b/llvm/lib/Target/Hexagon/HexagonPatterns.td
@@ -401,6 +401,11 @@ def Aext64: PatFrag<(ops node:$Rs), (i64 (anyext node:$Rs))>;
def Zext64: PatFrag<(ops node:$Rs), (i64 (zext node:$Rs))>;
def Sext64: PatLeaf<(i64 Usxtw:$Rs)>;
+def: Pat<(i32 (trunc (sra (mul Sext64:$Rs, Sext64:$Rt), (i32 32)))),
+ (M2_mpy_up (LoReg Sext64:$Rs), (LoReg Sext64:$Rt))>;
+def: Pat<(i32 (trunc (srl (mul Sext64:$Rs, Sext64:$Rt), (i32 32)))),
+ (M2_mpy_up (LoReg Sext64:$Rs), (LoReg Sext64:$Rt))>;
+
def: Pat<(mul (Aext64 I32:$Rs), (Aext64 I32:$Rt)),
(M2_dpmpyuu_s0 I32:$Rs, I32:$Rt)>;
OpenPOWER on IntegriCloud