[PATCH] D43383: [llvm-mc] - Produce R_X86_64_PLT32 for "call/jmp foo".

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 19 10:02:01 PST 2018


George Rimar via Phabricator <reviews at reviews.llvm.org> writes:

> +bool X86MCCodeEmitter::isPCRel32Branch(const MCInst &MI) const {
> +  unsigned Opcode = MI.getOpcode();
> +  const MCInstrDesc &Desc = MCII.get(Opcode);
> +  if ((Opcode != X86::CALL64pcrel32 && Opcode != X86::JMP_4) ||
> +      getImmFixupKind(Desc.TSFlags) != FK_PCRel_4)
> +    return false;
> +
> +  unsigned CurOp = X86II::getOperandBias(Desc);
> +  const MCOperand &Op = MI.getOperand(CurOp);
> +  if (!Op.isExpr() || Op.getExpr()->getKind() != MCExpr::SymbolRef)
> +    return false;
> +
> +  const MCSymbolRefExpr *Ref =
> +      static_cast<const MCSymbolRefExpr *>(Op.getExpr());
> +  return Ref->getKind() == MCSymbolRefExpr::VK_None;
> +}

Can you use a dyn_cast instead of static_cast and move it earlier?
Something like

if (!Op.isExpr())
  return false;

const MCSymbolRefExpr *Ref =
      dyn_cast<const MCSymbolRefExpr *>(Op.getExpr());
return Ref && Ref->getKind() == MCSymbolRefExpr::VK_None;

LGTM with that nit if possible.

Cheers,
Rafael


More information about the llvm-commits mailing list