Skip to content

Commit ad355a3

Browse files
fixing tests
1 parent 7c6e944 commit ad355a3

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

llvm/lib/Target/DirectX/DXILTranslateMetadata.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ static MDTuple *emitTopLevelLibraryNode(Module &M, MDNode *RMD,
298298

299299
// TODO: We might need to refactor this to be more generic,
300300
// in case we need more metadata to be replaced.
301-
static void replaceMetadata(Module &M) {
301+
static void translateBranchMetadata(Module &M) {
302302
for (auto &F : M) {
303303
for (auto &BB : F) {
304304
auto *BBTerminatorInst = BB.getTerminator();
@@ -395,7 +395,7 @@ PreservedAnalyses DXILTranslateMetadata::run(Module &M,
395395
const dxil::ModuleMetadataInfo MMDI = MAM.getResult<DXILMetadataAnalysis>(M);
396396

397397
translateMetadata(M, DRM, MDResources, ShaderFlags, MMDI);
398-
replaceMetadata(M);
398+
translateBranchMetadata(M);
399399

400400
return PreservedAnalyses::all();
401401
}
@@ -429,7 +429,7 @@ class DXILTranslateMetadataLegacy : public ModulePass {
429429
getAnalysis<DXILMetadataAnalysisWrapperPass>().getModuleMetadata();
430430

431431
translateMetadata(M, DRM, MDResources, ShaderFlags, MMDI);
432-
replaceMetadata(M);
432+
translateBranchMetadata(M);
433433
return true;
434434
}
435435
};

llvm/lib/Target/SPIRV/SPIRVInstructionSelector.cpp

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2811,18 +2811,26 @@ bool SPIRVInstructionSelector::selectIntrinsic(Register ResVReg,
28112811
case Intrinsic::spv_selection_merge: {
28122812

28132813
auto SelectionControl = SPIRV::SelectionControl::None;
2814-
const MDNode *MDOp =
2815-
I.getOperand(I.getNumExplicitOperands() - 1).getMetadata();
2816-
if (MDOp->getNumOperands() > 0) {
2817-
ConstantInt *BranchHint =
2818-
mdconst::extract<ConstantInt>(MDOp->getOperand(1));
2819-
2820-
if (BranchHint->equalsInt(2))
2821-
SelectionControl = SPIRV::SelectionControl::Flatten;
2822-
else if (BranchHint->equalsInt(1))
2823-
SelectionControl = SPIRV::SelectionControl::DontFlatten;
2824-
else
2825-
llvm_unreachable("Invalid value for SelectionControl");
2814+
auto LastOp = I.getOperand(I.getNumExplicitOperands() - 1);
2815+
2816+
assert((LastOp.isMBB() || LastOp.isMetadata()) &&
2817+
"Invalid type for last Machine Operand");
2818+
2819+
if (LastOp.isMetadata()) {
2820+
const MDNode *MDOp = LastOp.getMetadata();
2821+
if (MDOp->getNumOperands() == 2) {
2822+
if (ConstantInt *BranchHint =
2823+
mdconst::extract<ConstantInt>(MDOp->getOperand(1))) {
2824+
if (BranchHint->equalsInt(2))
2825+
SelectionControl = SPIRV::SelectionControl::Flatten;
2826+
else if (BranchHint->equalsInt(1))
2827+
SelectionControl = SPIRV::SelectionControl::DontFlatten;
2828+
else
2829+
llvm_unreachable("Invalid value for SelectionControl");
2830+
} else {
2831+
llvm_unreachable("Invalid value for SelectionControl");
2832+
}
2833+
}
28262834
}
28272835

28282836
auto MIB =

llvm/lib/Target/SPIRV/SPIRVStructurizer.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,8 +1207,9 @@ class SPIRVStructurizer : public FunctionPass {
12071207
Instruction *BBTerminatorInst = Builder->GetInsertBlock()->getTerminator();
12081208

12091209
MDNode *MDNode = BBTerminatorInst->getMetadata("hlsl.controlflow.hint");
1210-
if (MDNode && MDNode->getNumOperands() != 2)
1211-
llvm_unreachable("invalid metadata hlsl.controlflow.hint");
1210+
if (MDNode)
1211+
assert(MDNode->getNumOperands() == 2 &&
1212+
"invalid metadata hlsl.controlflow.hint");
12121213

12131214
Value *MDNodeValue = MetadataAsValue::get(Builder->getContext(), MDNode);
12141215

0 commit comments

Comments
 (0)