forked from OSchip/llvm-project
[llvm][MIRVRegNamer] Avoid collisions across constant pool indices.
When hashing on MachineOperand::MO_ConstantPoolIndex, now MIR-Canon and MIRVRegNamer will no longer result in a hash collision. Differential Revision: https://reviews.llvm.org/D74449
This commit is contained in:
parent
550be40515
commit
4b8af31f63
|
@ -69,6 +69,7 @@ std::string VRegRenamer::getInstructionOpcodeHash(MachineInstr &MI) {
|
||||||
case MachineOperand::MO_TargetIndex:
|
case MachineOperand::MO_TargetIndex:
|
||||||
return MO.getOffset() | (MO.getTargetFlags() << 16);
|
return MO.getOffset() | (MO.getTargetFlags() << 16);
|
||||||
case MachineOperand::MO_FrameIndex:
|
case MachineOperand::MO_FrameIndex:
|
||||||
|
case MachineOperand::MO_ConstantPoolIndex:
|
||||||
return llvm::hash_value(MO);
|
return llvm::hash_value(MO);
|
||||||
|
|
||||||
// We could explicitly handle all the types of the MachineOperand,
|
// We could explicitly handle all the types of the MachineOperand,
|
||||||
|
@ -79,7 +80,6 @@ std::string VRegRenamer::getInstructionOpcodeHash(MachineInstr &MI) {
|
||||||
|
|
||||||
// TODO: Handle the following Index/ID/Predicate cases. They can
|
// TODO: Handle the following Index/ID/Predicate cases. They can
|
||||||
// be hashed on in a stable manner.
|
// be hashed on in a stable manner.
|
||||||
case MachineOperand::MO_ConstantPoolIndex:
|
|
||||||
case MachineOperand::MO_JumpTableIndex:
|
case MachineOperand::MO_JumpTableIndex:
|
||||||
case MachineOperand::MO_CFIIndex:
|
case MachineOperand::MO_CFIIndex:
|
||||||
case MachineOperand::MO_IntrinsicID:
|
case MachineOperand::MO_IntrinsicID:
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
# RUN: llc -o - -run-pass mir-canonicalizer -verify-machineinstrs %s | FileCheck %s
|
||||||
|
--- |
|
||||||
|
target triple = "aarch64-unknown-unknown"
|
||||||
|
define void @f() { unreachable }
|
||||||
|
...
|
||||||
|
---
|
||||||
|
name: f
|
||||||
|
constants:
|
||||||
|
- id: 0
|
||||||
|
value: '<1 x i8> <i8 0>'
|
||||||
|
- id: 1
|
||||||
|
value: '<1 x i8> <i8 1>'
|
||||||
|
body: |
|
||||||
|
bb.0:
|
||||||
|
; Test that we no longer have hash collisions between two different consts:
|
||||||
|
;CHECK: %bb{{[0-9]+}}_{{[0-9]+}}__1:gpr64common = ADR
|
||||||
|
;CHECK: %bb{{[0-9]+}}_{{[0-9]+}}__1:gpr64common = ADR
|
||||||
|
%vreg0:gpr64common = ADRP target-flags(aarch64-page) %const.0
|
||||||
|
%vreg1:gpr64common = ADRP target-flags(aarch64-page) %const.1
|
||||||
|
...
|
Loading…
Reference in New Issue