[PATCH] D65298: [DivRemPairs] Handling for expanded-form rem - recomposition (PR42673)

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 30 06:15:56 PDT 2019


lebedev.ri added a comment.

Also, this pass assumes that there is at most one div instruction and at most one rem instruction with given pair of arguments.

  $ cat zz2.ll 
  target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  target triple = "aarch64-unknown-linux-gnu"
  
  define void @d(i32 %X, i32 %Y, i32 %Z, i1 %c, i32* %dst00, i32* %dst01, i32* %dst10, i32* %dst11) {
  bb:
    %t0 = mul nsw i32 %Z, %Y
    br i1 %c, label %bb1, label %bb2
  bb1:
    %t1 = sdiv i32 %X, %t0
    %t3.recomposed = srem i32 %X, %t0
    store i32 %t1, i32* %dst00
    store i32 %t3.recomposed, i32* %dst01
    br label %end
  bb2:
    %t12 = sdiv i32 %X, %t0
    %t32.recomposed = srem i32 %X, %t0
    store i32 %t12, i32* %dst10
    store i32 %t32.recomposed, i32* %dst11
    br label %end
  end:
    ret void
  }
  $ /builddirs/llvm-project/build-Clang8-unknown/bin/opt -div-rem-pairs zz2.ll -o - -S 
  ; ModuleID = 'zz2.ll'
  source_filename = "zz2.ll"
  target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
  target triple = "aarch64-unknown-linux-gnu"
  
  define void @d(i32 %X, i32 %Y, i32 %Z, i1 %c, i32* %dst00, i32* %dst01, i32* %dst10, i32* %dst11) {
  bb:
    %t0 = mul nsw i32 %Z, %Y
    br i1 %c, label %bb1, label %bb2
  
  bb1:                                              ; preds = %bb
    %t1 = sdiv i32 %X, %t0
    %t3.recomposed = srem i32 %X, %t0
    store i32 %t1, i32* %dst00
    store i32 %t3.recomposed, i32* %dst01
    br label %end
  
  bb2:                                              ; preds = %bb
    %t12 = sdiv i32 %X, %t0
    %0 = mul i32 %t12, %t0
    %1 = sub i32 %X, %0
    store i32 %t12, i32* %dst10
    store i32 %1, i32* %dst11
    br label %end
  
  end:                                              ; preds = %bb2, %bb1
    ret void
  }


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65298/new/

https://reviews.llvm.org/D65298





More information about the llvm-commits mailing list