From 3d78271eacf88f9ceed2bab446942077c868aeb5 Mon Sep 17 00:00:00 2001 From: Renato Golin Date: Thu, 3 Mar 2016 08:57:44 +0000 Subject: [PATCH] Revert "[ARM] Merging 64-bit divmod lib calls into one" This reverts commit r262507, which broke some ARM buildbots. llvm-svn: 262594 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp | 3 +-- llvm/lib/Target/ARM/ARMISelLowering.cpp | 9 --------- llvm/test/CodeGen/ARM/divmod-eabi.ll | 4 +--- 3 files changed, 2 insertions(+), 14 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp index a81cb664584c..216389ac42a6 100644 --- a/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp @@ -2153,9 +2153,8 @@ SDValue DAGCombiner::useDivRem(SDNode *Node) { if (Node->use_empty()) return SDValue(); // This is a dead node, leave it alone. - // DivMod lib calls can still work on non-legal types if using lib-calls. EVT VT = Node->getValueType(0); - if (VT.isVector() || !VT.isInteger()) + if (!TLI.isTypeLegal(VT)) return SDValue(); unsigned Opcode = Node->getOpcode(); diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index a0bf91794275..479b6d29be9d 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -809,8 +809,6 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM, setOperationAction(ISD::SDIVREM, MVT::i32, Custom); setOperationAction(ISD::UDIVREM, MVT::i32, Custom); - setOperationAction(ISD::SDIVREM, MVT::i64, Custom); - setOperationAction(ISD::UDIVREM, MVT::i64, Custom); } else { setOperationAction(ISD::SDIVREM, MVT::i32, Expand); setOperationAction(ISD::UDIVREM, MVT::i32, Expand); @@ -7056,13 +7054,6 @@ void ARMTargetLowering::ReplaceNodeResults(SDNode *N, case ISD::UREM: Res = LowerREM(N, DAG); break; - case ISD::SDIVREM: - case ISD::UDIVREM: - Res = LowerDivRem(SDValue(N, 0), DAG); - assert(Res.getNumOperands() == 2 && "DivRem needs two values"); - Results.push_back(Res.getValue(0)); - Results.push_back(Res.getValue(1)); - return; case ISD::READCYCLECOUNTER: ReplaceREADCYCLECOUNTER(N, Results, DAG, Subtarget); return; diff --git a/llvm/test/CodeGen/ARM/divmod-eabi.ll b/llvm/test/CodeGen/ARM/divmod-eabi.ll index 29c7fe0ff86f..35f2014317b7 100644 --- a/llvm/test/CodeGen/ARM/divmod-eabi.ll +++ b/llvm/test/CodeGen/ARM/divmod-eabi.ll @@ -79,6 +79,7 @@ entry: ret i32 %add2 } +; FIXME: AEABI is not lowering long u/srem into u/ldivmod define i64 @longf(i64 %a, i64 %b) { ; EABI-LABEL: longf: ; DARWIN-LABEL: longf: @@ -86,9 +87,6 @@ entry: %div = sdiv i64 %a, %b %rem = srem i64 %a, %b ; EABI: __aeabi_ldivmod -; EABI-NEXT: adds r0 -; EABI-NEXT: adc r1 -; EABI-NOT: __aeabi_ldivmod ; DARWIN: ___divdi3 ; DARWIN: mov [[div1:r[0-9]+]], r0 ; DARWIN: mov [[div2:r[0-9]+]], r1