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: unassignedb...@nondot.org
          Reporter: llvm-...@redking.me.uk
                CC: erich.ke...@intel.com, lebedev...@gmail.com,
                    llvm-bugs@lists.llvm.org, nikita....@gmail.com,
                    spatel+l...@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.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to