AArch64: don't try to handle [SU]MUL_LOHI nodes
authorTim Northover <tnorthover@apple.com>
Tue, 14 Jan 2014 22:53:22 +0000 (22:53 +0000)
committerTim Northover <tnorthover@apple.com>
Tue, 14 Jan 2014 22:53:22 +0000 (22:53 +0000)
We should set them to expand for now since there are no patterns
dealing with them. Actually, there are no instructions either so I
doubt they'll ever be acceptable.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199265 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AArch64ISelLowering.cpp
test/CodeGen/AArch64/mul-lohi.ll [new file with mode: 0644]

index e443bd5e55bf14a3f1001a37a92475326529dae1..30378457620e37f13deece118ea1e3f624b9e916 100644 (file)
@@ -151,6 +151,11 @@ AArch64TargetLowering::AArch64TargetLowering(AArch64TargetMachine &TM)
   setOperationAction(ISD::SDIVREM, MVT::i32, Expand);
   setOperationAction(ISD::SDIVREM, MVT::i64, Expand);
 
+  setOperationAction(ISD::SMUL_LOHI, MVT::i32, Expand);
+  setOperationAction(ISD::SMUL_LOHI, MVT::i64, Expand);
+  setOperationAction(ISD::UMUL_LOHI, MVT::i32, Expand);
+  setOperationAction(ISD::UMUL_LOHI, MVT::i64, Expand);
+
   setOperationAction(ISD::CTPOP, MVT::i32, Expand);
   setOperationAction(ISD::CTPOP, MVT::i64, Expand);
 
diff --git a/test/CodeGen/AArch64/mul-lohi.ll b/test/CodeGen/AArch64/mul-lohi.ll
new file mode 100644 (file)
index 0000000..641a02a
--- /dev/null
@@ -0,0 +1,12 @@
+; RUN: llc -mtriple=aarch64-linux-gnu %s -o - | FileCheck %s
+
+define i128 @test_128bitmul(i128 %lhs, i128 %rhs) {
+; CHECK: test_128bitmul:
+; CHECK-DAG: umulh [[CARRY:x[0-9]+]], x0, x2
+; CHECK-DAG: madd [[PART1:x[0-9]+]], x0, x3, [[CARRY]]
+; CHECK: madd x1, x1, x2, [[PART1]]
+; CHECK: mul x0, x0, x2
+
+  %prod = mul i128 %lhs, %rhs
+  ret i128 %prod
+}