Skip to content

Commit 66a1e8f

Browse files
igorban-inteligcbot
authored andcommitted
Drop range metadata for vectors in packetizer
.
1 parent 291540c commit 66a1e8f

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

IGC/VectorCompiler/lib/GenXOpts/CMPacketize/GenXPacketize.cpp

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -761,6 +761,23 @@ Value *GenXPacketize::packetizeConstant(Constant *C) {
761761
}
762762
}
763763

764+
// Helper: vectorize scalar MD_range metadata for a vector instruction
765+
static void vectorizeRangeMetadata(Instruction *OldCI, Instruction *NewCI) {
766+
auto *OldRangeMD = OldCI->getMetadata(LLVMContext::MD_range);
767+
if (!OldRangeMD)
768+
return;
769+
Type *Ty = NewCI->getType();
770+
771+
// Currently, llvm15/16 work inconsistently with MD_range metadata for vectors.
772+
// Link1: Verifier.cpp Verifier::visitRangeMetadata
773+
// -> "Range types must match instruction type!"
774+
// Link2: ValueTracking.cpp llvm::computeKnownBitsFromRangeMetadata
775+
// -> ConstantInt *Lower = ... Ranges.getOperand(2 * i + 0)
776+
if (auto *VecTy = dyn_cast<VectorType>(Ty))
777+
NewCI->setMetadata(LLVMContext::MD_range, nullptr);
778+
return;
779+
}
780+
764781
//////////////////////////////////////////////////////////////////////////
765782
/// @brief Packetize an LLVM intrinsic. Generally this means replacing
766783
/// a scalar intrinsic function call with a vectored equivalent.
@@ -1659,8 +1676,10 @@ Value *GenXPacketize::packetizeInstruction(Instruction *Inst) {
16591676
DII->replaceVariableLocationOp(Inst, Result);
16601677
}
16611678
// Copy any metadata to new instruction
1662-
if (Result != Inst && isa<Instruction>(Result))
1679+
if (Result != Inst && isa<Instruction>(Result)) {
16631680
cast<Instruction>(Result)->copyMetadata(*Inst);
1681+
vectorizeRangeMetadata(Inst, dyn_cast<Instruction>(Result));
1682+
}
16641683
}
16651684
return Result;
16661685
}

0 commit comments

Comments
 (0)