diff options
| author | LDj3SNuD <35856442+LDj3SNuD@users.noreply.github.com> | 2021-02-23 13:15:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-02-23 13:15:45 +0100 |
| commit | bcbf240d2eab2a2794224487d87519ac31016c96 (patch) | |
| tree | d352060802864a34bb2c51db5aa89487f04165bc /ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs | |
| parent | 0aea1e5cb01ee693bd806f29b49b40c37b256894 (diff) | |
PPTC: Fix unwanted propagation of a relocatable constant in a specific case. (#1990)
* Fix unwanted propagation of a relocatable constant in a specific case.
* Ptc.InternalVersion = 1990
* Nit to retrigger the Checks.
Diffstat (limited to 'ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs')
| -rw-r--r-- | ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs b/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs index 73828140..412f6ea4 100644 --- a/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs +++ b/ARMeilleure/CodeGen/Optimizations/ConstantFolding.cs @@ -14,7 +14,7 @@ namespace ARMeilleure.CodeGen.Optimizations return; } - if (!AreAllSourcesConstantAndCFEnabled(operation)) + if (!AreAllSourcesConstant(operation)) { return; } @@ -24,6 +24,12 @@ namespace ARMeilleure.CodeGen.Optimizations switch (operation.Instruction) { case Instruction.Add: + if (operation.GetSource(0).Relocatable || + operation.GetSource(1).Relocatable) + { + break; + } + if (type == OperandType.I32) { EvaluateBinaryI32(operation, (x, y) => x + y); @@ -252,13 +258,13 @@ namespace ARMeilleure.CodeGen.Optimizations } } - private static bool AreAllSourcesConstantAndCFEnabled(Operation operation) + private static bool AreAllSourcesConstant(Operation operation) { for (int index = 0; index < operation.SourcesCount; index++) { Operand srcOp = operation.GetSource(index); - if (srcOp.Kind != OperandKind.Constant || srcOp.Relocatable) + if (srcOp.Kind != OperandKind.Constant) { return false; } |
