summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/Hexagon
diff options
context:
space:
mode:
authorKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-06-01 14:00:32 +0000
committerKrzysztof Parzyszek <kparzysz@codeaurora.org>2018-06-01 14:00:32 +0000
commit0b6187c1a9526a2601bae31248eaaa7ec54987a8 (patch)
treece9e5c98cb33c784e5a39b3d3f58b552ecb31ae2 /llvm/test/CodeGen/Hexagon
parentb34afcec5ddf9f0fa4ac62468900a2866e644aea (diff)
downloadbcm5719-llvm-0b6187c1a9526a2601bae31248eaaa7ec54987a8.tar.gz
bcm5719-llvm-0b6187c1a9526a2601bae31248eaaa7ec54987a8.zip
[SelectionDAG] Expand UADDO/USUBO into ADD/SUBCARRY if legal for target
Additionally, implement handling of ADD/SUBCARRY on Hexagon, utilizing the UADDO/USUBO expansion. Differential Revision: https://reviews.llvm.org/D47559 llvm-svn: 333751
Diffstat (limited to 'llvm/test/CodeGen/Hexagon')
-rw-r--r--llvm/test/CodeGen/Hexagon/adde.ll27
-rw-r--r--llvm/test/CodeGen/Hexagon/addsubcarry.ll25
-rw-r--r--llvm/test/CodeGen/Hexagon/sube.ll26
3 files changed, 25 insertions, 53 deletions
diff --git a/llvm/test/CodeGen/Hexagon/adde.ll b/llvm/test/CodeGen/Hexagon/adde.ll
deleted file mode 100644
index 12913eea7e8..00000000000
--- a/llvm/test/CodeGen/Hexagon/adde.ll
+++ /dev/null
@@ -1,27 +0,0 @@
-; RUN: llc -march=hexagon -hexagon-expand-condsets=0 < %s | FileCheck %s
-
-; CHECK-DAG: r{{[0-9]+:[0-9]+}} = add(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: r{{[0-9]+:[0-9]+}} = add(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: p{{[0-9]+}} = cmp.gtu(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: p{{[0-9]+}} = cmp.gtu(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}})
-; CHECK-DAG: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}})
-
-define void @check_adde_addc(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64* %a4, i64* %a5) {
-b6:
- %v7 = zext i64 %a0 to i128
- %v8 = zext i64 %a1 to i128
- %v9 = shl i128 %v8, 64
- %v10 = or i128 %v7, %v9
- %v11 = zext i64 %a2 to i128
- %v12 = zext i64 %a3 to i128
- %v13 = shl i128 %v12, 64
- %v14 = or i128 %v11, %v13
- %v15 = add i128 %v10, %v14
- %v16 = lshr i128 %v15, 64
- %v17 = trunc i128 %v15 to i64
- %v18 = trunc i128 %v16 to i64
- store i64 %v17, i64* %a4
- store i64 %v18, i64* %a5
- ret void
-}
diff --git a/llvm/test/CodeGen/Hexagon/addsubcarry.ll b/llvm/test/CodeGen/Hexagon/addsubcarry.ll
new file mode 100644
index 00000000000..b5e981c52f5
--- /dev/null
+++ b/llvm/test/CodeGen/Hexagon/addsubcarry.ll
@@ -0,0 +1,25 @@
+; RUN: llc -march=hexagon < %s | FileCheck %s
+
+@g = global i128 zeroinitializer, align 8
+
+; CHECK-LABEL: addc:
+; CHECK: p[[P0:[0-3]]] = and(p[[P1:[0-9]]],!p[[P1]])
+; CHECK: add({{.*}},{{.*}},p[[P0]]):carry
+; CHECK: add({{.*}},{{.*}},p[[P0]]):carry
+define void @addc(i128 %a0, i128 %a1) #0 {
+ %v0 = add i128 %a0, %a1
+ store i128 %v0, i128* @g, align 8
+ ret void
+}
+
+; CHECK-LABEL: subc:
+; CHECK: p[[P0:[0-3]]] = or(p[[P1:[0-9]]],!p[[P1]])
+; CHECK: sub({{.*}},{{.*}},p[[P0]]):carry
+; CHECK: sub({{.*}},{{.*}},p[[P0]]):carry
+define void @subc(i128 %a0, i128 %a1) #0 {
+ %v0 = sub i128 %a0, %a1
+ store i128 %v0, i128* @g, align 8
+ ret void
+}
+
+
diff --git a/llvm/test/CodeGen/Hexagon/sube.ll b/llvm/test/CodeGen/Hexagon/sube.ll
deleted file mode 100644
index 2b09a998eff..00000000000
--- a/llvm/test/CodeGen/Hexagon/sube.ll
+++ /dev/null
@@ -1,26 +0,0 @@
-; RUN: llc -march=hexagon -hexagon-expand-condsets=0 < %s | FileCheck %s
-
-; CHECK-DAG: r{{[0-9]+:[0-9]+}} = sub(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: r{{[0-9]+:[0-9]+}} = sub(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: p{{[0-9]+}} = cmp.gtu(r{{[0-9]+:[0-9]+}},r{{[0-9]+:[0-9]+}})
-; CHECK-DAG: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}})
-; CHECK-DAG: r{{[0-9]+}} = mux(p{{[0-9]+}},r{{[0-9]+}},r{{[0-9]+}})
-
-define void @check_sube_subc(i64 %a0, i64 %a1, i64 %a2, i64 %a3, i64* %a4, i64* %a5) {
-b6:
- %v7 = zext i64 %a0 to i128
- %v8 = zext i64 %a1 to i128
- %v9 = shl i128 %v8, 64
- %v10 = or i128 %v7, %v9
- %v11 = zext i64 %a2 to i128
- %v12 = zext i64 %a3 to i128
- %v13 = shl i128 %v12, 64
- %v14 = or i128 %v11, %v13
- %v15 = sub i128 %v10, %v14
- %v16 = lshr i128 %v15, 64
- %v17 = trunc i128 %v15 to i64
- %v18 = trunc i128 %v16 to i64
- store i64 %v17, i64* %a4
- store i64 %v18, i64* %a5
- ret void
-}
OpenPOWER on IntegriCloud