From: James Molloy Date: Mon, 13 Feb 2017 17:18:00 +0000 (+0000) Subject: [ARM] Fix crash caused by r294945 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eef9539b00ea0c23ac01e51f9c9c0eab0c324d9e;p=llvm [ARM] Fix crash caused by r294945 I'd missed a creator of FCMP nodes - duplicateCmp(). Kindly and promptly reported by Gabor Ballabas, due to his CSiBE test suite. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@294968 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/ARM/ARMISelLowering.cpp b/lib/Target/ARM/ARMISelLowering.cpp index f85149bb1f6..4af346087aa 100644 --- a/lib/Target/ARM/ARMISelLowering.cpp +++ b/lib/Target/ARM/ARMISelLowering.cpp @@ -3812,10 +3812,12 @@ ARMTargetLowering::duplicateCmp(SDValue Cmp, SelectionDAG &DAG) const { Cmp = Cmp.getOperand(0); Opc = Cmp.getOpcode(); if (Opc == ARMISD::CMPFP) - Cmp = DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0),Cmp.getOperand(1)); + Cmp = DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0), + Cmp.getOperand(1), Cmp.getOperand(2)); else { assert(Opc == ARMISD::CMPFPw0 && "unexpected operand of FMSTAT"); - Cmp = DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0)); + Cmp = DAG.getNode(Opc, DL, MVT::Glue, Cmp.getOperand(0), + Cmp.getOperand(1)); } return DAG.getNode(ARMISD::FMSTAT, DL, MVT::Glue, Cmp); } diff --git a/test/CodeGen/ARM/vcmp-crash.ll b/test/CodeGen/ARM/vcmp-crash.ll new file mode 100644 index 00000000000..2d3262be584 --- /dev/null +++ b/test/CodeGen/ARM/vcmp-crash.ll @@ -0,0 +1,11 @@ +; RUN: llc -mcpu=cortex-m4 < %s | FileCheck %s + +target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64" +target triple = "thumbv7em-none--eabi" + +; CHECK: vcmp.f32 +define double @f(double %a, double %b, double %c, float %d) { + %1 = fcmp oeq float %d, 0.0 + %2 = select i1 %1, double %a, double %c + ret double %2 +}