mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-09 05:13:01 +00:00
[Vector-Select] Address one of the problems in 10902.
When generating the trunc-store of i1's, we need to use the vector type and not the scalar type. This patch fixes the assertion in CodeGen/Generic/bool-vector.ll when running with -promote-elements. llvm-svn: 140463
This commit is contained in:
parent
ba4a83a86b
commit
f1449d75ba
@ -1180,6 +1180,10 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// bytes. For example, promote EXTLOAD:i20 -> EXTLOAD:i24.
|
||||
unsigned NewWidth = SrcVT.getStoreSizeInBits();
|
||||
EVT NVT = EVT::getIntegerVT(*DAG.getContext(), NewWidth);
|
||||
if (SrcVT.isVector()) {
|
||||
NVT = EVT::getVectorVT(*DAG.getContext(), NVT,
|
||||
SrcVT.getVectorNumElements());
|
||||
}
|
||||
SDValue Ch;
|
||||
|
||||
// The extra bits are guaranteed to be zero, since we stored them that
|
||||
@ -1521,7 +1525,12 @@ SDValue SelectionDAGLegalize::LegalizeOp(SDValue Op) {
|
||||
// TRUNCSTORE:i1 X -> TRUNCSTORE:i8 (and X, 1)
|
||||
EVT NVT = EVT::getIntegerVT(*DAG.getContext(),
|
||||
StVT.getStoreSizeInBits());
|
||||
Tmp3 = DAG.getZeroExtendInReg(Tmp3, dl, StVT);
|
||||
if (StVT.isVector()) {
|
||||
NVT = EVT::getVectorVT(*DAG.getContext(), NVT,
|
||||
StVT.getVectorNumElements());
|
||||
}
|
||||
|
||||
Tmp3 = DAG.getZeroExtendInReg(Tmp3, dl, StVT.getScalarType());
|
||||
Result = DAG.getTruncStore(Tmp1, dl, Tmp3, Tmp2, ST->getPointerInfo(),
|
||||
NVT, isVolatile, isNonTemporal, Alignment);
|
||||
} else if (StWidth & (StWidth - 1)) {
|
||||
|
Loading…
Reference in New Issue
Block a user