summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/AVR
diff options
context:
space:
mode:
authorDylan McKay <me@dylanmckay.io>2018-03-19 00:55:50 +0000
committerDylan McKay <me@dylanmckay.io>2018-03-19 00:55:50 +0000
commita35ee70641a5dcfd1818e8d234680e36554394d6 (patch)
tree35e3e809571b6c2735d284d66c57ec82b16f15e9 /llvm/test/CodeGen/AVR
parentf545cfee523885f67ec9f8e7f89ec1cf9d3b7b39 (diff)
downloadbcm5719-llvm-a35ee70641a5dcfd1818e8d234680e36554394d6.tar.gz
bcm5719-llvm-a35ee70641a5dcfd1818e8d234680e36554394d6.zip
[AVR] Lower i128 divisions to runtime library calls
This patch adds i128 division support by instruction LLVM to lower 128-bit divisions to the __udivmodti4 and __divmodti4 rtlib functions. This also adds test for 64-bit division and 128-bit division. Patch by Peter Nimmervoll. llvm-svn: 327814
Diffstat (limited to 'llvm/test/CodeGen/AVR')
-rw-r--r--llvm/test/CodeGen/AVR/div.ll52
1 files changed, 52 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/AVR/div.ll b/llvm/test/CodeGen/AVR/div.ll
index d3e1a4c7ed6..7626ecb8172 100644
--- a/llvm/test/CodeGen/AVR/div.ll
+++ b/llvm/test/CodeGen/AVR/div.ll
@@ -62,3 +62,55 @@ define i32 @sdiv32(i32 %a, i32 %b) {
ret i32 %quot
}
+; Unsigned 64-bit division
+define i64 @udiv64(i64 %a, i64 %b) {
+; CHECK-LABEL: udiv64:
+; CHECK: call __udivmoddi4
+; CHECK-NEXT: ldd r18, Y+1
+; CHECK-NEXT: ldd r19, Y+2
+; CHECK-NEXT: ldd r20, Y+3
+; CHECK-NEXT: ldd r21, Y+4
+; CHECK-NEXT: ldd r22, Y+5
+; CHECK-NEXT: ldd r23, Y+6
+; CHECK-NEXT: ldd r24, Y+7
+; CHECK-NEXT: ldd r25, Y+8
+; CHECK: ret
+ %quot = udiv i64 %a, %b
+ ret i64 %quot
+}
+
+; Signed 64-bit division
+define i64 @sdiv64(i64 %a, i64 %b) {
+; CHECK-LABEL: sdiv64:
+; CHECK: call __divmoddi4
+; CHECK-NEXT: ldd r18, Y+1
+; CHECK-NEXT: ldd r19, Y+2
+; CHECK-NEXT: ldd r20, Y+3
+; CHECK-NEXT: ldd r21, Y+4
+; CHECK-NEXT: ldd r22, Y+5
+; CHECK-NEXT: ldd r23, Y+6
+; CHECK-NEXT: ldd r24, Y+7
+; CHECK-NEXT: ldd r25, Y+8
+; CHECK: ret
+ %quot = sdiv i64 %a, %b
+ ret i64 %quot
+}
+
+; Unsigned 128-bit division
+define i128 @udiv128(i128 %a, i128 %b) {
+; CHECK-LABEL: udiv128:
+; CHECK: call __udivmodti4
+; CHECK: ret
+ %quot = udiv i128 %a, %b
+ ret i128 %quot
+}
+
+; Signed 128-bit division
+define i128 @sdiv128(i128 %a, i128 %b) {
+; CHECK-LABEL: sdiv128:
+; CHECK: call __divmodti4
+; CHECK: ret
+ %quot = sdiv i128 %a, %b
+ ret i128 %quot
+}
+
OpenPOWER on IntegriCloud