diff options
author | Dmitri Gribenko <gribozavr@gmail.com> | 2019-12-30 14:28:56 +0100 |
---|---|---|
committer | Dmitri Gribenko <gribozavr@gmail.com> | 2019-12-30 14:29:47 +0100 |
commit | 32cc14100e802fddd9f88e7a862250ce3108a583 (patch) | |
tree | 3d9b0d5f6214a1a5757c59d59bacf281b6c4c276 /llvm/lib/CodeGen | |
parent | b4abe7afbf5272d56ec8adb39fdccf1e2df48a88 (diff) | |
download | bcm5719-llvm-32cc14100e802fddd9f88e7a862250ce3108a583.tar.gz bcm5719-llvm-32cc14100e802fddd9f88e7a862250ce3108a583.zip |
Revert "[MIPS GlobalISel] Select bitreverse"
This reverts commit dbc136e0fe7e14c64dcb78e72321bb41af60afa4.
It broke buildbots:
http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/21066
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp | 46 |
1 files changed, 1 insertions, 45 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index 8e49db7b7fc..6a56a4e3c65 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -1075,8 +1075,7 @@ LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar(MachineInstr &MI, MI.eraseFromParent(); return Legalized; } - case TargetOpcode::G_BSWAP: - case TargetOpcode::G_BITREVERSE: { + case TargetOpcode::G_BSWAP: { if (SizeOp0 % NarrowSize != 0) return UnableToLegalize; @@ -2313,8 +2312,6 @@ LegalizerHelper::lower(MachineInstr &MI, unsigned TypeIdx, LLT Ty) { return lowerInsert(MI); case G_BSWAP: return lowerBswap(MI); - case G_BITREVERSE: - return lowerBitreverse(MI); } } @@ -4387,44 +4384,3 @@ LegalizerHelper::lowerBswap(MachineInstr &MI) { MI.eraseFromParent(); return Legalized; } - -//{ (Src & Mask) >> N } | { (Src << N) & Mask } -static MachineInstrBuilder SwapN(unsigned N, DstOp Dst, MachineIRBuilder &B, - MachineInstrBuilder Src, APInt Mask) { - const LLT Ty = Dst.getLLTTy(*B.getMRI()); - MachineInstrBuilder C_N = B.buildConstant(Ty, N); - MachineInstrBuilder MaskLoNTo0 = B.buildConstant(Ty, Mask); - return B.buildOr(Dst, B.buildLShr(Ty, B.buildAnd(Ty, Src, MaskLoNTo0), C_N), - B.buildAnd(Ty, B.buildShl(Ty, Src, C_N), MaskLoNTo0)); -} - -LegalizerHelper::LegalizeResult -LegalizerHelper::lowerBitreverse(MachineInstr &MI) { - Register Dst = MI.getOperand(0).getReg(); - Register Src = MI.getOperand(1).getReg(); - const LLT Ty = MRI.getType(Src); - unsigned Size = Ty.getSizeInBits(); - - MachineInstrBuilder BSWAP = - MIRBuilder.buildInstr(TargetOpcode::G_BSWAP, {Ty}, {Src}); - - // swap high and low 4 bits in 8 bit blocks 7654|3210 -> 3210|7654 - // [(val & 0xF0F0F0F0) >> 4] | [(val & 0x0F0F0F0F) << 4] - // -> [(val & 0xF0F0F0F0) >> 4] | [(val << 4) & 0xF0F0F0F0] - MachineInstrBuilder Swap4 = - SwapN(4, Ty, MIRBuilder, BSWAP, APInt::getSplat(Size, APInt(8, 0xF0))); - - // swap high and low 2 bits in 4 bit blocks 32|10 76|54 -> 10|32 54|76 - // [(val & 0xCCCCCCCC) >> 2] & [(val & 0x33333333) << 2] - // -> [(val & 0xCCCCCCCC) >> 2] & [(val << 2) & 0xCCCCCCCC] - MachineInstrBuilder Swap2 = - SwapN(2, Ty, MIRBuilder, Swap4, APInt::getSplat(Size, APInt(8, 0xCC))); - - // swap high and low 1 bit in 2 bit blocks 1|0 3|2 5|4 7|6 -> 0|1 2|3 4|5 6|7 - // [(val & 0xAAAAAAAA) >> 1] & [(val & 0x55555555) << 1] - // -> [(val & 0xAAAAAAAA) >> 1] & [(val << 1) & 0xAAAAAAAA] - SwapN(1, Dst, MIRBuilder, Swap2, APInt::getSplat(Size, APInt(8, 0xAA))); - - MI.eraseFromParent(); - return Legalized; -} |