summaryrefslogtreecommitdiff
blob: 877a5827e4ea83054684762a274eef01cc306111 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
commit b0cf3ab7a69b878a4335d21a347b56e4b0ca0b7b
Author: Sergei Trofimovich <slyfox@gentoo.org>
Date:   Mon Apr 14 19:06:24 2014 +0300

    compiler/cmm/PprC.hs: constify local string literals
    
    Consider one-line module
        module B (v) where v = "hello"
    in -fvia-C mode it generates code like
        static char gibberish_str[] = "hello";
    
    It uselessly eats data section (precious resource on ia64!).
    The patch switches genrator to emit:
        static const char gibberish_str[] = "hello";
    
    Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>

diff --git a/compiler/cmm/PprC.hs b/compiler/cmm/PprC.hs
index 2398981..fdb578d 100644
--- a/compiler/cmm/PprC.hs
+++ b/compiler/cmm/PprC.hs
@@ -112,6 +112,12 @@ pprTop (CmmProc infos clbl _ graph) =
 
 -- We only handle (a) arrays of word-sized things and (b) strings.
 
+pprTop (CmmData (Section ReadOnlyData _) (Statics lbl [CmmString str])) =
+  hcat [
+    pprLocalness lbl, ptext (sLit "const char "), ppr lbl,
+    ptext (sLit "[] = "), pprStringInCStyle str, semi
+  ]
+
 pprTop (CmmData _section (Statics lbl [CmmString str])) =
   hcat [
     pprLocalness lbl, ptext (sLit "char "), ppr lbl,