diff options
author | Dylan McKay <me@dylanmckay.io> | 2018-03-19 00:55:50 +0000 |
---|---|---|
committer | Dylan McKay <me@dylanmckay.io> | 2018-03-19 00:55:50 +0000 |
commit | a35ee70641a5dcfd1818e8d234680e36554394d6 (patch) | |
tree | 35e3e809571b6c2735d284d66c57ec82b16f15e9 /llvm/test/CodeGen/AVR | |
parent | f545cfee523885f67ec9f8e7f89ec1cf9d3b7b39 (diff) | |
download | bcm5719-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.ll | 52 |
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 +} + |