Skip to content

Suspicious anyextend in MOPS GlobalISel codegen #70270

Closed
@aemerson

Description

@aemerson

I just saw this code in AArch64LegalizerInfo.cpp. Notice how the comment says zext but an anyextend is being generated.

  case Intrinsic::aarch64_mops_memset_tag: {
    assert(MI.getOpcode() == TargetOpcode::G_INTRINSIC_W_SIDE_EFFECTS);
    // Zext the value to 64 bit
    MachineIRBuilder MIB(MI);
    auto &Value = MI.getOperand(3);
    Register ZExtValueReg = MIB.buildAnyExt(LLT::scalar(64), Value).getReg(0);
    Value.setReg(ZExtValueReg);
    return true;
  }

Same again here:

bool AArch64LegalizerInfo::legalizeMemOps(MachineInstr &MI,
                                          LegalizerHelper &Helper) const {
  MachineIRBuilder &MIRBuilder = Helper.MIRBuilder;

  // Tagged version MOPSMemorySetTagged is legalised in legalizeIntrinsic
  if (MI.getOpcode() == TargetOpcode::G_MEMSET) {
    // Zext the value operand to 64 bit
    auto &Value = MI.getOperand(1);
    Register ZExtValueReg =
        MIRBuilder.buildAnyExt(LLT::scalar(64), Value).getReg(0);
    Value.setReg(ZExtValueReg);
    return true;
  }

  return false;
}

@davemgreen @tyb0807

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions