From a392cd2fde4d0a84bc5871f63b545867e3257d56 Mon Sep 17 00:00:00 2001 From: Lauro Ramos Venancio Date: Wed, 15 Aug 2007 22:13:27 +0000 Subject: [PATCH] Implement FPOWI ExpandOp. Fix PR1287. llvm-svn: 41112 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 5 +++++ llvm/test/CodeGen/ARM/fpowi.ll | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 llvm/test/CodeGen/ARM/fpowi.ll diff --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 3d1b47d3f30b..b25f86f774ce 100644 --- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -5604,6 +5604,11 @@ void SelectionDAGLegalize::ExpandOp(SDOperand Op, SDOperand &Lo, SDOperand &Hi){ case ISD::FP_ROUND: Lo = ExpandLibCall(TLI.getLibcallName(RTLIB::FPROUND_F64_F32),Node,true,Hi); break; + case ISD::FPOWI: + Lo = ExpandLibCall(TLI.getLibcallName((VT == MVT::f32) + ? RTLIB::POWI_F32 : RTLIB::POWI_F64), + Node, false, Hi); + break; case ISD::FSQRT: case ISD::FSIN: case ISD::FCOS: { diff --git a/llvm/test/CodeGen/ARM/fpowi.ll b/llvm/test/CodeGen/ARM/fpowi.ll new file mode 100644 index 000000000000..ab09ffff6b36 --- /dev/null +++ b/llvm/test/CodeGen/ARM/fpowi.ll @@ -0,0 +1,16 @@ +; RUN: llvm-as < %s | llc -mtriple=arm-linux-gnueabi | grep powidf2 +; PR1287 + +; ModuleID = '' +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64" +target triple = "arm-linux-gnueabi" + +define double @_ZSt3powdi(double %__x, i32 %__i) { +entry: + %tmp3 = call double @llvm.powi.f64( double 0.000000e+00, i32 0 ) ; [#uses=1] + store double %tmp3, double* null, align 8 + unreachable +} + +declare double @llvm.powi.f64(double, i32) +