Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions src/LLVM.hs
Original file line number Diff line number Diff line change
Expand Up @@ -485,10 +485,10 @@ writeConstDeclaration spec@(CStringSpec str) n = do
writeConstDeclaration spec@(ClosureSpec pspec args) n = do
let closureName = specialName2 "closure" $ show n
modify $ \s -> s { constNames=Map.insert spec closureName $ constNames s}
let pname = show pspec
argRep <- typeRep AnyType
paramTys <- partitionClosureParams pspec args >>= mapM typeRep . (argType <$>) . fst
declareStructConstant closureName
((ArgGlobal (GlobalVariable pname) (Representation CPointer), CPointer)
((ArgGlobal (GlobalVariable $ mangleProcSpec pspec) (Representation CPointer), CPointer)
: zip args paramTys)
Nothing
writeConstDeclaration spec@(ArraySpec args) n = do
Expand Down Expand Up @@ -1536,7 +1536,7 @@ llvmValue (ArgUndef _) = return "undef"

-- | The LLVMArg translation of a ProcSpec.
funcRef :: ProcSpec -> LLVMArg
funcRef pspec = "ptr " ++ llvmGlobalName (show pspec)
funcRef pspec = "ptr " ++ fst (llvmProcName pspec)


-- | The variable name of a PrimArg; report an error if not a variable.
Expand Down Expand Up @@ -2171,7 +2171,14 @@ stackAlloc result size = do
llvmProcName :: ProcSpec -> (LLVMName,String)
llvmProcName ProcSpec{procSpecMod=[],procSpecName=""} =
(llvmGlobalName "main", "ccc")
llvmProcName pspec = (llvmGlobalName $ show pspec, "fastcc")
llvmProcName pspec =
(llvmGlobalName $ mangleProcSpec pspec, "fastcc")


-- | Mangle a proc spec
mangleProcSpec :: ProcSpec -> String
mangleProcSpec pspec@ProcSpec{procSpecMod=mod} =
show pspec{procSpecMod=(++ [specialChar]) <$> mod}


-- | Make a suitable LLVM name for a global variable or constant. We prefix it
Expand Down
158 changes: 79 additions & 79 deletions test-cases/complex/exp/testcase_multi_specz-drone.exp

Large diffs are not rendered by default.

330 changes: 165 additions & 165 deletions test-cases/complex/exp/testcase_multi_specz-int_list.exp

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion test-cases/final-dump-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ do
| sed -e 's/@\([A-Za-z0-9_]*\):[0-9:]*/@\1:nn:nn/g' \
-e "s|`pwd`|!ROOT!|g" \
-e 's/\[ [0-9][0-9]* x i8 \]/[ ?? x i8 ]/g' \
-e 's/^\(target triple *\)=.*/\1 ????/' \
-e 's/^\(target triple *= *\).*/\1????/' \
> $out
# Add a newline to the end of a file if there isn't to resolve platform differences.
ed -s $out <<< w > /dev/null 2>&1
Expand Down
32 changes: 16 additions & 16 deletions test-cases/final-dump/aaa.exp
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,17 @@ module top-level code > public {inline,semipure} (0 calls)
; ModuleID = 'aaa'

source_filename = "!ROOT!/final-dump/aaa.wybe"
target triple ????
target triple = ????

@"cstring#0" = private unnamed_addr constant [ ?? x i8 ] c"AAA: Init\00", align 8
@"string#1" = private unnamed_addr constant {i64, i64} { i64 9, i64 ptrtoint( ptr @"cstring#0" to i64 ) }, align 8

declare external fastcc void @"wybe.string.print<0>"(i64)
declare external fastcc void @"wybe#.string#.print<0>"(i64)
declare external ccc void @putchar(i8)
declare external ccc void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)

define external fastcc void @"aaa.<0>"() {
tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
define external fastcc void @"aaa#.<0>"() {
tail call fastcc void @"wybe#.string#.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
call ccc void @putchar(i8 10)
ret void
}
Expand Down Expand Up @@ -72,17 +72,17 @@ module top-level code > public {inline,semipure} (0 calls)
; ModuleID = 'bbb'

source_filename = "!ROOT!/final-dump/bbb.wybe"
target triple ????
target triple = ????

@"cstring#0" = private unnamed_addr constant [ ?? x i8 ] c"BBB: Init\00", align 8
@"string#1" = private unnamed_addr constant {i64, i64} { i64 9, i64 ptrtoint( ptr @"cstring#0" to i64 ) }, align 8

declare external fastcc void @"wybe.string.print<0>"(i64)
declare external fastcc void @"wybe#.string#.print<0>"(i64)
declare external ccc void @putchar(i8)
declare external ccc void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)

