summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/ARM/shift_minsize.ll
diff options
context:
space:
mode:
authorSjoerd Meijer <sjoerd.meijer@arm.com>2019-01-31 08:07:30 +0000
committerSjoerd Meijer <sjoerd.meijer@arm.com>2019-01-31 08:07:30 +0000
commitf7cc34cae890fdd711173fcb633cd262ee343764 (patch)
treeb5b705cfcf8aebd0e49feaadeadfb0e35370343a /llvm/test/CodeGen/ARM/shift_minsize.ll
parenta4938433720b54683f5b5da4ae4d1882c5a99766 (diff)
downloadbcm5719-llvm-f7cc34cae890fdd711173fcb633cd262ee343764.tar.gz
bcm5719-llvm-f7cc34cae890fdd711173fcb633cd262ee343764.zip
[SelectionDAG] Codesize: don't expand SHIFT to SHIFT_PARTS
And instead just generate a libcall. My motivating example on ARM was a simple: shl i64 %A, %B for which the code bloat is quite significant. For other targets that also accept __int128/i128 such as AArch64 and X86, it is also beneficial for these cases to generate a libcall when optimising for minsize. On these 64-bit targets, the 64-bits shifts are of course unaffected because the SHIFT/SHIFT_PARTS lowering operation action is not set to custom/expand. Differential Revision: https://reviews.llvm.org/D57386 llvm-svn: 352736
Diffstat (limited to 'llvm/test/CodeGen/ARM/shift_minsize.ll')
-rw-r--r--llvm/test/CodeGen/ARM/shift_minsize.ll32
1 files changed, 32 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/ARM/shift_minsize.ll b/llvm/test/CodeGen/ARM/shift_minsize.ll
new file mode 100644
index 00000000000..4d10c64392d
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/shift_minsize.ll
@@ -0,0 +1,32 @@
+; RUN: llc -mtriple=arm-eabi %s -o - | FileCheck %s
+
+define i64 @f0(i64 %val, i64 %amt) minsize optsize {
+; CHECK-LABEL: f0:
+; CHECK: bl __aeabi_llsl
+ %res = shl i64 %val, %amt
+ ret i64 %res
+}
+
+define i32 @f1(i64 %x, i64 %y) minsize optsize {
+; CHECK-LABEL: f1:
+; CHECK: bl __aeabi_llsl
+ %a = shl i64 %x, %y
+ %b = trunc i64 %a to i32
+ ret i32 %b
+}
+
+define i32 @f2(i64 %x, i64 %y) minsize optsize {
+; CHECK-LABEL: f2:
+; CHECK: bl __aeabi_lasr
+ %a = ashr i64 %x, %y
+ %b = trunc i64 %a to i32
+ ret i32 %b
+}
+
+define i32 @f3(i64 %x, i64 %y) minsize optsize {
+; CHECK-LABEL: f3:
+; CHECK: bl __aeabi_llsr
+ %a = lshr i64 %x, %y
+ %b = trunc i64 %a to i32
+ ret i32 %b
+}
OpenPOWER on IntegriCloud