diff options
author | David Bolvansky <david.bolvansky@gmail.com> | 2018-10-30 09:07:22 +0000 |
---|---|---|
committer | David Bolvansky <david.bolvansky@gmail.com> | 2018-10-30 09:07:22 +0000 |
commit | dfdbb038e8ea0a46b7ad04b6ad6febb3f38d25c4 (patch) | |
tree | 816e6b08e98eed34179c2ec2d1e920ce1d92d22f /llvm/test/CodeGen/Mips/llvm-ir | |
parent | da7817164354f29ec8ab79aad52e9004b3c1494c (diff) | |
download | bcm5719-llvm-dfdbb038e8ea0a46b7ad04b6ad6febb3f38d25c4.tar.gz bcm5719-llvm-dfdbb038e8ea0a46b7ad04b6ad6febb3f38d25c4.zip |
[DAGCombiner] Improve X div/rem Y fold if single bit element type
Summary: Tests by @spatel, thanks
Reviewers: spatel, RKSimon
Reviewed By: spatel
Subscribers: sdardis, atanasyan, llvm-commits, spatel
Differential Revision: https://reviews.llvm.org/D52668
llvm-svn: 345575
Diffstat (limited to 'llvm/test/CodeGen/Mips/llvm-ir')
-rw-r--r-- | llvm/test/CodeGen/Mips/llvm-ir/sdiv.ll | 35 | ||||
-rw-r--r-- | llvm/test/CodeGen/Mips/llvm-ir/srem.ll | 35 | ||||
-rw-r--r-- | llvm/test/CodeGen/Mips/llvm-ir/udiv.ll | 25 | ||||
-rw-r--r-- | llvm/test/CodeGen/Mips/llvm-ir/urem.ll | 42 |
4 files changed, 25 insertions, 112 deletions
diff --git a/llvm/test/CodeGen/Mips/llvm-ir/sdiv.ll b/llvm/test/CodeGen/Mips/llvm-ir/sdiv.ll index 03b831191a8..e54eaa63222 100644 --- a/llvm/test/CodeGen/Mips/llvm-ir/sdiv.ll +++ b/llvm/test/CodeGen/Mips/llvm-ir/sdiv.ll @@ -35,55 +35,32 @@ define signext i1 @sdiv_i1(i1 signext %a, i1 signext %b) { ; GP32-LABEL: sdiv_i1: ; GP32: # %bb.0: # %entry -; GP32-NEXT: div $zero, $4, $5 -; GP32-NEXT: teq $5, $zero, 7 -; GP32-NEXT: mflo $1 -; GP32-NEXT: andi $1, $1, 1 ; GP32-NEXT: jr $ra -; GP32-NEXT: negu $2, $1 +; GP32-NEXT: move $2, $4 ; ; GP32R6-LABEL: sdiv_i1: ; GP32R6: # %bb.0: # %entry -; GP32R6-NEXT: div $1, $4, $5 -; GP32R6-NEXT: teq $5, $zero, 7 -; GP32R6-NEXT: andi $1, $1, 1 ; GP32R6-NEXT: jr $ra -; GP32R6-NEXT: negu $2, $1 +; GP32R6-NEXT: move $2, $4 ; ; GP64-LABEL: sdiv_i1: ; GP64: # %bb.0: # %entry -; GP64-NEXT: div $zero, $4, $5 -; GP64-NEXT: teq $5, $zero, 7 -; GP64-NEXT: mflo $1 -; GP64-NEXT: andi $1, $1, 1 ; GP64-NEXT: jr $ra -; GP64-NEXT: negu $2, $1 +; GP64-NEXT: move $2, $4 ; ; GP64R6-LABEL: sdiv_i1: ; GP64R6: # %bb.0: # %entry -; GP64R6-NEXT: div $1, $4, $5 -; GP64R6-NEXT: teq $5, $zero, 7 -; GP64R6-NEXT: andi $1, $1, 1 ; GP64R6-NEXT: jr $ra -; GP64R6-NEXT: negu $2, $1 +; GP64R6-NEXT: move $2, $4 ; ; MMR3-LABEL: sdiv_i1: ; MMR3: # %bb.0: # %entry -; MMR3-NEXT: div $zero, $4, $5 -; MMR3-NEXT: teq $5, $zero, 7 -; MMR3-NEXT: mflo16 $2 -; MMR3-NEXT: andi16 $2, $2, 1 -; MMR3-NEXT: li16 $3, 0 -; MMR3-NEXT: subu16 $2, $3, $2 +; MMR3-NEXT: move $2, $4 ; MMR3-NEXT: jrc $ra ; ; MMR6-LABEL: sdiv_i1: ; MMR6: # %bb.0: # %entry -; MMR6-NEXT: div $2, $4, $5 -; MMR6-NEXT: teq $5, $zero, 7 -; MMR6-NEXT: andi16 $2, $2, 1 -; MMR6-NEXT: li16 $3, 0 -; MMR6-NEXT: subu16 $2, $3, $2 +; MMR6-NEXT: move $2, $4 ; MMR6-NEXT: jrc $ra entry: %r = sdiv i1 %a, %b diff --git a/llvm/test/CodeGen/Mips/llvm-ir/srem.ll b/llvm/test/CodeGen/Mips/llvm-ir/srem.ll index 66ee6c01bd2..ef0502c85d5 100644 --- a/llvm/test/CodeGen/Mips/llvm-ir/srem.ll +++ b/llvm/test/CodeGen/Mips/llvm-ir/srem.ll @@ -35,55 +35,32 @@ define signext i1 @srem_i1(i1 signext %a, i1 signext %b) { ; GP32-LABEL: srem_i1: ; GP32: # %bb.0: # %entry -; GP32-NEXT: div $zero, $4, $5 -; GP32-NEXT: teq $5, $zero, 7 -; GP32-NEXT: mfhi $1 -; GP32-NEXT: andi $1, $1, 1 ; GP32-NEXT: jr $ra -; GP32-NEXT: negu $2, $1 +; GP32-NEXT: addiu $2, $zero, 0 ; ; GP32R6-LABEL: srem_i1: ; GP32R6: # %bb.0: # %entry -; GP32R6-NEXT: mod $1, $4, $5 -; GP32R6-NEXT: teq $5, $zero, 7 -; GP32R6-NEXT: andi $1, $1, 1 ; GP32R6-NEXT: jr $ra -; GP32R6-NEXT: negu $2, $1 +; GP32R6-NEXT: addiu $2, $zero, 0 ; ; GP64-LABEL: srem_i1: ; GP64: # %bb.0: # %entry -; GP64-NEXT: div $zero, $4, $5 -; GP64-NEXT: teq $5, $zero, 7 -; GP64-NEXT: mfhi $1 -; GP64-NEXT: andi $1, $1, 1 ; GP64-NEXT: jr $ra -; GP64-NEXT: negu $2, $1 +; GP64-NEXT: addiu $2, $zero, 0 ; ; GP64R6-LABEL: srem_i1: ; GP64R6: # %bb.0: # %entry -; GP64R6-NEXT: mod $1, $4, $5 -; GP64R6-NEXT: teq $5, $zero, 7 -; GP64R6-NEXT: andi $1, $1, 1 ; GP64R6-NEXT: jr $ra -; GP64R6-NEXT: negu $2, $1 +; GP64R6-NEXT: addiu $2, $zero, 0 ; ; MMR3-LABEL: srem_i1: ; MMR3: # %bb.0: # %entry -; MMR3-NEXT: div $zero, $4, $5 -; MMR3-NEXT: teq $5, $zero, 7 -; MMR3-NEXT: mfhi16 $2 -; MMR3-NEXT: andi16 $2, $2, 1 -; MMR3-NEXT: li16 $3, 0 -; MMR3-NEXT: subu16 $2, $3, $2 +; MMR3-NEXT: li16 $2, 0 ; MMR3-NEXT: jrc $ra ; ; MMR6-LABEL: srem_i1: ; MMR6: # %bb.0: # %entry -; MMR6-NEXT: mod $2, $4, $5 -; MMR6-NEXT: teq $5, $zero, 7 -; MMR6-NEXT: andi16 $2, $2, 1 -; MMR6-NEXT: li16 $3, 0 -; MMR6-NEXT: subu16 $2, $3, $2 +; MMR6-NEXT: li16 $2, 0 ; MMR6-NEXT: jrc $ra entry: %r = srem i1 %a, %b diff --git a/llvm/test/CodeGen/Mips/llvm-ir/udiv.ll b/llvm/test/CodeGen/Mips/llvm-ir/udiv.ll index e0ba7bc770e..8694a9f92b6 100644 --- a/llvm/test/CodeGen/Mips/llvm-ir/udiv.ll +++ b/llvm/test/CodeGen/Mips/llvm-ir/udiv.ll @@ -35,41 +35,32 @@ define zeroext i1 @udiv_i1(i1 zeroext %a, i1 zeroext %b) { ; GP32-LABEL: udiv_i1: ; GP32: # %bb.0: # %entry -; GP32-NEXT: divu $zero, $4, $5 -; GP32-NEXT: teq $5, $zero, 7 ; GP32-NEXT: jr $ra -; GP32-NEXT: mflo $2 +; GP32-NEXT: move $2, $4 ; ; GP32R6-LABEL: udiv_i1: ; GP32R6: # %bb.0: # %entry -; GP32R6-NEXT: divu $2, $4, $5 -; GP32R6-NEXT: teq $5, $zero, 7 -; GP32R6-NEXT: jrc $ra +; GP32R6-NEXT: jr $ra +; GP32R6-NEXT: move $2, $4 ; ; GP64-LABEL: udiv_i1: ; GP64: # %bb.0: # %entry -; GP64-NEXT: divu $zero, $4, $5 -; GP64-NEXT: teq $5, $zero, 7 ; GP64-NEXT: jr $ra -; GP64-NEXT: mflo $2 +; GP64-NEXT: move $2, $4 ; ; GP64R6-LABEL: udiv_i1: ; GP64R6: # %bb.0: # %entry -; GP64R6-NEXT: divu $2, $4, $5 -; GP64R6-NEXT: teq $5, $zero, 7 -; GP64R6-NEXT: jrc $ra +; GP64R6-NEXT: jr $ra +; GP64R6-NEXT: move $2, $4 ; ; MMR3-LABEL: udiv_i1: ; MMR3: # %bb.0: # %entry -; MMR3-NEXT: divu $zero, $4, $5 -; MMR3-NEXT: teq $5, $zero, 7 -; MMR3-NEXT: mflo16 $2 +; MMR3-NEXT: move $2, $4 ; MMR3-NEXT: jrc $ra ; ; MMR6-LABEL: udiv_i1: ; MMR6: # %bb.0: # %entry -; MMR6-NEXT: divu $2, $4, $5 -; MMR6-NEXT: teq $5, $zero, 7 +; MMR6-NEXT: move $2, $4 ; MMR6-NEXT: jrc $ra entry: %r = udiv i1 %a, %b diff --git a/llvm/test/CodeGen/Mips/llvm-ir/urem.ll b/llvm/test/CodeGen/Mips/llvm-ir/urem.ll index 83830a3689b..b744f706cbf 100644 --- a/llvm/test/CodeGen/Mips/llvm-ir/urem.ll +++ b/llvm/test/CodeGen/Mips/llvm-ir/urem.ll @@ -35,64 +35,32 @@ define signext i1 @urem_i1(i1 signext %a, i1 signext %b) { ; GP32-LABEL: urem_i1: ; GP32: # %bb.0: # %entry -; GP32-NEXT: andi $1, $5, 1 -; GP32-NEXT: andi $2, $4, 1 -; GP32-NEXT: divu $zero, $2, $1 -; GP32-NEXT: teq $1, $zero, 7 -; GP32-NEXT: mfhi $1 -; GP32-NEXT: andi $1, $1, 1 ; GP32-NEXT: jr $ra -; GP32-NEXT: negu $2, $1 +; GP32-NEXT: addiu $2, $zero, 0 ; ; GP32R6-LABEL: urem_i1: ; GP32R6: # %bb.0: # %entry -; GP32R6-NEXT: andi $1, $5, 1 -; GP32R6-NEXT: andi $2, $4, 1 -; GP32R6-NEXT: modu $2, $2, $1 -; GP32R6-NEXT: teq $1, $zero, 7 ; GP32R6-NEXT: jr $ra -; GP32R6-NEXT: negu $2, $2 +; GP32R6-NEXT: addiu $2, $zero, 0 ; ; GP64-LABEL: urem_i1: ; GP64: # %bb.0: # %entry -; GP64-NEXT: andi $1, $5, 1 -; GP64-NEXT: andi $2, $4, 1 -; GP64-NEXT: divu $zero, $2, $1 -; GP64-NEXT: teq $1, $zero, 7 -; GP64-NEXT: mfhi $1 -; GP64-NEXT: andi $1, $1, 1 ; GP64-NEXT: jr $ra -; GP64-NEXT: negu $2, $1 +; GP64-NEXT: addiu $2, $zero, 0 ; ; GP64R6-LABEL: urem_i1: ; GP64R6: # %bb.0: # %entry -; GP64R6-NEXT: andi $1, $5, 1 -; GP64R6-NEXT: andi $2, $4, 1 -; GP64R6-NEXT: modu $2, $2, $1 -; GP64R6-NEXT: teq $1, $zero, 7 ; GP64R6-NEXT: jr $ra -; GP64R6-NEXT: negu $2, $2 +; GP64R6-NEXT: addiu $2, $zero, 0 ; ; MMR3-LABEL: urem_i1: ; MMR3: # %bb.0: # %entry -; MMR3-NEXT: andi16 $2, $5, 1 -; MMR3-NEXT: andi16 $3, $4, 1 -; MMR3-NEXT: divu $zero, $3, $2 -; MMR3-NEXT: teq $2, $zero, 7 -; MMR3-NEXT: mfhi16 $2 -; MMR3-NEXT: andi16 $2, $2, 1 -; MMR3-NEXT: li16 $3, 0 -; MMR3-NEXT: subu16 $2, $3, $2 +; MMR3-NEXT: li16 $2, 0 ; MMR3-NEXT: jrc $ra ; ; MMR6-LABEL: urem_i1: ; MMR6: # %bb.0: # %entry -; MMR6-NEXT: andi16 $2, $5, 1 -; MMR6-NEXT: andi16 $3, $4, 1 -; MMR6-NEXT: modu $3, $3, $2 -; MMR6-NEXT: teq $2, $zero, 7 ; MMR6-NEXT: li16 $2, 0 -; MMR6-NEXT: subu16 $2, $2, $3 ; MMR6-NEXT: jrc $ra entry: %r = urem i1 %a, %b |