From a7cd83bc88b0a8cbd07b3dbe078e11a0a4e9e442 Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Tue, 22 Jan 2019 18:53:41 +0000 Subject: GlobalISel: Disallow vectors for G_CONSTANT/G_FCONSTANT llvm-svn: 351853 --- llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp | 6 ++---- llvm/lib/CodeGen/MachineVerifier.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) (limited to 'llvm/lib/CodeGen') diff --git a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp index c964e98f578..6248a49317c 100644 --- a/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp +++ b/llvm/lib/CodeGen/GlobalISel/MachineIRBuilder.cpp @@ -243,10 +243,8 @@ MachineInstrBuilder MachineIRBuilder::buildConstant(const DstOp &Res, const ConstantInt &Val) { LLT Ty = Res.getLLTTy(*getMRI()); - assert((Ty.isScalar() || Ty.isPointer()) && "invalid operand type"); - const ConstantInt *NewVal = &Val; - if (Ty.getSizeInBits() != Val.getBitWidth()) + if (Ty.getScalarSizeInBits() != Val.getBitWidth()) NewVal = ConstantInt::get(getMF().getFunction().getContext(), Val.getValue().sextOrTrunc(Ty.getSizeInBits())); @@ -266,7 +264,7 @@ MachineInstrBuilder MachineIRBuilder::buildConstant(const DstOp &Res, MachineInstrBuilder MachineIRBuilder::buildFConstant(const DstOp &Res, const ConstantFP &Val) { - assert(Res.getLLTTy(*getMRI()).isScalar() && "invalid operand type"); + assert(!Res.getLLTTy(*getMRI()).isPointer() && "invalid operand type"); auto MIB = buildInstr(TargetOpcode::G_FCONSTANT); Res.addDefToMIB(*getMRI(), MIB); diff --git a/llvm/lib/CodeGen/MachineVerifier.cpp b/llvm/lib/CodeGen/MachineVerifier.cpp index b7e0f575406..ad7825ba3eb 100644 --- a/llvm/lib/CodeGen/MachineVerifier.cpp +++ b/llvm/lib/CodeGen/MachineVerifier.cpp @@ -990,6 +990,16 @@ void MachineVerifier::visitMachineInstrBefore(const MachineInstr *MI) { switch(MI->getOpcode()) { default: break; + case TargetOpcode::G_CONSTANT: + case TargetOpcode::G_FCONSTANT: { + if (MI->getNumOperands() < MCID.getNumOperands()) + break; + + LLT DstTy = MRI->getType(MI->getOperand(0).getReg()); + if (DstTy.isVector()) + report("Instruction cannot use a vector result type", MI); + break; + } case TargetOpcode::G_LOAD: case TargetOpcode::G_STORE: // Generic loads and stores must have a single MachineMemOperand -- cgit v1.2.3