[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