Fix a major copy'n'paste error in LLVM CodeGen
authorKrzysztof Gogolewski <krz.gogolewski@gmail.com>
Sun, 22 Jul 2018 15:33:32 +0000 (17:33 +0200)
committerBen Gamari <ben@smart-cactus.org>
Tue, 31 Jul 2018 18:18:37 +0000 (14:18 -0400)
Summary:
In D4592, `AddWordC` is lowered as an unsigned subtraction instead
of an unsigned addition when compiling with LLVM.

This patch rectifies that.

Reviewers: angerman, bgamari, monoidal

Reviewed By: angerman, bgamari, monoidal

Subscribers: osa1, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4969

(cherry picked from commit f629442be93f4608e6bb53bfe2264a406230c546)

compiler/llvmGen/LlvmCodeGen/CodeGen.hs
testsuite/tests/numeric/should_run/all.T

index 678fffa..f25cb79 100644 (file)
@@ -804,7 +804,7 @@ cmmPrimOpFunctions mop = do
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
     MO_Add2 w       -> fsLit $ "llvm.uadd.with.overflow."
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
-    MO_AddWordC w   -> fsLit $ "llvm.usub.with.overflow."
+    MO_AddWordC w   -> fsLit $ "llvm.uadd.with.overflow."
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
     MO_SubWordC w   -> fsLit $ "llvm.usub.with.overflow."
                              ++ showSDoc dflags (ppr $ widthToLlvmInt w)
index 140fa6c..eac0278 100644 (file)
@@ -62,7 +62,7 @@ test('CarryOverflow', omit_ways(['ghci']), compile_and_run, [''])
 test('T9407', normal, compile_and_run, [''])
 test('T9810', normal, compile_and_run, [''])
 test('T10011', normal, compile_and_run, [''])
-test('T10962', omit_ways(['ghci']), compile_and_run, ['-O2'])
+test('T10962', [omit_ways(['ghci']), extra_ways(['llvm'])], compile_and_run, ['-O2'])
 test('T11702', extra_ways(['optasm']), compile_and_run, [''])
 test('T12136', normal, compile_and_run, [''])
 test('T15301', normal, compile_and_run, ['-O2'])