[llvm] r223382 - [AArch64] Combining Load and IntToFp should check for neon availability
Weiming Zhao
weimingz at codeaurora.org
Thu Dec 4 12:25:50 PST 2014
Author: weimingz
Date: Thu Dec 4 14:25:50 2014
New Revision: 223382
URL: http://llvm.org/viewvc/llvm-project?rev=223382&view=rev
Log:
[AArch64] Combining Load and IntToFp should check for neon availability
Added:
llvm/trunk/test/CodeGen/AArch64/aarch64-2014-12-02-combine-soften.ll
Modified:
llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
Modified: llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp?rev=223382&r1=223381&r2=223382&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AArch64ISelLowering.cpp Thu Dec 4 14:25:50 2014
@@ -6951,7 +6951,8 @@ static SDValue performVectorCompareAndMa
return SDValue();
}
-static SDValue performIntToFpCombine(SDNode *N, SelectionDAG &DAG) {
+static SDValue performIntToFpCombine(SDNode *N, SelectionDAG &DAG,
+ const AArch64Subtarget *Subtarget) {
// First try to optimize away the conversion when it's conditionally from
// a constant. Vectors only.
SDValue Res = performVectorCompareAndMaskUnaryOpCombine(N, DAG);
@@ -6970,7 +6971,7 @@ static SDValue performIntToFpCombine(SDN
// conversion, use a fp load instead and a AdvSIMD scalar {S|U}CVTF instead.
// This eliminates an "integer-to-vector-move UOP and improve throughput.
SDValue N0 = N->getOperand(0);
- if (ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
+ if (Subtarget->hasNEON() && ISD::isNormalLoad(N0.getNode()) && N0.hasOneUse() &&
// Do not change the width of a volatile load.
!cast<LoadSDNode>(N0)->isVolatile()) {
LoadSDNode *LN0 = cast<LoadSDNode>(N0);
@@ -8527,7 +8528,7 @@ SDValue AArch64TargetLowering::PerformDA
return performMulCombine(N, DAG, DCI, Subtarget);
case ISD::SINT_TO_FP:
case ISD::UINT_TO_FP:
- return performIntToFpCombine(N, DAG);
+ return performIntToFpCombine(N, DAG, Subtarget);
case ISD::OR:
return performORCombine(N, DCI, Subtarget);
case ISD::INTRINSIC_WO_CHAIN:
Added: llvm/trunk/test/CodeGen/AArch64/aarch64-2014-12-02-combine-soften.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/aarch64-2014-12-02-combine-soften.ll?rev=223382&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/aarch64-2014-12-02-combine-soften.ll (added)
+++ llvm/trunk/test/CodeGen/AArch64/aarch64-2014-12-02-combine-soften.ll Thu Dec 4 14:25:50 2014
@@ -0,0 +1,16 @@
+;RUN: llc <%s -mattr=-neon -mattr=-fp-armv8 | FileCheck %s
+target datalayout = "e-m:e-i64:64-i128:128-n32:64-S128"
+target triple = "aarch64"
+
+ at t = common global i32 0, align 4
+ at x = common global i32 0, align 4
+
+define void @foo() {
+entry:
+;CHECK-LABEL: foo:
+;CHECK: __floatsisf
+ %0 = load i32* @x, align 4
+ %conv = sitofp i32 %0 to float
+ store float %conv, float* bitcast (i32* @t to float*), align 4
+ ret void
+}
More information about the llvm-commits
mailing list