]> granicus.if.org Git - llvm/commitdiff
[PowerPC] Fix the bug of ISD::ADDE to set its second return type to glue
authorKang Zhang <shkzhang@cn.ibm.com>
Tue, 25 Dec 2018 03:29:51 +0000 (03:29 +0000)
committerKang Zhang <shkzhang@cn.ibm.com>
Tue, 25 Dec 2018 03:29:51 +0000 (03:29 +0000)
Summary:
This patch is to fix the bug imported by rL341634.
In above submit , the the return type of ISD::ADDE is
14224: SDVTList VTs = DAG.getVTList(MVT::i64, MVT::i64),
but in fact, the second return type of ISD::ADDE should be
MVT::Glue not MVT::i64.

Reviewed By: hfinkel

Differential Revision: https://reviews.llvm.org/D55977

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

lib/Target/PowerPC/PPCISelLowering.cpp
test/CodeGen/PowerPC/adde_return_type.ll [new file with mode: 0644]

index a1c2e2f74ee417621fd28b8f583cd00889790a3a..fed73639ce6e9a506e8c7c4fa0b766a39a39cd9d 100644 (file)
@@ -14389,7 +14389,7 @@ static SDValue combineADDToADDZE(SDNode *N, SelectionDAG &DAG,
     return SDValue();
 
   SDLoc DL(N);
-  SDVTList VTs = DAG.getVTList(MVT::i64, MVT::i64);
+  SDVTList VTs = DAG.getVTList(MVT::i64, MVT::Glue);
   SDValue Cmp = RHS.getOperand(0);
   SDValue Z = Cmp.getOperand(0);
   auto *Constant = dyn_cast<ConstantSDNode>(Cmp.getOperand(1));
diff --git a/test/CodeGen/PowerPC/adde_return_type.ll b/test/CodeGen/PowerPC/adde_return_type.ll
new file mode 100644 (file)
index 0000000..7ce1107
--- /dev/null
@@ -0,0 +1,11 @@
+; REQUIRES: asserts
+; RUN: llc -mtriple=powerpc64le-unknown-unknown -debug-only=legalize-types \
+; RUN:   < %s -o /dev/null 2>&1 | FileCheck %s
+
+define i64 @testAddeReturnType(i64 %X, i64 %Z) {
+; CHECK: Legally typed node: {{.*}}: i64,glue = adde {{.*}} 
+  %cmp = icmp ne i64 %Z, 0
+  %conv1 = zext i1 %cmp to i64
+  %add = add nsw i64 %conv1, %X
+  ret i64 %add
+}