Просмотр исходного кода

shader: Add constant propagation for arithmetic right shifts

ReinUsesLisp 5 лет назад
Родитель
Сommit
a8d46a5eae
1 измененных файлов с 3 добавлено и 0 удалено
  1. 3 0
      src/shader_recompiler/ir_opt/constant_propagation_pass.cpp

+ 3 - 0
src/shader_recompiler/ir_opt/constant_propagation_pass.cpp

@@ -482,6 +482,9 @@ void ConstantPropagation(IR::Block& block, IR::Inst& inst) {
     case IR::Opcode::IMul32:
     case IR::Opcode::IMul32:
         FoldWhenAllImmediates(inst, [](u32 a, u32 b) { return a * b; });
         FoldWhenAllImmediates(inst, [](u32 a, u32 b) { return a * b; });
         return;
         return;
+    case IR::Opcode::ShiftRightArithmetic32:
+        FoldWhenAllImmediates(inst, [](s32 a, s32 b) { return static_cast<u32>(a >> b); });
+        return;
     case IR::Opcode::BitCastF32U32:
     case IR::Opcode::BitCastF32U32:
         return FoldBitCast<IR::Opcode::BitCastF32U32, f32, u32>(inst, IR::Opcode::BitCastU32F32);
         return FoldBitCast<IR::Opcode::BitCastF32U32, f32, u32>(inst, IR::Opcode::BitCastU32F32);
     case IR::Opcode::BitCastU32F32:
     case IR::Opcode::BitCastU32F32: