diff options
author | Puyan Lotfi <puyan@puyan.org> | 2019-12-16 13:23:03 -0500 |
---|---|---|
committer | Puyan Lotfi <puyan@puyan.org> | 2019-12-16 18:25:04 -0500 |
commit | f63b64c0c3b486f164c3c66cce9f13df2bac6b6e (patch) | |
tree | 48e3613733b42f20b4289e61c212328238b860bf /llvm/lib/CodeGen | |
parent | aa5ee8f244441a8ea103a7e0ed8b6f3e74454516 (diff) | |
download | bcm5719-llvm-f63b64c0c3b486f164c3c66cce9f13df2bac6b6e.tar.gz bcm5719-llvm-f63b64c0c3b486f164c3c66cce9f13df2bac6b6e.zip |
[llvm][MIRVRegNamerUtils] Adding hashing on CImm / FPImm MachineOperands.
This patch makes it so that cases where multiple instructions that
differ only in their ConstantInt or ConstantFP MachineOperand values no
longer collide. For instance:
%0:_(s1) = G_CONSTANT i1 true
%1:_(s1) = G_CONSTANT i1 false
%2:_(s32) = G_FCONSTANT float 1.0
%3:_(s32) = G_FCONSTANT float 0.0
Prior to this patch the first two instructions would collide together.
Also, the last two G_FCONSTANT instructions would also collide. Now they
will no longer collide.
Differential Revision: https://reviews.llvm.org/D71558
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/MIRVRegNamerUtils.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/MIRVRegNamerUtils.cpp b/llvm/lib/CodeGen/MIRVRegNamerUtils.cpp index fa36a110664..44670768d1e 100644 --- a/llvm/lib/CodeGen/MIRVRegNamerUtils.cpp +++ b/llvm/lib/CodeGen/MIRVRegNamerUtils.cpp @@ -53,6 +53,13 @@ std::string VRegRenamer::getInstructionOpcodeHash(MachineInstr &MI) { // Gets a hashable artifact from a given MachineOperand (ie an unsigned). auto GetHashableMO = [this](const MachineOperand &MO) -> unsigned { switch (MO.getType()) { + case MachineOperand::MO_CImmediate: + return hash_combine(MO.getType(), MO.getTargetFlags(), + MO.getCImm()->getZExtValue()); + case MachineOperand::MO_FPImmediate: + return hash_combine( + MO.getType(), MO.getTargetFlags(), + MO.getFPImm()->getValueAPF().bitcastToAPInt().getZExtValue()); case MachineOperand::MO_Immediate: return MO.getImm(); case MachineOperand::MO_TargetIndex: @@ -70,8 +77,6 @@ std::string VRegRenamer::getInstructionOpcodeHash(MachineInstr &MI) { // TODO: Handle the following Immediate/Index/ID/Predicate cases. They can // be hashed on in a stable manner. - case MachineOperand::MO_CImmediate: - case MachineOperand::MO_FPImmediate: case MachineOperand::MO_FrameIndex: case MachineOperand::MO_ConstantPoolIndex: case MachineOperand::MO_JumpTableIndex: |