diff options
Diffstat (limited to 'source/slang/slang-ir.cpp')
| -rw-r--r-- | source/slang/slang-ir.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/source/slang/slang-ir.cpp b/source/slang/slang-ir.cpp index 92543c952..e54238a9c 100644 --- a/source/slang/slang-ir.cpp +++ b/source/slang/slang-ir.cpp @@ -8164,7 +8164,12 @@ static void _maybeHoistOperand(IRUse* use) continue; // If the operand is defined after user, move it to before user. - if (_isInstDefinedAfter(operand, user)) + // There is exception that the use of an inst can be defined before the inst, + // e.g. generic parameter can be defined before its data type in some cases. + // And moving the datatype of a generic parameter before the parameter will result + // in incorrect IR layout, because we require that generic parameters are laid + // consecutively at first block of a generic. + if (_isInstDefinedAfter(operand, user) && !canRelaxInstOrderRule(operand, user)) { operand->insertBefore(user); for (UInt i = 0; i < operand->getOperandCount(); i++) |
