From bb017e6aa8ddbfac6b9a78a66f4706964fbeaff4 Mon Sep 17 00:00:00 2001 From: Yong He Date: Mon, 4 Mar 2024 21:57:50 -0800 Subject: Extend `as` and `is` operator to work on generic types. (#3672) --- source/slang/slang-ir-peephole.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'source/slang/slang-ir-peephole.cpp') diff --git a/source/slang/slang-ir-peephole.cpp b/source/slang/slang-ir-peephole.cpp index d7c3c6bda..d4369da7a 100644 --- a/source/slang/slang-ir-peephole.cpp +++ b/source/slang/slang-ir-peephole.cpp @@ -958,8 +958,14 @@ struct PeepholeContext : InstPassBase } case kIROp_TypeEquals: { - auto left = inst->getOperand(0)->getDataType(); - auto right = inst->getOperand(1)->getDataType(); + auto getTypeFromOperand = [](IRInst* operand) -> IRType* + { + if (as(operand->getFullType()) || !operand->getFullType()) + return (IRType*)operand; + return operand->getFullType(); + }; + auto left = getTypeFromOperand(inst->getOperand(0)); + auto right = getTypeFromOperand(inst->getOperand(1)); if (isConcreteType(left) && isConcreteType(right)) { IRBuilder builder(module); -- cgit v1.2.3