summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2021-10-21 11:13:23 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-11-06 07:53:42 -0400
commite279ea6479279b0899d1d2cd683ceb70bb4a77f3 (patch)
tree7ec338811028c6eac4d16e09544b9501fdfafbf3
parentecd6d14215eb40ac441c075e432ddaa0237f3c72 (diff)
downloadhaskell-e279ea6479279b0899d1d2cd683ceb70bb4a77f3.tar.gz
Add missing Int64/Word64 constant-folding rules
-rw-r--r--compiler/GHC/Core/Opt/ConstantFold.hs16
1 files changed, 16 insertions, 0 deletions
diff --git a/compiler/GHC/Core/Opt/ConstantFold.hs b/compiler/GHC/Core/Opt/ConstantFold.hs
index 85327c56a4..0d2db119a8 100644
--- a/compiler/GHC/Core/Opt/ConstantFold.hs
+++ b/compiler/GHC/Core/Opt/ConstantFold.hs
@@ -690,6 +690,9 @@ primOpRules nm = \case
Int32EqOp -> mkRelOpRule nm (==) [ litEq True ]
Int32NeOp -> mkRelOpRule nm (/=) [ litEq False ]
+ Int64EqOp -> mkRelOpRule nm (==) [ litEq True ]
+ Int64NeOp -> mkRelOpRule nm (/=) [ litEq False ]
+
IntEqOp -> mkRelOpRule nm (==) [ litEq True ]
IntNeOp -> mkRelOpRule nm (/=) [ litEq False ]
@@ -702,6 +705,9 @@ primOpRules nm = \case
Word32EqOp -> mkRelOpRule nm (==) [ litEq True ]
Word32NeOp -> mkRelOpRule nm (/=) [ litEq False ]
+ Word64EqOp -> mkRelOpRule nm (==) [ litEq True ]
+ Word64NeOp -> mkRelOpRule nm (/=) [ litEq False ]
+
WordEqOp -> mkRelOpRule nm (==) [ litEq True ]
WordNeOp -> mkRelOpRule nm (/=) [ litEq False ]
@@ -731,6 +737,11 @@ primOpRules nm = \case
Int32LeOp -> mkRelOpRule nm (<=) [ boundsCmp Le ]
Int32LtOp -> mkRelOpRule nm (<) [ boundsCmp Lt ]
+ Int64GtOp -> mkRelOpRule nm (>) [ boundsCmp Gt ]
+ Int64GeOp -> mkRelOpRule nm (>=) [ boundsCmp Ge ]
+ Int64LeOp -> mkRelOpRule nm (<=) [ boundsCmp Le ]
+ Int64LtOp -> mkRelOpRule nm (<) [ boundsCmp Lt ]
+
IntGtOp -> mkRelOpRule nm (>) [ boundsCmp Gt ]
IntGeOp -> mkRelOpRule nm (>=) [ boundsCmp Ge ]
IntLeOp -> mkRelOpRule nm (<=) [ boundsCmp Le ]
@@ -751,6 +762,11 @@ primOpRules nm = \case
Word32LeOp -> mkRelOpRule nm (<=) [ boundsCmp Le ]
Word32LtOp -> mkRelOpRule nm (<) [ boundsCmp Lt ]
+ Word64GtOp -> mkRelOpRule nm (>) [ boundsCmp Gt ]
+ Word64GeOp -> mkRelOpRule nm (>=) [ boundsCmp Ge ]
+ Word64LeOp -> mkRelOpRule nm (<=) [ boundsCmp Le ]
+ Word64LtOp -> mkRelOpRule nm (<) [ boundsCmp Lt ]
+
WordGtOp -> mkRelOpRule nm (>) [ boundsCmp Gt ]
WordGeOp -> mkRelOpRule nm (>=) [ boundsCmp Ge ]
WordLeOp -> mkRelOpRule nm (<=) [ boundsCmp Le ]