diff options
| author | Krzysztof Parzyszek <kparzysz@quicinc.com> | 2019-08-26 19:08:08 +0000 |
|---|---|---|
| committer | Krzysztof Parzyszek <kparzysz@quicinc.com> | 2019-08-26 19:08:08 +0000 |
| commit | 9e0feaf56287b936c3d3c07346f13e3f40897a39 (patch) | |
| tree | 473d29a2a6348f0517664ccd97507b18e8c67419 /llvm/test | |
| parent | 2cd7fafc11fc1f721e88257d9befcc36ccf54294 (diff) | |
| download | bcm5719-llvm-9e0feaf56287b936c3d3c07346f13e3f40897a39.tar.gz bcm5719-llvm-9e0feaf56287b936c3d3c07346f13e3f40897a39.zip | |
[Hexagon] Improve generated code for test-if-bit-clear
llvm-svn: 369947
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/CodeGen/Hexagon/tstbit.ll | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/llvm/test/CodeGen/Hexagon/tstbit.ll b/llvm/test/CodeGen/Hexagon/tstbit.ll index 10ce8f950aa..a21ad8d9a1f 100644 --- a/llvm/test/CodeGen/Hexagon/tstbit.ll +++ b/llvm/test/CodeGen/Hexagon/tstbit.ll @@ -24,11 +24,11 @@ define i64 @is_upper_bit_clear_i64(i64 %x) #0 { ; CHECK-LABEL: is_upper_bit_clear_i64: ; CHECK: // %bb.0: ; CHECK-NEXT: { -; CHECK-NEXT: r1:0 = extractu(r1:0,#1,#37) +; CHECK-NEXT: p0 = tstbit(r1,#5) +; CHECK-NEXT: r1 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { -; CHECK-NEXT: r0 = togglebit(r0,#0) -; CHECK-NEXT: r1 = #0 +; CHECK-NEXT: r0 = mux(p0,#0,#1) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %sh = lshr i64 %x, 37 @@ -41,11 +41,11 @@ define i64 @is_lower_bit_clear_i64(i64 %x) #0 { ; CHECK-LABEL: is_lower_bit_clear_i64: ; CHECK: // %bb.0: ; CHECK-NEXT: { -; CHECK-NEXT: r1:0 = extractu(r1:0,#1,#27) +; CHECK-NEXT: p0 = tstbit(r0,#27) +; CHECK-NEXT: r1 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { -; CHECK-NEXT: r0 = togglebit(r0,#0) -; CHECK-NEXT: r1 = #0 +; CHECK-NEXT: r0 = mux(p0,#0,#1) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %sh = lshr i64 %x, 27 @@ -58,13 +58,10 @@ define i32 @is_bit_clear_i32(i32 %x) #0 { ; CHECK-LABEL: is_bit_clear_i32: ; CHECK: // %bb.0: ; CHECK-NEXT: { -; CHECK-NEXT: r1 = #-1 -; CHECK-NEXT: } -; CHECK-NEXT: { -; CHECK-NEXT: r1 ^= lsr(r0,#27) +; CHECK-NEXT: p0 = tstbit(r0,#27) ; CHECK-NEXT: } ; CHECK-NEXT: { -; CHECK-NEXT: r0 = and(r1,#1) +; CHECK-NEXT: r0 = mux(p0,#0,#1) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %sh = lshr i32 %x, 27 @@ -77,13 +74,10 @@ define i16 @is_bit_clear_i16(i16 %x) #0 { ; CHECK-LABEL: is_bit_clear_i16: ; CHECK: // %bb.0: ; CHECK-NEXT: { -; CHECK-NEXT: r1 = #-1 -; CHECK-NEXT: } -; CHECK-NEXT: { -; CHECK-NEXT: r1 ^= lsr(r0,#7) +; CHECK-NEXT: p0 = tstbit(r0,#7) ; CHECK-NEXT: } ; CHECK-NEXT: { -; CHECK-NEXT: r0 = and(r1,#1) +; CHECK-NEXT: r0 = mux(p0,#0,#1) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %sh = lshr i16 %x, 7 @@ -96,13 +90,10 @@ define i8 @is_bit_clear_i8(i8 %x) #0 { ; CHECK-LABEL: is_bit_clear_i8: ; CHECK: // %bb.0: ; CHECK-NEXT: { -; CHECK-NEXT: r1 = #-1 -; CHECK-NEXT: } -; CHECK-NEXT: { -; CHECK-NEXT: r1 ^= lsr(r0,#3) +; CHECK-NEXT: p0 = tstbit(r0,#3) ; CHECK-NEXT: } ; CHECK-NEXT: { -; CHECK-NEXT: r0 = and(r1,#1) +; CHECK-NEXT: r0 = mux(p0,#0,#1) ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } %sh = lshr i8 %x, 3 |