define external fastcc void @"bbb.<0>"() {
tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
define external fastcc void @"bbb#.<0>"() {
tail call fastcc void @"wybe#.string#.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
call ccc void @putchar(i8 10)
ret void
}
Expand Down Expand Up @@ -114,17 +114,17 @@ module top-level code > public {inline,semipure} (0 calls)
; ModuleID = 'ccc'

source_filename = "!ROOT!/final-dump/ccc.wybe"
target triple ????
target triple = ????

@"cstring#0" = private unnamed_addr constant [ ?? x i8 ] c"CCC: Init\00", align 8
@"string#1" = private unnamed_addr constant {i64, i64} { i64 9, i64 ptrtoint( ptr @"cstring#0" to i64 ) }, align 8

declare external fastcc void @"wybe.string.print<0>"(i64)
declare external fastcc void @"wybe#.string#.print<0>"(i64)
declare external ccc void @putchar(i8)
declare external ccc void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)

define external fastcc void @"ccc.<0>"() {
tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
define external fastcc void @"ccc#.<0>"() {
tail call fastcc void @"wybe#.string#.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
call ccc void @putchar(i8 10)
ret void
}
Expand Down Expand Up @@ -155,17 +155,17 @@ module top-level code > public {inline,semipure} (0 calls)
; ModuleID = 'ddd'

source_filename = "!ROOT!/final-dump/ddd.wybe"
target triple ????
target triple = ????

@"cstring#0" = private unnamed_addr constant [ ?? x i8 ] c"DDD: Init\00", align 8
@"string#1" = private unnamed_addr constant {i64, i64} { i64 9, i64 ptrtoint( ptr @"cstring#0" to i64 ) }, align 8

declare external fastcc void @"wybe.string.print<0>"(i64)
declare external fastcc void @"wybe#.string#.print<0>"(i64)
declare external ccc void @putchar(i8)
declare external ccc void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)

define external fastcc void @"ddd.<0>"() {
tail call fastcc void @"wybe.string.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
define external fastcc void @"ddd#.<0>"() {
tail call fastcc void @"wybe#.string#.print<0>"(i64 ptrtoint( ptr @"string#1" to i64 ))
call ccc void @putchar(i8 10)
ret void
}
14 changes: 7 additions & 7 deletions test-cases/final-dump/afterbreak.exp
Original file line number Diff line number Diff line change
Expand Up @@ -56,19 +56,19 @@ proc #cont#2 > {inline,semipure} (1 calls)
; ModuleID = 'afterbreak'

source_filename = "!ROOT!/final-dump/afterbreak.wybe"
target triple ????
target triple = ????


declare external ccc void @print_int(i64)
declare external ccc void @putchar(i8)
declare external ccc void @llvm.memcpy.p0.p0.i64(ptr, ptr, i64, i1)

define external fastcc void @"afterbreak.<0>"() {
tail call fastcc void @"afterbreak.#cont#1<0>"(i64 1)
define external fastcc void @"afterbreak#.<0>"() {
tail call fastcc void @"afterbreak#.#cont#1<0>"(i64 1)
ret void
}

define external fastcc void @"afterbreak.#cont#1<0>"(i64 %"x##0") {
define external fastcc void @"afterbreak#.#cont#1<0>"(i64 %"x##0") {
%"tmp#1##0" = icmp sgt i64 %"x##0", 10
br i1 %"tmp#1##0", label %if.then.0, label %if.else.0
if.then.0:
Expand All @@ -77,13 +77,13 @@ if.else.0:
%"tmp#0##0" = add i64 %"x##0", 1
call ccc void @print_int(i64 %"tmp#0##0")
call ccc void @putchar(i8 10)
tail call fastcc void @"afterbreak.#cont#1<0>"(i64 %"tmp#0##0")
tail call fastcc void @"afterbreak#.#cont#1<0>"(i64 %"tmp#0##0")
ret void
}

define external fastcc void @"afterbreak.#cont#2<0>"(i64 %"y##0") {
define external fastcc void @"afterbreak#.#cont#2<0>"(i64 %"y##0") {
call ccc void @print_int(i64 %"y##0")
call ccc void @putchar(i8 10)
tail call fastcc void @"afterbreak.#cont#1<0>"(i64 %"y##0")
tail call fastcc void @"afterbreak#.#cont#1<0>"(i64 %"y##0")
ret void
}
Loading