[llvm-bugs] [Bug 45668] New: Legalize integer divisions with enough signbits as a smaller operation
via llvm-bugs
llvm-bugs at lists.llvm.org
Sat Apr 25 06:46:06 PDT 2020
https://bugs.llvm.org/show_bug.cgi?id=45668
Bug ID: 45668
Summary: Legalize integer divisions with enough signbits as a
smaller operation
Product: libraries
Version: trunk
Hardware: PC
OS: Windows NT
Status: NEW
Severity: enhancement
Priority: P
Component: Common Code Generator Code
Assignee: unassignedbugs at nondot.org
Reporter: llvm-dev at redking.me.uk
CC: erich.keane at intel.com, lebedev.ri at gmail.com,
llvm-bugs at lists.llvm.org, nikita.ppv at gmail.com,
spatel+llvm at rotateright.com
Split off from [Bug #45649]:
We don't have much support for arbitrary sized integer division, and once we
can't legalize to a wider type it does tend to fail - I'm not sure if this is
likely to change anytime soon.
We don't even handle the likes of:
define i129 @div_i31_sext_i129(i31 %0, i31 %1) {
%3 = sext i31 %0 to i129
%4 = sext i31 %1 to i129
%5 = sdiv i129 %3, %4
ret i129 %5
}
I may be wrong here but we should be able to legalize to:
define i129 @div_i31_sext_i129(i31 %0, i31 %1) {
%3 = sext i31 %0 to i64
%4 = sext i31 %1 to i64
%5 = sdiv i64 %3, %4
%6 = sext i64 %5 to i129
ret i129 %6
}
Alive2 (with smaller types): http://volta.cs.utah.edu:8080/z/FtCZCa
----------------------------------------
define i19 @src(i7 %0, i7 %1) {
%2:
%3 = sext i7 %0 to i19
%4 = sext i7 %1 to i19
%5 = sdiv i19 %3, %4
ret i19 %5
}
=>
define i19 @tgt(i7 %0, i7 %1) {
%2:
%3 = sext i7 %0 to i16
%4 = sext i7 %1 to i16
%5 = sdiv i16 %3, %4
%6 = sext i16 %5 to i19
ret i19 %6
}
Transformation seems to be correct!
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200425/712a9e31/attachment.html>
More information about the llvm-bugs
mailing list