diff --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h --- a/llvm/include/llvm/CodeGen/TargetLowering.h +++ b/llvm/include/llvm/CodeGen/TargetLowering.h @@ -2741,7 +2741,7 @@ /// This indicates the default register class to use for each ValueType the /// target supports natively. const TargetRegisterClass *RegClassForVT[MVT::LAST_VALUETYPE]; - unsigned char NumRegistersForVT[MVT::LAST_VALUETYPE]; + uint16_t NumRegistersForVT[MVT::LAST_VALUETYPE]; MVT RegisterTypeForVT[MVT::LAST_VALUETYPE]; /// This indicates the "representative" register class to use for each diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -1332,8 +1332,11 @@ MVT IntermediateVT; MVT RegisterVT; unsigned NumIntermediates; - NumRegistersForVT[i] = getVectorTypeBreakdownMVT(VT, IntermediateVT, + unsigned NumRegisters = getVectorTypeBreakdownMVT(VT, IntermediateVT, NumIntermediates, RegisterVT, this); + NumRegistersForVT[i] = NumRegisters; + assert(NumRegistersForVT[i] == NumRegisters && + "NumRegistersForVT size cannot represent NumRegisters!"); RegisterTypeForVT[i] = RegisterVT; MVT NVT = VT.getPow2VectorType();