summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@chromium.org>2020-02-25 11:50:03 +0100
committerHans Wennborg <hans@chromium.org>2020-02-25 11:54:51 +0100
commit882720b7ce338c81aa24c1c2b2614c47d248920f (patch)
treef268f4883d2fa98dbc6696ac2154bb00e251bf43
parentc6f940b745c68f911e06ede1374f155d89fe3540 (diff)
downloadbcm5719-llvm-882720b7ce338c81aa24c1c2b2614c47d248920f.tar.gz
bcm5719-llvm-882720b7ce338c81aa24c1c2b2614c47d248920f.zip
Don't generate libcalls for wide shift on Windows ARM (PR42711)
The previous patch (cff90f07cb5cc3c3bc58277926103af31caef308) didn't cover ARM. (cherry picked from commit decd021facba804b57e8d80b6159c987d3261ab8)
-rw-r--r--llvm/lib/Target/ARM/ARMISelLowering.cpp2
-rw-r--r--llvm/test/CodeGen/ARM/shift_minsize.ll8
2 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp
index 2f836a60a9e..66f3f418d06 100644
--- a/llvm/lib/Target/ARM/ARMISelLowering.cpp
+++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp
@@ -16892,7 +16892,7 @@ bool ARMTargetLowering::isCheapToSpeculateCtlz() const {
}
bool ARMTargetLowering::shouldExpandShift(SelectionDAG &DAG, SDNode *N) const {
- return !Subtarget->hasMinSize();
+ return !Subtarget->hasMinSize() || Subtarget->isTargetWindows();
}
Value *ARMTargetLowering::emitLoadLinked(IRBuilder<> &Builder, Value *Addr,
diff --git a/llvm/test/CodeGen/ARM/shift_minsize.ll b/llvm/test/CodeGen/ARM/shift_minsize.ll
index 4d10c64392d..de7327ed3fc 100644
--- a/llvm/test/CodeGen/ARM/shift_minsize.ll
+++ b/llvm/test/CodeGen/ARM/shift_minsize.ll
@@ -1,4 +1,10 @@
-; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s
+; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s
+; RUN: llc -mtriple=thumbv7-windows %s -o - | FileCheck %s -check-prefix=CHECK-WIN
+
+; The Windows runtime doesn't have these.
+; CHECK-WIN-NOT: __ashldi3
+; CHECK-WIN-NOT: __ashrdi3
+; CHECK-WIN-NOT: __lshrdi3
define i64 @f0(i64 %val, i64 %amt) minsize optsize {
; CHECK-LABEL: f0:
OpenPOWER on IntegriCloud